summaryrefslogtreecommitdiffstats
path: root/www
diff options
context:
space:
mode:
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.html289
-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.html1578
-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.html219
-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.html552
-rw-r--r--www/c3ref/c_dbconfig_defensive.html485
-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.html226
-rw-r--r--www/c3ref/c_fail.html142
-rw-r--r--www/c3ref/c_fcntl_begin_atomic_write.html545
-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_complex.html130
-rw-r--r--www/c3ref/c_scanstat_est.html204
-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.html173
-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.html203
-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.html161
-rw-r--r--www/c3ref/constlist.html591
-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.html177
-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.html194
-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.html433
-rw-r--r--www/c3ref/get_autocommit.html147
-rw-r--r--www/c3ref/get_auxdata.html194
-rw-r--r--www/c3ref/get_clientdata.html180
-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.html166
-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.html182
-rw-r--r--www/c3ref/mprintf.html170
-rw-r--r--www/c3ref/mutex.html137
-rw-r--r--www/c3ref/mutex_alloc.html247
-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.html422
-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.html241
-rw-r--r--www/c3ref/profile.html161
-rw-r--r--www/c3ref/progress_handler.html165
-rw-r--r--www/c3ref/randomness.html148
-rw-r--r--www/c3ref/release_memory.html141
-rw-r--r--www/c3ref/reset.html163
-rw-r--r--www/c3ref/reset_auto_extension.html133
-rw-r--r--www/c3ref/result_blob.html294
-rw-r--r--www/c3ref/result_subtype.html152
-rw-r--r--www/c3ref/serialize.html175
-rw-r--r--www/c3ref/set_authorizer.html218
-rw-r--r--www/c3ref/set_last_insert_rowid.html134
-rw-r--r--www/c3ref/sleep.html151
-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.html232
-rw-r--r--www/c3ref/status.html159
-rw-r--r--www/c3ref/step.html208
-rw-r--r--www/c3ref/stmt.html222
-rw-r--r--www/c3ref/stmt_busy.html145
-rw-r--r--www/c3ref/stmt_explain.html159
-rw-r--r--www/c3ref/stmt_isexplain.html136
-rw-r--r--www/c3ref/stmt_readonly.html173
-rw-r--r--www/c3ref/stmt_scanstatus.html175
-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.html162
-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.html268
-rw-r--r--www/c3ref/value_dup.html142
-rw-r--r--www/c3ref/value_encoding.html146
-rw-r--r--www/c3ref/value_subtype.html142
-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.html173
-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.html12072
-rw-r--r--www/carray.html255
-rw-r--r--www/changes.html7085
-rw-r--r--www/chronology.html948
-rw-r--r--www/cintro.html602
-rw-r--r--www/cksumvfs.html314
-rw-r--r--www/cli.html2050
-rw-r--r--www/codeofconduct.html140
-rw-r--r--www/codeofethics.html336
-rw-r--r--www/compile.html2133
-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.html783
-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.html17346
-rw-r--r--www/doc_keyword_crossref.html119
-rw-r--r--www/doc_pagelink_crossref.html1149
-rw-r--r--www/doc_target_crossref.html2095
-rw-r--r--www/doclist.html342
-rw-r--r--www/docs.html754
-rw-r--r--www/download.html224
-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.html656
-rw-r--r--www/fasterthanfs.html649
-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.html480
-rw-r--r--www/footprint.html154
-rw-r--r--www/foreignkeys.html1051
-rw-r--r--www/formatchng.html166
-rw-r--r--www/fts3.html3287
-rw-r--r--www/fts5.html3718
-rw-r--r--www/fullsql.html187
-rw-r--r--www/gencol.html308
-rw-r--r--www/geopoly.html581
-rw-r--r--www/getthecode.html274
-rw-r--r--www/hirely.html173
-rw-r--r--www/howitworks.html387
-rw-r--r--www/howtocompile.html462
-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/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 -> 10887 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.html288
-rw-r--r--www/inmemorydb.html252
-rw-r--r--www/intern-v-extern-blob.html212
-rw-r--r--www/invalidutf.html249
-rw-r--r--www/isolation.html370
-rw-r--r--www/json1.html1620
-rw-r--r--www/keyword_index.html3228
-rw-r--r--www/lang.html433
-rw-r--r--www/lang_aggfunc.html2575
-rw-r--r--www/lang_altertable.html3430
-rw-r--r--www/lang_analyze.html350
-rw-r--r--www/lang_attach.html2521
-rw-r--r--www/lang_comment.html209
-rw-r--r--www/lang_conflict.html294
-rw-r--r--www/lang_corefunc.html737
-rw-r--r--www/lang_createindex.html2667
-rw-r--r--www/lang_createtable.html6138
-rw-r--r--www/lang_createtrigger.html4455
-rw-r--r--www/lang_createview.html2452
-rw-r--r--www/lang_createvtab.html244
-rw-r--r--www/lang_datefunc.html678
-rw-r--r--www/lang_delete.html3897
-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.html3499
-rw-r--r--www/lang_indexedby.html260
-rw-r--r--www/lang_insert.html2964
-rw-r--r--www/lang_keywords.html361
-rw-r--r--www/lang_mathfunc.html319
-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.html2712
-rw-r--r--www/lang_savepoint.html325
-rw-r--r--www/lang_select.html16229
-rw-r--r--www/lang_transaction.html445
-rw-r--r--www/lang_update.html4636
-rw-r--r--www/lang_upsert.html2780
-rw-r--r--www/lang_vacuum.html299
-rw-r--r--www/lang_with.html3226
-rw-r--r--www/lemon.html295
-rw-r--r--www/limits.html540
-rw-r--r--www/loadext.html495
-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.html835
-rw-r--r--www/np1queryprob.html516
-rw-r--r--www/nulinstr.html237
-rw-r--r--www/nulls.html440
-rw-r--r--www/oldnews.html1854
-rw-r--r--www/omitted.html157
-rw-r--r--www/onefile.html168
-rw-r--r--www/opcode.html2655
-rw-r--r--www/optoverview.html1633
-rw-r--r--www/partialindex.html2794
-rw-r--r--www/pgszchng2016.html189
-rw-r--r--www/pragma.html2282
-rw-r--r--www/pressrelease-20071212.html123
-rw-r--r--www/printf.html564
-rw-r--r--www/privatebranch.html532
-rw-r--r--www/profile.html450
-rw-r--r--www/prosupport.html461
-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.html549
-rw-r--r--www/rbu.html765
-rw-r--r--www/recovery.html391
-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.html191
-rw-r--r--www/releaselog/3_41_0.html192
-rw-r--r--www/releaselog/3_41_1.html207
-rw-r--r--www/releaselog/3_41_2.html228
-rw-r--r--www/releaselog/3_42_0.html177
-rw-r--r--www/releaselog/3_43_0.html171
-rw-r--r--www/releaselog/3_43_1.html183
-rw-r--r--www/releaselog/3_43_2.html191
-rw-r--r--www/releaselog/3_44_0.html175
-rw-r--r--www/releaselog/3_44_1.html182
-rw-r--r--www/releaselog/3_44_2.html191
-rw-r--r--www/releaselog/3_45_0.html175
-rw-r--r--www/releaselog/3_45_1.html200
-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.html146
-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.html149
-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.html200
-rw-r--r--www/requirements.html240
-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.html942
-rw-r--r--www/schematab.html281
-rwxr-xr-xwww/search1440
-rwxr-xr-xwww/search.d/admin1248
-rw-r--r--www/search.d/search.dbbin0 -> 9785344 bytes
-rw-r--r--www/security.html330
-rw-r--r--www/selfcontained.html169
-rw-r--r--www/series.html219
-rw-r--r--www/serverless.html224
-rw-r--r--www/session.html1874
-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_fknoaction.html163
-rw-r--r--www/session/c_changesetstart_invert.html131
-rw-r--r--www/session/c_session_config_strmsize.html123
-rw-r--r--www/session/c_session_objconfig_rowid.html153
-rw-r--r--www/session/changegroup.html131
-rw-r--r--www/session/changeset_iter.html142
-rw-r--r--www/session/constlist.html145
-rw-r--r--www/session/funclist.html178
-rw-r--r--www/session/intro.html154
-rw-r--r--www/session/objlist.html133
-rw-r--r--www/session/rebaser.html217
-rw-r--r--www/session/session.html142
-rw-r--r--www/session/sqlite3changegroup_add.html200
-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/sqlite3changegroup_schema.html149
-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/sqlite3changeset_upgrade.html128
-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_object_config.html128
-rw-r--r--www/session/sqlite3session_patchset.html152
-rw-r--r--www/session/sqlite3session_table_filter.html136
-rw-r--r--www/sessionintro.html651
-rw-r--r--www/sharedcache.html406
-rw-r--r--www/shortnames.html241
-rw-r--r--www/sitemap.html766
-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.html288
-rw-r--r--www/sqlite.css311
-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.html199
-rw-r--r--www/syntax/aggregate-function-invocation.html206
-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.html606
-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/function-arguments.html187
-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.html348
-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.html6557
-rw-r--r--www/tclsqlite.html1310
-rw-r--r--www/tempfiles.html880
-rw-r--r--www/testing.html1288
-rw-r--r--www/th3.html570
-rw-r--r--www/threadsafe.html228
-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.html382
-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.html2047
-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.html7936
-rw-r--r--www/withoutrowid.html424
-rw-r--r--www/zeroconf.html147
-rw-r--r--www/zipfile.html454
979 files changed, 339247 insertions, 0 deletions
diff --git a/www/34to35.html b/www/34to35.html
new file mode 100644
index 0000000..a990e98
--- /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=ea67967bbd">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/35to36.html b/www/35to36.html
new file mode 100644
index 0000000..bb167c4
--- /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=f555d66703">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/about.html b/www/about.html
new file mode 100644
index 0000000..f395798
--- /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="https://www.sqlite.org/src/rptview?rn=1">bugs lists</a> and
+minute-by-minute <a href="https://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>
+
+
diff --git a/www/aff_short.html b/www/aff_short.html
new file mode 100644
index 0000000..ea240ca
--- /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=e10af018ad">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/affcase1.html b/www/affcase1.html
new file mode 100644
index 0000000..3d69dc1
--- /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="https://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.
+
+
diff --git a/www/amalgamation.html b/www/amalgamation.html
new file mode 100644
index 0000000..777232f
--- /dev/null
+++ b/www/amalgamation.html
@@ -0,0 +1,289 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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_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.
+
+<a name="amalgtarball"></a>
+
+</p><h1 id="download_copies_of_the_precompiled_amalgamation"><span>4. </span>Download Copies Of The Precompiled 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>
+
diff --git a/www/appfileformat.html b/www/appfileformat.html
new file mode 100644
index 0000000..24b4907
--- /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=dcc7b088c6">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/appfunc.html b/www/appfunc.html
new file mode 100644
index 0000000..998bcd0
--- /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 VIEWs.
+</li><li> 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=da7fbd0b40">2023-02-27 02:07:35</a> UTC </small></i></p>
+
diff --git a/www/arch.html b/www/arch.html
new file mode 100644
index 0000000..48c8937
--- /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=5dd2504487">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/assert.html b/www/assert.html
new file mode 100644
index 0000000..52d1959
--- /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=abade93b77">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/asyncvfs.html b/www/asyncvfs.html
new file mode 100644
index 0000000..87e4a59
--- /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="https://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="https://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.
+
+
diff --git a/www/atomiccommit.html b/www/atomiccommit.html
new file mode 100644
index 0000000..0c7ebeb
--- /dev/null
+++ b/www/atomiccommit.html
@@ -0,0 +1,1578 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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>
+
+<a name="section_3_2"></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=a727909a51">2022-12-31 21:51:03</a> UTC </small></i></p>
+
diff --git a/www/autoinc.html b/www/autoinc.html
new file mode 100644
index 0000000..4923832
--- /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=bd2decf99d">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/backup.html b/www/backup.html
new file mode 100644
index 0000000..1d917f5
--- /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=6237da6d29">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/bindptr.html b/www/bindptr.html
new file mode 100644
index 0000000..e2bb32d
--- /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=0313c34170">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..90498d6
--- /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/product/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&nbsp;Da&nbsp;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="https://www.amazon.com/dp/product/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: Kay Droessler<br>
+Publisher: Lulu.com<br>
+<a href="https://www.amazon.com/product/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="https://www.amazon.com/product/dp/0557076765">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="https://www.amazon.co.jp/product/dp/479811944X">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 https://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="https://www.amazon.com/product/dp/067232685X">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>
+
+
diff --git a/www/bytecodevtab.html b/www/bytecodevtab.html
new file mode 100644
index 0000000..621d209
--- /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=fe69f4a05c">2022-01-08 05:02:57</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..109a048
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..93c8509
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0c53d01
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c981d86
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..13a81da
--- /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="../c3ref/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 canceled. 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/backup.html b/www/c3ref/backup.html
new file mode 100644
index 0000000..e6e590c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..bdd1acd
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..ab264d7
--- /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="../c3ref/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 passed 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e30ed80
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b9061ab
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0c85901
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob.html b/www/c3ref/blob.html
new file mode 100644
index 0000000..d6cb44c
--- /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="../c3ref/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 using this object: <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a></p>
+<p>1 Destructor using this object: <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a></p>
+<p>4 Methods using this object:
+ <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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..cac7c85
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..3eda016
--- /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="../c3ref/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 behavior. 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..ea8fa3f
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..37dbffa
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..bfab690
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..f19f21e
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d4898ae
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..eaafa2c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0761d8e
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..2d11cbd
--- /dev/null
+++ b/www/c3ref/c_abort_rollback.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>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_IN_PAGE 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_RBU 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="../c3ref/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_IOERR_IN_PAGE (SQLITE_IOERR | (34&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_NOTICE_RBU (SQLITE_NOTICE | (3&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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..88b5031
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..34e78ba
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..4c30c3c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0683d71
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..888e97c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..fb67580
--- /dev/null
+++ b/www/c3ref/c_config_covering_index_scan.html
@@ -0,0 +1,552 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="../c3ref/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>Most of the configuration options for sqlite3_config()
+will only work if invoked prior to <a href="../c3ref/initialize.html">sqlite3_initialize()</a> or after
+<a href="../c3ref/initialize.html">sqlite3_shutdown()</a>. The few exceptions to this rule are called
+"anytime configuration options".
+Calling <a href="../c3ref/config.html">sqlite3_config()</a> with a first argument that is not an
+anytime configuration option in between calls to <a href="../c3ref/initialize.html">sqlite3_initialize()</a> and
+<a href="../c3ref/initialize.html">sqlite3_shutdown()</a> is a no-op that returns SQLITE_MISUSE.</p>
+
+<p>The set of anytime configuration options can change (by insertions
+and/or deletions) from one release of SQLite to the next.
+As of SQLite version 3.42.0, the complete set of anytime configuration
+options is:
+<ul>
+<li> SQLITE_CONFIG_LOG
+<li> SQLITE_CONFIG_PCACHE_HDRSZ
+</ul></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 behavior.
+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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e0ac3d1
--- /dev/null
+++ b/www/c3ref/c_dbconfig_defensive.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>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_REVERSE_SCANORDER SQLITE_DBCONFIG_STMT_SCANSTATUS SQLITE_DBCONFIG_TRIGGER_EQP SQLITE_DBCONFIG_TRUSTED_SCHEMA SQLITE_DBCONFIG_WRITABLE_SCHEMA -->
+<div class=nosearch>
+<a href="../c3ref/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_STMT_SCANSTATUS 1018 /* int int* */
+#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1019 /* 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_dbstatus_options.html#sqlitedbstatuslookasideused">SQLITE_DBSTATUS_LOOKASIDE_USED</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 behavior. 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. Because this
+feature must be capable of resetting corrupt databases, and
+shutting down virtual tables may require access to that corrupt
+storage, the library must abandon any installed virtual tables
+without calling their xDestroy() methods.</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</dt>
+<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</dt>
+<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</dt>
+<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</dt>
+<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 generate 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 descending indexes.
+</dd></p>
+
+<p><a name="sqlitedbconfigstmtscanstatus"></a>
+
+<dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt>
+<dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in
+SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears
+a flag that enables collection of the sqlite3_stmt_scanstatus_v2()
+statistics. For statistics to be collected, the flag must be set on
+the database handle both when the SQL statement is prepared and when it
+is stepped. The flag is set (collection of statistics is enabled)
+by default. This option takes two arguments: an integer and a pointer to
+an integer.. The first argument is 1, 0, or -1 to enable, disable, or
+leave unchanged the statement scanstatus option. If the second argument
+is not NULL, then the value of the statement scanstatus setting after
+processing the first argument is written into the integer that the second
+argument points to.
+</dd></p>
+
+<p><a name="sqlitedbconfigreversescanorder"></a>
+
+<dt>SQLITE_DBCONFIG_REVERSE_SCANORDER</dt>
+<dd>The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order
+in which tables and indexes are scanned so that the scans start at the end
+and work toward the beginning rather than starting at the beginning and
+working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the
+same as setting <a href="../pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a>. This option takes
+two arguments which are an integer and a pointer to an integer. The first
+argument is 1, 0, or -1 to enable, disable, or leave unchanged the
+reverse scan order flag, respectively. If the second argument is not NULL,
+then 0 or 1 is written into the integer that the second argument points to
+depending on if the reverse scan order flag is set after processing the
+first argument.
+</dd></p>
+
+<p></dl>
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..21d027f
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..83d8948
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..bfd2399
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..5e31f34
--- /dev/null
+++ b/www/c3ref/c_deterministic.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>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_RESULT_SUBTYPE SQLITE_SUBTYPE -->
+<div class=nosearch>
+<a href="../c3ref/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
+#define SQLITE_RESULT_SUBTYPE 0x001000000
+</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>.
+<p>
+The SQLITE_DIRECTONLY flag is recommended for any
+<a href="../appfunc.html">application-defined SQL function</a>
+that has side-effects or that could potentially leak sensitive information.
+This will prevent attacks in which an application is tricked
+into using a database file that has had its schema surreptitiously
+modified to invoke the application-defined function in ways that are
+harmful.
+<p>
+Some people say it is good practice to set SQLITE_DIRECTONLY on all
+<a href="../appfunc.html">application-defined SQL functions</a>, regardless of whether or not they
+are security sensitive, as doing so prevents those functions from being used
+inside of the database schema, and thus ensures that the database
+can be inspected and modified using generic tools (such as the <a href="../cli.html">CLI</a>)
+that do not have access to the application-defined functions.
+</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 might call
+<a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> to inspect the sub-types of its arguments.
+This flag instructs SQLite to omit some corner-case optimizations that
+might disrupt the operation of the <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> function,
+causing it to return zero rather than the correct subtype().
+SQL functions that invokes <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> should have this
+property. If the SQLITE_SUBTYPE property is omitted, then the return
+value from <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> might sometimes be zero even though
+a non-zero subtype was specified by the function argument expression.</p>
+
+<p><a name="sqliteresultsubtype"></a>
+ <dt>SQLITE_RESULT_SUBTYPE</dt><dd>
+The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call
+<a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> to cause a sub-type to be associated with its
+result.
+Every function that invokes <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> should have this
+property. If it does not, then the call to <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+might become a no-op if the function is used as term in an
+<a href="../expridx.html">expression index</a>. On the other hand, SQL functions that never invoke
+<a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> should avoid setting this property, as the
+purpose of this property is to disable certain optimizations that are
+incompatible with subtypes.
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..359f197
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..76d6e5a
--- /dev/null
+++ b/www/c3ref/c_fcntl_begin_atomic_write.html
@@ -0,0 +1,545 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="../c3ref/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.</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.</p>
+
+<p><li><a name="sqlitefcntlcksmfile"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile">SQLITE_FCNTL_CKSM_FILE</a> opcode is for use internally by the
+<a href="../cksumvfs.html">checksum VFS shim</a> 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 the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> 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, this opcode is a no-op, not an error.
+</ul>
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b665df4
--- /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="../c3ref/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 not commonly needed.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..fcc074b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b8ec800
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..1a4e7cf
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..869404d
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c688a02
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..59bb170
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8b759fd
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_scanstat_complex.html b/www/c3ref/c_scanstat_complex.html
new file mode 100644
index 0000000..8bf15ab
--- /dev/null
+++ b/www/c3ref/c_scanstat_complex.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>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: SQLITE_SCANSTAT_COMPLEX {scan status flags} -->
+<div class=nosearch>
+<a href="../c3ref/intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Prepared Statement Scan Status</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SCANSTAT_COMPLEX 0x0001
+</pre></blockquote>
+<p></p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..77de6a1
--- /dev/null
+++ b/www/c3ref/c_scanstat_est.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>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_NCYCLE SQLITE_SCANSTAT_NLOOP SQLITE_SCANSTAT_NVISIT SQLITE_SCANSTAT_PARENTID SQLITE_SCANSTAT_SELECTID {scanstatus options} -->
+<div class=nosearch>
+<a href="../c3ref/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
+#define SQLITE_SCANSTAT_PARENTID 6
+#define SQLITE_SCANSTAT_NCYCLE 7
+</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>Not all values are available for all query elements. When a value is
+not available, the output variable is set to -1 if the value is numeric,
+or to NULL if it is a string (SQLITE_SCANSTAT_NAME).</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_SELECTID</dt>
+<dd>The "int" variable pointed to by the V parameter will be set to the
+id for the X-th query plan element. The id value is unique within the
+statement. 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.</p>
+
+<p><a name="sqlitescanstatparentid"></a>
+ <dt>SQLITE_SCANSTAT_PARENTID</dt>
+<dd>The "int" variable pointed to by the V parameter will be set to the
+the id of the parent of the current query element, if applicable, or
+to zero if the query element has no parent. This is the same value as
+returned in the second column of an <a href="../eqp.html">EXPLAIN QUERY PLAN</a> query.</p>
+
+<p><a name="sqlitescanstatncycle"></a>
+ <dt>SQLITE_SCANSTAT_NCYCLE</dt>
+<dd>The sqlite3_int64 output value is set to the number of cycles,
+according to the processor time-stamp counter, that elapsed while the
+query element was being processed. This value is not available for
+all query elements - if it is unavailable the output variable is
+set to -1.
+</dl>
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b95e6fa
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c7ba40c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8c6c78b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..91a5a78
--- /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="../c3ref/intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Compile-Time Library Version Numbers</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_VERSION "3.45.1"
+#define SQLITE_VERSION_NUMBER 3045001
+#define SQLITE_SOURCE_ID "2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a"
+</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d7e2005
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..065c2fd
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..1f0ebe4
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e5449c3
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0c5cb03
--- /dev/null
+++ b/www/c3ref/c_testctrl_always.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>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_FK_NO_ACTION SQLITE_TESTCTRL_IMPOSTER SQLITE_TESTCTRL_INTERNAL_FUNCTIONS SQLITE_TESTCTRL_ISINIT SQLITE_TESTCTRL_ISKEYWORD SQLITE_TESTCTRL_JSON_SELFCHECK 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_USELONGDOUBLE SQLITE_TESTCTRL_VDBE_COVERAGE -->
+<div class=nosearch>
+<a href="../c3ref/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_FK_NO_ACTION 7
+#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_JSON_SELFCHECK 14
+#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_USELONGDOUBLE 34
+#define SQLITE_TESTCTRL_LAST 34 /* 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..39b38c1
--- /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="../c3ref/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 approximately
+the number of nanoseconds 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..6243e82
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..2dd68ee
--- /dev/null
+++ b/www/c3ref/c_vtab_constraint_support.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>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 SQLITE_VTAB_USES_ALL_SCHEMAS {virtual table configuration option} {virtual table configuration options} -->
+<div class=nosearch>
+<a href="../c3ref/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
+#define SQLITE_VTAB_USES_ALL_SCHEMAS 4
+</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> implementation
+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> implementation
+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></p>
+
+<p><a name="sqlitevtabusesallschemas"></a>
+<dt>SQLITE_VTAB_USES_ALL_SCHEMAS</dt>
+<dd>Calls of the form
+<a href="../c3ref/vtab_config.html">sqlite3_vtab_config</a>(db,SQLITE_VTAB_USES_ALL_SCHEMA) 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> implementation
+instruct the query planner to begin at least a read transaction on
+all schemas ("main", "temp", and any ATTACH-ed databases) whenever the
+virtual table is used.
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c2f2323
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c31d3f5
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/changes.html b/www/c3ref/changes.html
new file mode 100644
index 0000000..60cd93d
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..bcbcc53
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/close.html b/www/c3ref/close.html
new file mode 100644
index 0000000..dfd1068
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0edbda6
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..baf038f
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..08b4581
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d7c52e5
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..1297fe7
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..02bb472
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..cb8b0d7
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b1609ab
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/complete.html b/www/c3ref/complete.html
new file mode 100644
index 0000000..d99f322
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/config.html b/www/c3ref/config.html
new file mode 100644
index 0000000..a6cb5a7
--- /dev/null
+++ b/www/c3ref/config.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>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="../c3ref/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 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>For most configuration options, 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>.
+The exceptional configuration options that may be invoked at any time
+are called "anytime configuration options".
+If sqlite3_config() is called after <a href="../c3ref/initialize.html">sqlite3_initialize()</a> and before
+<a href="../c3ref/initialize.html">sqlite3_shutdown()</a> with a first argument that is not an anytime
+configuration option, then the sqlite3_config() call 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>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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/constlist.html b/www/c3ref/constlist.html
new file mode 100644
index 0000000..cdf31b8
--- /dev/null
+++ b/www/c3ref/constlist.html
@@ -0,0 +1,591 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="../c3ref/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#sqlitedbconfigreversescanorder'>SQLITE_DBCONFIG_REVERSE_SCANORDER</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus'>SQLITE_DBCONFIG_STMT_SCANSTATUS</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='../c3ref/c_abort_rollback.html'>SQLITE_IOERR_IN_PAGE</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='../c3ref/c_abort_rollback.html'>SQLITE_NOTICE_RBU</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_deterministic.html#sqliteresultsubtype'>SQLITE_RESULT_SUBTYPE</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_complex.html'>SQLITE_SCANSTAT_COMPLEX</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#sqlitescanstatncycle'>SQLITE_SCANSTAT_NCYCLE</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#sqlitescanstatparentid'>SQLITE_SCANSTAT_PARENTID</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_FK_NO_ACTION</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_JSON_SELFCHECK</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_USELONGDOUBLE</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='../c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas'>SQLITE_VTAB_USES_ALL_SCHEMAS</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="../c3ref/objlist.html">Objects</a> and
+<a href="../c3ref/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..6c1ee76
--- /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="../c3ref/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 using this object:
+<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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e826e09
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..bfe8ed9
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c49f9de
--- /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="../c3ref/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 interfaces 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..6c2e34a
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e2c94c5
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..ad69ac0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..59af7ae
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..3fb0fca
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c042cfb
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..f72600a
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..00c2bc0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..f3e0197
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..52bdfbf
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..71477c8
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..1631dc2
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..a87f599
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..ecbede6
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..ee353c0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/deserialize.html b/www/c3ref/deserialize.html
new file mode 100644
index 0000000..6e3afdc
--- /dev/null
+++ b/www/c3ref/deserialize.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>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="../c3ref/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>Applications must not modify the buffer P or invalidate it before
+the database connection D is closed.</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>The deserialized database should not be in <a href="../wal.html">WAL mode</a>. If the database
+is in WAL mode, then any attempt to use the database file will result
+in an <a href="../rescode.html#cantopen">SQLITE_CANTOPEN</a> error. The application can set the
+<a href="../fileformat2.html#vnums">file format version numbers</a> (bytes 18 and 19) of the input database P
+to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the
+database file into rollback mode and work around this limitation.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..9d2b86b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..a6da44b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..5de3215
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/errcode.html b/www/c3ref/errcode.html
new file mode 100644
index 0000000..cfdfdce
--- /dev/null
+++ b/www/c3ref/errcode.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>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="../c3ref/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,
+or NULL if no error message is available.
+(See how SQLite handles <a href="../invalidutf.html">invalid UTF</a> for exceptions to this rule.)
+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(E) interface returns the English-language text
+that describes the <a href="../rescode.html">result code</a> E, as UTF-8, or NULL if E is not an
+result code for which a text error message is available.
+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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/exec.html b/www/c3ref/exec.html
new file mode 100644
index 0000000..f892dab
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..81e23c8
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/experimental.html b/www/c3ref/experimental.html
new file mode 100644
index 0000000..329dcb6
--- /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="../c3ref/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..a895fc5
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/file.html b/www/c3ref/file.html
new file mode 100644
index 0000000..a4a4011
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..a7e4d12
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/filename.html b/www/c3ref/filename.html
new file mode 100644
index 0000000..dfb98ce
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8e49c7b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/finalize.html b/www/c3ref/finalize.html
new file mode 100644
index 0000000..14fce8b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/free.html b/www/c3ref/free.html
new file mode 100644
index 0000000..7d4e147
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0ffa589
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/funclist.html b/www/c3ref/funclist.html
new file mode 100644
index 0000000..eedbe37
--- /dev/null
+++ b/www/c3ref/funclist.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>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="../c3ref/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: 290 -->
+<!-- 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/get_clientdata.html'>sqlite3_get_clientdata</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/interrupt.html'>sqlite3_is_interrupted</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/get_clientdata.html'>sqlite3_set_clientdata</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_explain.html'>sqlite3_stmt_explain</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_scanstatus.html'>sqlite3_stmt_scanstatus_v2</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_encoding.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="../c3ref/constlist.html">Constants</a> and
+<a href="../c3ref/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..c734183
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..57bb1e9
--- /dev/null
+++ b/www/c3ref/get_auxdata.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>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="../c3ref/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 auxiliary data with argument values. If the same argument
+value is passed to multiple invocations of the same SQL function during
+query execution, under some circumstances the associated auxiliary data
+might 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 auxiliary data 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 auxiliary data
+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 auxiliary data
+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 auxiliary data 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 auxiliary data is still valid or
+NULL if the auxiliary data 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 auxiliary data is discarded.
+SQLite is free to discard the auxiliary data 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.
+<li> during the original sqlite3_set_auxdata() call if the function
+is evaluated during query planning instead of during query execution,
+as sometimes happens with <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>. </ul></p>
+
+<p>Note the last two bullets 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. Furthermore, a call to
+sqlite3_get_auxdata() that occurs immediately after a corresponding call
+to sqlite3_set_auxdata() might still return NULL if an out-of-memory
+condition occurred during the sqlite3_set_auxdata() call or if the
+function is being evaluated during query planning rather than during
+query execution.</p>
+
+<p>In practice, auxiliary data 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: <a href="../c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="../c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/get_clientdata.html b/www/c3ref/get_clientdata.html
new file mode 100644
index 0000000..9179dd1
--- /dev/null
+++ b/www/c3ref/get_clientdata.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>Database Connection Client 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_clientdata sqlite3_set_clientdata -->
+<div class=nosearch>
+<a href="../c3ref/intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database Connection Client Data</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_get_clientdata(sqlite3*,const char*);
+int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*));
+</pre></blockquote>
+<p>
+These functions are used to associate one or more named pointers
+with a <a href="../c3ref/sqlite3.html">database connection</a>.
+A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P
+to be attached to <a href="../c3ref/sqlite3.html">database connection</a> D using name N. Subsequent
+calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P
+or a NULL pointer if there were no prior calls to
+sqlite3_set_clientdata() with the same values of D and N.
+Names are compared using strcmp() and are thus case sensitive.</p>
+
+<p>If P and X are both non-NULL, then the destructor X is invoked with
+argument P on the first of the following occurrences:
+<ul>
+<li> An out-of-memory error occurs during the call to
+sqlite3_set_clientdata() which attempts to register pointer P.
+<li> A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made
+with the same D and N parameters.
+<li> The database connection closes. SQLite does not make any guarantees
+about the order in which destructors are called, only that all
+destructors will be called exactly once at some point during the
+database connection closing process.
+</ul></p>
+
+<p>SQLite does not do anything with client data other than invoke
+destructors on the client data at the appropriate time. The intended
+use for client data is to provide a mechanism for wrapper libraries
+to store additional information about an SQLite database connection.</p>
+
+<p>There is no limit (other than available memory) on the number of different
+client data pointers (with different names) that can be attached to a
+single database connection. However, the implementation is optimized
+for the case of having only one or two different client data names.
+Applications and wrapper libraries are discouraged from using more than
+one client data name each.</p>
+
+<p>There is no way to enumerate the client data pointers
+associated with a database connection. The N parameter can be thought
+of as a secret key such that only code that knows the secret key is able
+to access the associated data.</p>
+
+<p>Security Warning: These interfaces should not be exposed in scripting
+languages or in other circumstances where it might be possible for an
+an attacker to invoke them. Any agent that can invoke these interfaces
+can probably also take control of the process.</p>
+
+<p>Database connection client data is only available for SQLite
+version 3.44.0 (2023-11-01) and later.</p>
+
+<p>See also: <a href="../c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> and <a href="../c3ref/get_auxdata.html">sqlite3_get_auxdata()</a>.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..9010c3b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..43ea9b5
--- /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="../c3ref/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 idxStr 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 idxStr if and only if
+needToFreeIdxStr 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 using this object:
+ <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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/initialize.html b/www/c3ref/initialize.html
new file mode 100644
index 0000000..38c2e2a
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/int64.html b/www/c3ref/int64.html
new file mode 100644
index 0000000..a21d18f
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/interrupt.html b/www/c3ref/interrupt.html
new file mode 100644
index 0000000..1a75665
--- /dev/null
+++ b/www/c3ref/interrupt.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>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 sqlite3_is_interrupted -->
+<div class=nosearch>
+<a href="../c3ref/intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Interrupt A Long-Running Query</h2>
+</div>
+<blockquote><pre>
+void sqlite3_interrupt(sqlite3*);
+int sqlite3_is_interrupted(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>The <a href="../c3ref/interrupt.html">sqlite3_is_interrupted(D)</a> interface can be used to determine whether
+or not an interrupt is currently in effect for <a href="../c3ref/sqlite3.html">database connection</a> D.
+It returns 1 if an interrupt is currently in effect, or 0 otherwise.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/intro.html b/www/c3ref/intro.html
new file mode 100644
index 0000000..1b42024
--- /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="../c3ref/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="../c3ref/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="../c3ref/funclist.html"><b>List Of Functions.</b></a>
+ This is a list of all functions and methods operating on the
+ <a href="../c3ref/objlist.html">objects</a> and using and/or
+ returning <a href="../c3ref/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..67ddcd0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0492f5f
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0b165a4
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/libversion.html b/www/c3ref/libversion.html
new file mode 100644
index 0000000..161f182
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/limit.html b/www/c3ref/limit.html
new file mode 100644
index 0000000..a4c4cee
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..182f142
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/log.html b/www/c3ref/log.html
new file mode 100644
index 0000000..1b1f5e8
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..35a76fa
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8682c61
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/module.html b/www/c3ref/module.html
new file mode 100644
index 0000000..824df85
--- /dev/null
+++ b/www/c3ref/module.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>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="../c3ref/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*);
+ /* The methods above are in versions 1 through 3 of the sqlite_module object.
+ ** Those below are for version 4 and greater. */
+ int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema,
+ const char *zTabName, int mFlags, char **pzErr);
+};
+</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mprintf.html b/www/c3ref/mprintf.html
new file mode 100644
index 0000000..002eadd
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mutex.html b/www/c3ref/mutex.html
new file mode 100644
index 0000000..32431f6
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..f32efce
--- /dev/null
+++ b/www/c3ref/mutex_alloc.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="../c3ref/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. In most cases the SQLite core only uses
+sqlite3_mutex_try() as an optimization, so this is acceptable
+behavior. The exceptions are unix builds that set the
+SQLITE_ENABLE_SETLK_TIMEOUT build option. In that case a working
+sqlite3_mutex_try() is required.</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(),
+sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer,
+then any of the four routines behaves as a no-op.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b9236e2
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..2d47826
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..aeeff4b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/objlist.html b/www/c3ref/objlist.html
new file mode 100644
index 0000000..083cdc2
--- /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="../c3ref/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="../c3ref/constlist.html">Constants</a> and
+<a href="../c3ref/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..c9319ac
--- /dev/null
+++ b/www/c3ref/open.html
@@ -0,0 +1,422 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="../c3ref/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. For historical reasons, if opening in
+read-write mode fails due to OS-level permissions, an attempt is
+made to open it in read-only mode. <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> can be
+used to determine whether the database is actually
+read-write.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..06ce0f7
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/pcache.html b/www/c3ref/pcache.html
new file mode 100644
index 0000000..63447e6
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d4d7b98
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..7505427
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/prepare.html b/www/c3ref/prepare.html
new file mode 100644
index 0000000..2909fe3
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..454f521
--- /dev/null
+++ b/www/c3ref/preupdate_blobwrite.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>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="../c3ref/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 sqlite3_preupdate_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>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 actually 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/profile.html b/www/c3ref/profile.html
new file mode 100644
index 0000000..e92fc14
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..4c0233a
--- /dev/null
+++ b/www/c3ref/progress_handler.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>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="../c3ref/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/step.html">sqlite3_step()</a> and <a href="../c3ref/prepare.html">sqlite3_prepare()</a> and similar 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>The progress handler callback would originally only be invoked from the
+bytecode engine. It still might be invoked during <a href="../c3ref/prepare.html">sqlite3_prepare()</a>
+and similar because those routines might force a reparse of the schema
+which involves running the bytecode engine. However, beginning with
+SQLite version 3.41.0, the progress handler callback might also be
+invoked directly from <a href="../c3ref/prepare.html">sqlite3_prepare()</a> while analyzing and generating
+code for complex queries.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/randomness.html b/www/c3ref/randomness.html
new file mode 100644
index 0000000..b76775b
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..17eb271
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/reset.html b/www/c3ref/reset.html
new file mode 100644
index 0000000..5ab5c75
--- /dev/null
+++ b/www/c3ref/reset.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>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="../c3ref/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>The return code from <a href="../c3ref/reset.html">sqlite3_reset(S)</a> indicates whether or not
+the previous evaluation of prepared statement S completed successfully.
+If <a href="../c3ref/step.html">sqlite3_step(S)</a> has never before been called on S or if
+<a href="../c3ref/step.html">sqlite3_step(S)</a> has not been called since the previous call
+to <a href="../c3ref/reset.html">sqlite3_reset(S)</a>, then <a href="../c3ref/reset.html">sqlite3_reset(S)</a> will return
+<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>.
+The <a href="../c3ref/reset.html">sqlite3_reset(S)</a> interface might also return an <a href="../rescode.html">error code</a>
+if there were no prior errors but the process of resetting
+the prepared statement caused a new error. For example, if an
+<a href="../lang_insert.html">INSERT</a> statement with a <a href="../lang_returning.html">RETURNING</a> clause is only stepped one time,
+that one call to <a href="../c3ref/step.html">sqlite3_step(S)</a> might return SQLITE_ROW but
+the overall statement might still fail and the <a href="../c3ref/reset.html">sqlite3_reset(S)</a> call
+might return SQLITE_BUSY if locking constraints prevent the
+database change from committing. Therefore, it is important that
+applications check the return code from <a href="../c3ref/reset.html">sqlite3_reset(S)</a> even if
+no prior call to <a href="../c3ref/step.html">sqlite3_step(S)</a> indicated a problem.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..2dc41b7
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..4afe935
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b0dd7e0
--- /dev/null
+++ b/www/c3ref/result_subtype.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>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="../c3ref/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>Every <a href="../appfunc.html">application-defined SQL function</a> that invokes this interface
+should include the <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property in its
+text encoding argument when the SQL function is
+<a href="../c3ref/create_function.html">registered</a>. If the <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
+property is omitted from the function that invokes sqlite3_result_subtype(),
+then in some cases the sqlite3_result_subtype() might fail to set
+the result subtype.</p>
+
+<p>If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any
+SQL function that invokes the sqlite3_result_subtype() interface
+and that does not have the SQLITE_RESULT_SUBTYPE property will raise
+an error. Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1
+by default.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/serialize.html b/www/c3ref/serialize.html
new file mode 100644
index 0000000..6d3fa70
--- /dev/null
+++ b/www/c3ref/serialize.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>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="../c3ref/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>After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set,
+the returned buffer content will remain accessible and unchanged
+until either the next write operation on the connection or when
+the connection is closed, and applications must not modify the
+buffer. If the bit had been clear, the returned buffer will not
+be accessed by SQLite after the call.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..67b58ba
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..a926d82
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/sleep.html b/www/c3ref/sleep.html
new file mode 100644
index 0000000..4cb7d05
--- /dev/null
+++ b/www/c3ref/sleep.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>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="../c3ref/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>If a negative argument is passed to sqlite3_sleep() the results vary by
+VFS and operating system. Some system treat a negative argument as an
+instruction to sleep forever. Others understand it to mean do not sleep
+at all. In SQLite version 3.42.0 and later, a negative
+argument passed into sqlite3_sleep() is changed to zero before it is relayed
+down into the xSleep method of the VFS.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot.html b/www/c3ref/snapshot.html
new file mode 100644
index 0000000..4a99b00
--- /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="../c3ref/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 using this object: <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a></p>
+<p>1 Destructor using this object: <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a></p>
+<p>3 Methods using this object:
+ <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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..63b8b84
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..2671324
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..35b73c0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..9345cd8
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..48cfa14
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..3e3b06c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/sqlite3.html b/www/c3ref/sqlite3.html
new file mode 100644
index 0000000..b8d2725
--- /dev/null
+++ b/www/c3ref/sqlite3.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>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="../c3ref/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 using this object:
+ <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 using this object:
+ <a href="../c3ref/close.html">sqlite3_close()</a>,
+<a href="../c3ref/close.html">sqlite3_close_v2()</a></p>
+<p>79 Methods using this object:
+<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/get_clientdata.html'>sqlite3_get_clientdata</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/interrupt.html'>sqlite3_is_interrupted</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/get_clientdata.html'>sqlite3_set_clientdata</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/status.html b/www/c3ref/status.html
new file mode 100644
index 0000000..503f128
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/step.html b/www/c3ref/step.html
new file mode 100644
index 0000000..daef0d5
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt.html b/www/c3ref/stmt.html
new file mode 100644
index 0000000..b132f4f
--- /dev/null
+++ b/www/c3ref/stmt.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="../c3ref/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 using this object:
+<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 using this object: <a href="../c3ref/finalize.html">sqlite3_finalize()</a></p>
+<p>53 Methods using this object:
+<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_explain.html'>sqlite3_stmt_explain</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_scanstatus.html'>sqlite3_stmt_scanstatus_v2</a></li>
+<li><a href='../c3ref/stmt_status.html'>sqlite3_stmt_status</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..3e04a8a
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_explain.html b/www/c3ref/stmt_explain.html
new file mode 100644
index 0000000..1157eff
--- /dev/null
+++ b/www/c3ref/stmt_explain.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>Change 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_explain -->
+<div class=nosearch>
+<a href="../c3ref/intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Change The EXPLAIN Setting For A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN
+setting for <a href="../c3ref/stmt.html">prepared statement</a> S. If E is zero, then S becomes
+a normal prepared statement. If E is 1, then S behaves as if
+its SQL text began with "<a href="../lang_explain.html">EXPLAIN</a>". If E is 2, then S behaves as if
+its SQL text began with "<a href="../eqp.html">EXPLAIN QUERY PLAN</a>".</p>
+
+<p>Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared.
+SQLite tries to avoid a reprepare, but a reprepare might be necessary
+on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode.</p>
+
+<p>Because of the potential need to reprepare, a call to
+sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be
+reprepared because it was created using <a href="../c3ref/prepare.html">sqlite3_prepare()</a> instead of
+the newer <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> interfaces and
+hence has no saved SQL text with which to reprepare.</p>
+
+<p>Changing the explain setting for a prepared statement does not change
+the original SQL text for the statement. Hence, if the SQL text originally
+began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0)
+is called to convert the statement into an ordinary statement, the EXPLAIN
+or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S)
+output, even though the statement now acts like a normal SQL statement.</p>
+
+<p>This routine returns SQLITE_OK if the explain mode is successfully
+changed, or an error code if the explain mode could not be changed.
+The explain mode cannot be changed while a statement is active.
+Hence, it is good practice to call <a href="../c3ref/reset.html">sqlite3_reset(S)</a>
+immediately prior to calling sqlite3_stmt_explain(S,E).
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d41abd3
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e71979a
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..e5f3456
--- /dev/null
+++ b/www/c3ref/stmt_scanstatus.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>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 sqlite3_stmt_scanstatus_v2 -->
+<div class=nosearch>
+<a href="../c3ref/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 */
+);
+int sqlite3_stmt_scanstatus_v2(
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
+ int idx, /* Index of loop to report on */
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
+ int flags, /* Mask of flags defined below */
+ void *pOut /* Result written here */
+);
+</pre></blockquote>
+<p>
+These interfaces return 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.</p>
+
+<p>The "flags" parameter must be passed a mask of flags. At present only
+one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX
+is specified, then status information is available for all elements
+of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If
+SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements
+that correspond to query loops (the "SCAN..." and "SEARCH..." elements of
+the EXPLAIN QUERY PLAN output) are available. Invoking API
+sqlite3_stmt_scanstatus() is equivalent to calling
+sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter.</p>
+
+<p>Parameter "idx" identifies the specific query element to retrieve statistics
+for. Query elements are numbered starting from zero. A value of -1 may be
+to query for statistics regarding the entire query. 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.</p>
+
+<p>See also: <a href="../c3ref/stmt_scanstatus_reset.html">sqlite3_stmt_scanstatus_reset()</a>
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..4eb2802
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0c3cf8c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/str.html b/www/c3ref/str.html
new file mode 100644
index 0000000..0a00264
--- /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="../c3ref/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 using this object: <a href="../c3ref/str_new.html">sqlite3_str_new()</a></p>
+<p>1 Destructor using this object: <a href="../c3ref/str_finish.html">sqlite3_str_finish()</a></p>
+<p>9 Methods using this object:
+<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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c3b863c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d686821
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..28c6aba
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..50bfe24
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/strglob.html b/www/c3ref/strglob.html
new file mode 100644
index 0000000..563a116
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stricmp.html b/www/c3ref/stricmp.html
new file mode 100644
index 0000000..62134d1
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/strlike.html b/www/c3ref/strlike.html
new file mode 100644
index 0000000..e3d8887
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..561f9dc
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..927dc65
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8f73490
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..9f1fc5f
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/threadsafe.html b/www/c3ref/threadsafe.html
new file mode 100644
index 0000000..faa8c43
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..f1e2d92
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..a9bd9dc
--- /dev/null
+++ b/www/c3ref/trace_v2.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>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="../c3ref/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(D,X,P) or sqlite3_trace_v2(D,M,X,P)
+overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or
+sqlite3_trace_v2(D,M,X,P) for the <a href="../c3ref/sqlite3.html">database connection</a> D. Each
+database connection may have at most one trace callback.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..1919927
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..53694d1
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..88b8e81
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0412197
--- /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="../c3ref/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 implementation, 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..fbcfb63
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/value.html b/www/c3ref/value.html
new file mode 100644
index 0000000..7344677
--- /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="../c3ref/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 using this object:
+<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_encoding.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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..718af82
--- /dev/null
+++ b/www/c3ref/value_blob.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>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_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="../c3ref/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*);
+</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>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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8109168
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/value_encoding.html b/www/c3ref/value_encoding.html
new file mode 100644
index 0000000..9604e62
--- /dev/null
+++ b/www/c3ref/value_encoding.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>Report the internal text encoding state of an sqlite3_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: sqlite3_value_encoding -->
+<div class=nosearch>
+<a href="../c3ref/intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Report the internal text encoding state of an sqlite3_value object</h2>
+</div>
+<blockquote><pre>
+int sqlite3_value_encoding(sqlite3_value*);
+</pre></blockquote>
+<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 text 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
+<a href="../c3ref/value_blob.html">sqlite3_value_text(X)</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text16(X)</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text16be(X)</a>,
+<a href="../c3ref/value_blob.html">sqlite3_value_text16le(X)</a>, <a href="../c3ref/value_blob.html">sqlite3_value_bytes(X)</a>, or
+<a href="../c3ref/value_blob.html">sqlite3_value_bytes16(X)</a> might change the encoding of the value X and
+thus change the return from subsequent calls to sqlite3_value_encoding(X).</p>
+
+<p>This routine is intended for used by applications that test and validate
+the SQLite implementation. This routine is inquiring about the opaque
+internal state of an <a href="../c3ref/value.html">sqlite3_value</a> object. Ordinary applications should
+not need to know what the internal state of an sqlite3_value object is and
+hence should not need to use this interface.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..71d440a
--- /dev/null
+++ b/www/c3ref/value_subtype.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>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="../c3ref/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>Every <a href="../appfunc.html">application-defined SQL function</a> that invoke this interface
+should include the <a href="../c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a> property in the text
+encoding argument when the function is <a href="../c3ref/create_function.html">registered</a>.
+If the <a href="../c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a> property is omitted, then sqlite3_value_subtype()
+might return zero instead of the upstream subtype in some corner cases.
+</p><p>See also lists of
+ <a href="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vfs.html b/www/c3ref/vfs.html
new file mode 100644
index 0000000..05155d7
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..83500d5
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab.html b/www/c3ref/vtab.html
new file mode 100644
index 0000000..3b45a3d
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b55e5e0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..81d5d9c
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..5069042
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..16420a1
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..b1d71fa
--- /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="../c3ref/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 positive 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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..8775ceb
--- /dev/null
+++ b/www/c3ref/vtab_in_first.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>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="../c3ref/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) should 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#error">SQLITE_ERROR</a>.</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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0f42503
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..0340876
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..1546dc6
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..09cdcc0
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..24ae711
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..c21b140
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..44c3827
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/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..d49d056
--- /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="../c3ref/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="../c3ref/objlist.html">Objects</a>,
+ <a href="../c3ref/constlist.html">Constants</a>, and
+ <a href="../c3ref/funclist.html">Functions</a>.</p>
+
diff --git a/www/c_interface.html b/www/c_interface.html
new file mode 100644
index 0000000..91574ae
--- /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">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">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=774e1b2f56">2023-01-06 00:45:39</a> UTC </small></i></p>
+
diff --git a/www/capi3.html b/www/capi3.html
new file mode 100644
index 0000000..6e5ffdd
--- /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=2524a93030">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/capi3ref.html b/www/capi3ref.html
new file mode 100644
index 0000000..a7fce31
--- /dev/null
+++ b/www/capi3ref.html
@@ -0,0 +1,12072 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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">some smaller 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='#sqlitedbconfigreversescanorder'>SQLITE_DBCONFIG_REVERSE_SCANORDER</a></li>
+<li><a href='#sqlitedbconfigstmtscanstatus'>SQLITE_DBCONFIG_STMT_SCANSTATUS</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_IN_PAGE</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_RBU</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='#sqliteresultsubtype'>SQLITE_RESULT_SUBTYPE</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='#SQLITE_SCANSTAT_COMPLEX'>SQLITE_SCANSTAT_COMPLEX</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='#sqlitescanstatncycle'>SQLITE_SCANSTAT_NCYCLE</a></li>
+<li><a href='#sqlitescanstatnloop'>SQLITE_SCANSTAT_NLOOP</a></li>
+<li><a href='#sqlitescanstatnvisit'>SQLITE_SCANSTAT_NVISIT</a></li>
+<li><a href='#sqlitescanstatparentid'>SQLITE_SCANSTAT_PARENTID</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_FK_NO_ACTION</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_JSON_SELFCHECK</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_USELONGDOUBLE</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='#sqlitevtabusesallschemas'>SQLITE_VTAB_USES_ALL_SCHEMAS</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: 290 -->
+<!-- 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_get_clientdata'>sqlite3_get_clientdata</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_interrupt'>sqlite3_is_interrupted</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_get_clientdata'>sqlite3_set_clientdata</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_explain'>sqlite3_stmt_explain</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_scanstatus'>sqlite3_stmt_scanstatus_v2</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_encoding'>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 using this object:
+<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 idxStr 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 idxStr if and only if
+needToFreeIdxStr 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 using this object:
+ <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 canceled. 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 behavior. 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 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>For most configuration options, 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>.
+The exceptional configuration options that may be invoked at any time
+are called "anytime configuration options".
+If sqlite3_config() is called after <a href="#sqlite3_initialize">sqlite3_initialize()</a> and before
+<a href="#sqlite3_initialize">sqlite3_shutdown()</a> with a first argument that is not an anytime
+configuration option, then the sqlite3_config() call 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>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>Applications must not modify the buffer P or invalidate it before
+the database connection D is closed.</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>The deserialized database should not be in <a href="wal.html">WAL mode</a>. If the database
+is in WAL mode, then any attempt to use the database file will result
+in an <a href="#SQLITE_ABORT">SQLITE_CANTOPEN</a> error. The application can set the
+<a href="fileformat2.html#vnums">file format version numbers</a> (bytes 18 and 19) of the input database P
+to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the
+database file into rollback mode and work around this limitation.</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_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_step">sqlite3_step()</a> and <a href="#sqlite3_prepare">sqlite3_prepare()</a> and similar 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>The progress handler callback would originally only be invoked from the
+bytecode engine. It still might be invoked during <a href="#sqlite3_prepare">sqlite3_prepare()</a>
+and similar because those routines might force a reparse of the schema
+which involves running the bytecode engine. However, beginning with
+SQLite version 3.41.0, the progress handler callback might also be
+invoked directly from <a href="#sqlite3_prepare">sqlite3_prepare()</a> while analyzing and generating
+code for complex queries.
+</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>The return code from <a href="#sqlite3_reset">sqlite3_reset(S)</a> indicates whether or not
+the previous evaluation of prepared statement S completed successfully.
+If <a href="#sqlite3_step">sqlite3_step(S)</a> has never before been called on S or if
+<a href="#sqlite3_step">sqlite3_step(S)</a> has not been called since the previous call
+to <a href="#sqlite3_reset">sqlite3_reset(S)</a>, then <a href="#sqlite3_reset">sqlite3_reset(S)</a> will return
+<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>.
+The <a href="#sqlite3_reset">sqlite3_reset(S)</a> interface might also return an <a href="rescode.html">error code</a>
+if there were no prior errors but the process of resetting
+the prepared statement caused a new error. For example, if an
+<a href="lang_insert.html">INSERT</a> statement with a <a href="lang_returning.html">RETURNING</a> clause is only stepped one time,
+that one call to <a href="#sqlite3_step">sqlite3_step(S)</a> might return SQLITE_ROW but
+the overall statement might still fail and the <a href="#sqlite3_reset">sqlite3_reset(S)</a> call
+might return SQLITE_BUSY if locking constraints prevent the
+database change from committing. Therefore, it is important that
+applications check the return code from <a href="#sqlite3_reset">sqlite3_reset(S)</a> even if
+no prior call to <a href="#sqlite3_step">sqlite3_step(S)</a> indicated a problem.</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>
+
+<p>Every <a href="appfunc.html">application-defined SQL function</a> that invokes this interface
+should include the <a href="#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property in its
+text encoding argument when the SQL function is
+<a href="#sqlite3_create_function">registered</a>. If the <a href="#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
+property is omitted from the function that invokes sqlite3_result_subtype(),
+then in some cases the sqlite3_result_subtype() might fail to set
+the result subtype.</p>
+
+<p>If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any
+SQL function that invokes the sqlite3_result_subtype() interface
+and that does not have the SQLITE_RESULT_SUBTYPE property will raise
+an error. Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1
+by default.
+</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>After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set,
+the returned buffer content will remain accessible and unchanged
+until either the next write operation on the connection or when
+the connection is closed, and applications must not modify the
+buffer. If the bit had been clear, the returned buffer will not
+be accessed by SQLite after the call.</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>
+
+<p>If a negative argument is passed to sqlite3_sleep() the results vary by
+VFS and operating system. Some system treat a negative argument as an
+instruction to sleep forever. Others understand it to mean do not sleep
+at all. In SQLite version 3.42.0 and later, a negative
+argument passed into sqlite3_sleep() is changed to zero before it is relayed
+down into the xSleep method of the VFS.
+</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_explain"></a>
+<h2>Change The EXPLAIN Setting For A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN
+setting for <a href="#sqlite3_stmt">prepared statement</a> S. If E is zero, then S becomes
+a normal prepared statement. If E is 1, then S behaves as if
+its SQL text began with "<a href="lang_explain.html">EXPLAIN</a>". If E is 2, then S behaves as if
+its SQL text began with "<a href="eqp.html">EXPLAIN QUERY PLAN</a>".</p>
+
+<p>Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared.
+SQLite tries to avoid a reprepare, but a reprepare might be necessary
+on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode.</p>
+
+<p>Because of the potential need to reprepare, a call to
+sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be
+reprepared because it was created using <a href="#sqlite3_prepare">sqlite3_prepare()</a> instead of
+the newer <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> or <a href="#sqlite3_prepare">sqlite3_prepare_v3()</a> interfaces and
+hence has no saved SQL text with which to reprepare.</p>
+
+<p>Changing the explain setting for a prepared statement does not change
+the original SQL text for the statement. Hence, if the SQL text originally
+began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0)
+is called to convert the statement into an ordinary statement, the EXPLAIN
+or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S)
+output, even though the statement now acts like a normal SQL statement.</p>
+
+<p>This routine returns SQLITE_OK if the explain mode is successfully
+changed, or an error code if the explain mode could not be changed.
+The explain mode cannot be changed while a statement is active.
+Hence, it is good practice to call <a href="#sqlite3_reset">sqlite3_reset(S)</a>
+immediately prior to calling sqlite3_stmt_explain(S,E).
+</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_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(D,X,P) or sqlite3_trace_v2(D,M,X,P)
+overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or
+sqlite3_trace_v2(D,M,X,P) for the <a href="#sqlite3">database connection</a> D. Each
+database connection may have at most one trace callback.</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_encoding"></a>
+<h2>Report the internal text encoding state of an sqlite3_value object</h2>
+</div>
+<blockquote><pre>
+int sqlite3_value_encoding(sqlite3_value*);
+</pre></blockquote>
+<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 text 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
+<a href="#sqlite3_value_blob">sqlite3_value_text(X)</a>, <a href="#sqlite3_value_blob">sqlite3_value_text16(X)</a>, <a href="#sqlite3_value_blob">sqlite3_value_text16be(X)</a>,
+<a href="#sqlite3_value_blob">sqlite3_value_text16le(X)</a>, <a href="#sqlite3_value_blob">sqlite3_value_bytes(X)</a>, or
+<a href="#sqlite3_value_blob">sqlite3_value_bytes16(X)</a> might change the encoding of the value X and
+thus change the return from subsequent calls to sqlite3_value_encoding(X).</p>
+
+<p>This routine is intended for used by applications that test and validate
+the SQLite implementation. This routine is inquiring about the opaque
+internal state of an <a href="#sqlite3_value">sqlite3_value</a> object. Ordinary applications should
+not need to know what the internal state of an sqlite3_value object is and
+hence should not need to use this interface.
+</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>
+
+<p>Every <a href="appfunc.html">application-defined SQL function</a> that invoke this interface
+should include the <a href="#sqlitesubtype">SQLITE_SUBTYPE</a> property in the text
+encoding argument when the function is <a href="#sqlite3_create_function">registered</a>.
+If the <a href="#sqlitesubtype">SQLITE_SUBTYPE</a> property is omitted, then sqlite3_value_subtype()
+might return zero instead of the upstream subtype in some corner cases.
+</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 positive 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_IOERR_IN_PAGE (SQLITE_IOERR | (34&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_NOTICE_RBU (SQLITE_NOTICE | (3&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>Most of the configuration options for sqlite3_config()
+will only work if invoked prior to <a href="#sqlite3_initialize">sqlite3_initialize()</a> or after
+<a href="#sqlite3_initialize">sqlite3_shutdown()</a>. The few exceptions to this rule are called
+"anytime configuration options".
+Calling <a href="#sqlite3_config">sqlite3_config()</a> with a first argument that is not an
+anytime configuration option in between calls to <a href="#sqlite3_initialize">sqlite3_initialize()</a> and
+<a href="#sqlite3_initialize">sqlite3_shutdown()</a> is a no-op that returns SQLITE_MISUSE.</p>
+
+<p>The set of anytime configuration options can change (by insertions
+and/or deletions) from one release of SQLite to the next.
+As of SQLite version 3.42.0, the complete set of anytime configuration
+options is:
+<ul>
+<li> SQLITE_CONFIG_LOG
+<li> SQLITE_CONFIG_PCACHE_HDRSZ
+</ul></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 behavior.
+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_STMT_SCANSTATUS 1018 /* int int* */
+#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1019 /* 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="#sqlitedbstatuslookasideused">SQLITE_DBSTATUS_LOOKASIDE_USED</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 behavior. 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. Because this
+feature must be capable of resetting corrupt databases, and
+shutting down virtual tables may require access to that corrupt
+storage, the library must abandon any installed virtual tables
+without calling their xDestroy() methods.</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</dt>
+<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</dt>
+<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</dt>
+<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</dt>
+<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 generate 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 descending indexes.
+</dd></p>
+
+<p><a name="sqlitedbconfigstmtscanstatus"></a>
+
+<dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt>
+<dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in
+SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears
+a flag that enables collection of the sqlite3_stmt_scanstatus_v2()
+statistics. For statistics to be collected, the flag must be set on
+the database handle both when the SQL statement is prepared and when it
+is stepped. The flag is set (collection of statistics is enabled)
+by default. This option takes two arguments: an integer and a pointer to
+an integer.. The first argument is 1, 0, or -1 to enable, disable, or
+leave unchanged the statement scanstatus option. If the second argument
+is not NULL, then the value of the statement scanstatus setting after
+processing the first argument is written into the integer that the second
+argument points to.
+</dd></p>
+
+<p><a name="sqlitedbconfigreversescanorder"></a>
+
+<dt>SQLITE_DBCONFIG_REVERSE_SCANORDER</dt>
+<dd>The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order
+in which tables and indexes are scanned so that the scans start at the end
+and work toward the beginning rather than starting at the beginning and
+working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the
+same as setting <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a>. This option takes
+two arguments which are an integer and a pointer to an integer. The first
+argument is 1, 0, or -1 to enable, disable, or leave unchanged the
+reverse scan order flag, respectively. If the second argument is not NULL,
+then 0 or 1 is written into the integer that the second argument points to
+depending on if the reverse scan order flag is set after processing the
+first argument.
+</dd></p>
+
+<p></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
+#define SQLITE_RESULT_SUBTYPE 0x001000000
+</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>.
+<p>
+The SQLITE_DIRECTONLY flag is recommended for any
+<a href="appfunc.html">application-defined SQL function</a>
+that has side-effects or that could potentially leak sensitive information.
+This will prevent attacks in which an application is tricked
+into using a database file that has had its schema surreptitiously
+modified to invoke the application-defined function in ways that are
+harmful.
+<p>
+Some people say it is good practice to set SQLITE_DIRECTONLY on all
+<a href="appfunc.html">application-defined SQL functions</a>, regardless of whether or not they
+are security sensitive, as doing so prevents those functions from being used
+inside of the database schema, and thus ensures that the database
+can be inspected and modified using generic tools (such as the <a href="cli.html">CLI</a>)
+that do not have access to the application-defined functions.
+</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 might call
+<a href="#sqlite3_value_subtype">sqlite3_value_subtype()</a> to inspect the sub-types of its arguments.
+This flag instructs SQLite to omit some corner-case optimizations that
+might disrupt the operation of the <a href="#sqlite3_value_subtype">sqlite3_value_subtype()</a> function,
+causing it to return zero rather than the correct subtype().
+SQL functions that invokes <a href="#sqlite3_value_subtype">sqlite3_value_subtype()</a> should have this
+property. If the SQLITE_SUBTYPE property is omitted, then the return
+value from <a href="#sqlite3_value_subtype">sqlite3_value_subtype()</a> might sometimes be zero even though
+a non-zero subtype was specified by the function argument expression.</p>
+
+<p><a name="sqliteresultsubtype"></a>
+ <dt>SQLITE_RESULT_SUBTYPE</dt><dd>
+The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call
+<a href="#sqlite3_result_subtype">sqlite3_result_subtype()</a> to cause a sub-type to be associated with its
+result.
+Every function that invokes <a href="#sqlite3_result_subtype">sqlite3_result_subtype()</a> should have this
+property. If it does not, then the call to <a href="#sqlite3_result_subtype">sqlite3_result_subtype()</a>
+might become a no-op if the function is used as term in an
+<a href="expridx.html">expression index</a>. On the other hand, SQL functions that never invoke
+<a href="#sqlite3_result_subtype">sqlite3_result_subtype()</a> should avoid setting this property, as the
+purpose of this property is to disable certain optimizations that are
+incompatible with subtypes.
+</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.</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.</p>
+
+<p><li><a name="sqlitefcntlcksmfile"></a>
+
+The <a href="#sqlitefcntlcksmfile">SQLITE_FCNTL_CKSM_FILE</a> opcode is for use internally by the
+<a href="cksumvfs.html">checksum VFS shim</a> 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 the <a href="#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> 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, this opcode 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 not 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_COMPLEX"></a>
+<h2>Prepared Statement Scan Status</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SCANSTAT_COMPLEX 0x0001
+</pre></blockquote>
+<p></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
+#define SQLITE_SCANSTAT_PARENTID 6
+#define SQLITE_SCANSTAT_NCYCLE 7
+</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>Not all values are available for all query elements. When a value is
+not available, the output variable is set to -1 if the value is numeric,
+or to NULL if it is a string (SQLITE_SCANSTAT_NAME).</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_SELECTID</dt>
+<dd>The "int" variable pointed to by the V parameter will be set to the
+id for the X-th query plan element. The id value is unique within the
+statement. 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.</p>
+
+<p><a name="sqlitescanstatparentid"></a>
+ <dt>SQLITE_SCANSTAT_PARENTID</dt>
+<dd>The "int" variable pointed to by the V parameter will be set to the
+the id of the parent of the current query element, if applicable, or
+to zero if the query element has no parent. This is the same value as
+returned in the second column of an <a href="eqp.html">EXPLAIN QUERY PLAN</a> query.</p>
+
+<p><a name="sqlitescanstatncycle"></a>
+ <dt>SQLITE_SCANSTAT_NCYCLE</dt>
+<dd>The sqlite3_int64 output value is set to the number of cycles,
+according to the processor time-stamp counter, that elapsed while the
+query element was being processed. This value is not available for
+all query elements - if it is unavailable the output variable is
+set to -1.
+</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.45.1"
+#define SQLITE_VERSION_NUMBER 3045001
+#define SQLITE_SOURCE_ID "2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a"
+</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_FK_NO_ACTION 7
+#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_JSON_SELFCHECK 14
+#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_USELONGDOUBLE 34
+#define SQLITE_TESTCTRL_LAST 34 /* 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 approximately
+the number of nanoseconds 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
+#define SQLITE_VTAB_USES_ALL_SCHEMAS 4
+</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> implementation
+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> implementation
+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></p>
+
+<p><a name="sqlitevtabusesallschemas"></a>
+<dt>SQLITE_VTAB_USES_ALL_SCHEMAS</dt>
+<dd>Calls of the form
+<a href="#sqlite3_vtab_config">sqlite3_vtab_config</a>(db,SQLITE_VTAB_USES_ALL_SCHEMA) 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> implementation
+instruct the query planner to begin at least a read transaction on
+all schemas ("main", "temp", and any ATTACH-ed databases) whenever the
+virtual table is used.
+</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 using this object: <a href="#sqlite3_snapshot_get">sqlite3_snapshot_get()</a></p>
+<p>1 Destructor using this object: <a href="#sqlite3_snapshot_free">sqlite3_snapshot_free()</a></p>
+<p>3 Methods using this object:
+ <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*);
+ /* The methods above are in versions 1 through 3 of the sqlite_module object.
+ ** Those below are for version 4 and greater. */
+ int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema,
+ const char *zTabName, int mFlags, char **pzErr);
+};
+</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 using this object: <a href="#sqlite3_blob_open">sqlite3_blob_open()</a></p>
+<p>1 Destructor using this object: <a href="#sqlite3_blob_close">sqlite3_blob_close()</a></p>
+<p>4 Methods using this object:
+ <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 using this object:
+ <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 using this object:
+ <a href="#sqlite3_close">sqlite3_close()</a>,
+<a href="#sqlite3_close">sqlite3_close_v2()</a></p>
+<p>79 Methods using this object:
+<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_get_clientdata'>sqlite3_get_clientdata</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_interrupt'>sqlite3_is_interrupted</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_get_clientdata'>sqlite3_set_clientdata</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 using this object: <a href="#sqlite3_str_new">sqlite3_str_new()</a></p>
+<p>1 Destructor using this object: <a href="#sqlite3_str_finish">sqlite3_str_finish()</a></p>
+<p>9 Methods using this object:
+<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 using this object:
+<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 using this object: <a href="#sqlite3_finalize">sqlite3_finalize()</a></p>
+<p>53 Methods using this object:
+<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_explain'>sqlite3_stmt_explain</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_scanstatus'>sqlite3_stmt_scanstatus_v2</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 using this object:
+<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_encoding'>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 interfaces 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,
+or NULL if no error message is available.
+(See how SQLite handles <a href="invalidutf.html">invalid UTF</a> for exceptions to this rule.)
+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(E) interface returns the English-language text
+that describes the <a href="rescode.html">result code</a> E, as UTF-8, or NULL if E is not an
+result code for which a text error message is available.
+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 auxiliary data with argument values. If the same argument
+value is passed to multiple invocations of the same SQL function during
+query execution, under some circumstances the associated auxiliary data
+might 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 auxiliary data 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 auxiliary data
+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 auxiliary data
+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 auxiliary data 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 auxiliary data is still valid or
+NULL if the auxiliary data 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 auxiliary data is discarded.
+SQLite is free to discard the auxiliary data 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.
+<li> during the original sqlite3_set_auxdata() call if the function
+is evaluated during query planning instead of during query execution,
+as sometimes happens with <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>. </ul></p>
+
+<p>Note the last two bullets 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. Furthermore, a call to
+sqlite3_get_auxdata() that occurs immediately after a corresponding call
+to sqlite3_set_auxdata() might still return NULL if an out-of-memory
+condition occurred during the sqlite3_set_auxdata() call or if the
+function is being evaluated during query planning rather than during
+query execution.</p>
+
+<p>In practice, auxiliary data 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: <a href="#sqlite3_get_clientdata">sqlite3_get_clientdata()</a> and <a href="#sqlite3_get_clientdata">sqlite3_set_clientdata()</a>.
+</p><hr><a name="sqlite3_get_clientdata"></a>
+<h2>Database Connection Client Data</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_get_clientdata(sqlite3*,const char*);
+int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*));
+</pre></blockquote>
+<p>
+These functions are used to associate one or more named pointers
+with a <a href="#sqlite3">database connection</a>.
+A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P
+to be attached to <a href="#sqlite3">database connection</a> D using name N. Subsequent
+calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P
+or a NULL pointer if there were no prior calls to
+sqlite3_set_clientdata() with the same values of D and N.
+Names are compared using strcmp() and are thus case sensitive.</p>
+
+<p>If P and X are both non-NULL, then the destructor X is invoked with
+argument P on the first of the following occurrences:
+<ul>
+<li> An out-of-memory error occurs during the call to
+sqlite3_set_clientdata() which attempts to register pointer P.
+<li> A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made
+with the same D and N parameters.
+<li> The database connection closes. SQLite does not make any guarantees
+about the order in which destructors are called, only that all
+destructors will be called exactly once at some point during the
+database connection closing process.
+</ul></p>
+
+<p>SQLite does not do anything with client data other than invoke
+destructors on the client data at the appropriate time. The intended
+use for client data is to provide a mechanism for wrapper libraries
+to store additional information about an SQLite database connection.</p>
+
+<p>There is no limit (other than available memory) on the number of different
+client data pointers (with different names) that can be attached to a
+single database connection. However, the implementation is optimized
+for the case of having only one or two different client data names.
+Applications and wrapper libraries are discouraged from using more than
+one client data name each.</p>
+
+<p>There is no way to enumerate the client data pointers
+associated with a database connection. The N parameter can be thought
+of as a secret key such that only code that knows the secret key is able
+to access the associated data.</p>
+
+<p>Security Warning: These interfaces should not be exposed in scripting
+languages or in other circumstances where it might be possible for an
+an attacker to invoke them. Any agent that can invoke these interfaces
+can probably also take control of the process.</p>
+
+<p>Database connection client data is only available for SQLite
+version 3.44.0 (2023-11-01) and later.</p>
+
+<p>See also: <a href="#sqlite3_get_auxdata">sqlite3_set_auxdata()</a> and <a href="#sqlite3_get_auxdata">sqlite3_get_auxdata()</a>.
+</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_interrupt"></a>
+<h2>Interrupt A Long-Running Query</h2>
+</div>
+<blockquote><pre>
+void sqlite3_interrupt(sqlite3*);
+int sqlite3_is_interrupted(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>
+
+<p>The <a href="#sqlite3_interrupt">sqlite3_is_interrupted(D)</a> interface can be used to determine whether
+or not an interrupt is currently in effect for <a href="#sqlite3">database connection</a> D.
+It returns 1 if an interrupt is currently in effect, or 0 otherwise.
+</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. In most cases the SQLite core only uses
+sqlite3_mutex_try() as an optimization, so this is acceptable
+behavior. The exceptions are unix builds that set the
+SQLITE_ENABLE_SETLK_TIMEOUT build option. In that case a working
+sqlite3_mutex_try() is required.</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(),
+sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer,
+then any of the four routines behaves as a no-op.</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. For historical reasons, if opening in
+read-write mode fails due to OS-level permissions, an attempt is
+made to open it in read-only mode. <a href="#sqlite3_db_readonly">sqlite3_db_readonly()</a> can be
+used to determine whether the database is actually
+read-write.</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 sqlite3_preupdate_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>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 actually 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_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 */
+);
+int sqlite3_stmt_scanstatus_v2(
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
+ int idx, /* Index of loop to report on */
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
+ int flags, /* Mask of flags defined below */
+ void *pOut /* Result written here */
+);
+</pre></blockquote>
+<p>
+These interfaces return 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.</p>
+
+<p>The "flags" parameter must be passed a mask of flags. At present only
+one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX
+is specified, then status information is available for all elements
+of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If
+SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements
+that correspond to query loops (the "SCAN..." and "SEARCH..." elements of
+the EXPLAIN QUERY PLAN output) are available. Invoking API
+sqlite3_stmt_scanstatus() is equivalent to calling
+sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter.</p>
+
+<p>Parameter "idx" identifies the specific query element to retrieve statistics
+for. Query elements are numbered starting from zero. A value of -1 may be
+to query for statistics regarding the entire query. 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.</p>
+
+<p>See also: <a href="#sqlite3_stmt_scanstatus_reset">sqlite3_stmt_scanstatus_reset()</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 implementation, 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*);
+</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>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) should 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_ERROR</a>.</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 passed 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..4e18e43
--- /dev/null
+++ b/www/carray.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>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). The ability to bind an array of <tt>struct iovec</tt>
+objects that are interpreted as BLOBs was added in SQLite version 3.41.0
+(2023-02-21).
+
+</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><li> 'struct iovec'
+</li></ol>
+
+<p>The default datatype is 'int32'.
+
+</p><p>The 'struct iovec' type used for BLOB data is a standard Posix data
+structure, normally declared using "<tt>#include &lt;sys/uio.h&gt;</tt>".
+The format is:
+
+</p><blockquote><pre>
+struct iovec {
+ void *iov_base; /* Starting address */
+ size_t iov_len; /* Number of bytes to transfer */
+};
+</pre></blockquote>
+
+<a name="onearg"></a>
+
+<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
+ #define CARRAY_BLOB 4
+</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=5722621d60">2023-02-17 13:24:09</a> UTC </small></i></p>
+
diff --git a/www/changes.html b/www/changes.html
new file mode 100644
index 0000000..b7f5e21
--- /dev/null
+++ b/www/changes.html
@@ -0,0 +1,7085 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="https://www.sqlite.org/src/timeline">
+https://www.sqlite.org/src/timeline</a> and
+<a href="https://www.sqlite.org/src/timeline?t=release">
+https://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_45_1"></a>
+<h3>2024-01-30 (3.45.1)</h3><p><ol class='lessindent'>
+<li> Restore the <a href="json1.html#jblobbug">JSON BLOB input bug</a>, and promise to support the anomaly in
+ subsequent releases, for backward compatibility.
+<li> Fix the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it works on read-only
+ databases that contain FTS3 and FTS5 tables. This resolves an issue
+ introduced in <a href="#version_3_44_0">version 3.44.0</a> but was undiscovered until after the 3.45.0 release.
+<li> Fix issues associated with processing corrupt <a href="json1.html#jsonbx">JSONB</a> inputs:
+ <ol type="a">
+ <li> Prevent exponential runtime when converting a corrupt JSONB into text.
+ <li> Fix a possible read of one byte past the end of the JSONB blob when converting
+ a corrupt JSONB into text.
+ <li> Enhanced testing using <a href="testing.html#dbsqlfuzz">jfuzz</a> to prevent any future JSONB problems such
+ as the above.
+ </ol>
+<li> Fix a long-standing bug in which a read of a few bytes past the end of a
+ memory-mapped segment might occur when accessing a craftily corrupted database
+ using <a href="pragma.html#pragma_mmap_size">memory-mapped database</a>.
+<li> Fix a long-standing bug in which a NULL pointer dereference might occur in
+ the <a href="opcode.html">bytecode engine</a> due to incorrect bytecode being generated for a class
+ of SQL statements that are deliberately designed to stress the query planner
+ but which are otherwise pointless.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a
+<li>SHA3-256 for sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295
+
+</ol></p>
+<a name="version_3_45_0"></a>
+<h3>2024-01-15 (3.45.0)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for
+ <a href="appfunc.html">application-defined SQL functions</a>.
+ All application defined SQL functions that invokes
+ <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property.
+ Failure to do so might cause the call to sqlite3_result_subtype() to
+ behave as a no-op. Compile with <a href="compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an
+ SQL error to be raised if a function that is not <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
+ tries invokes <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a>
+ is a recommended compile-time option for every application that makes
+ use of subtypes.
+<li> Enhancements to the <a href="json1.html">JSON SQL functions</a>:
+ <ol type="a">
+ <li> All JSON functions are rewritten to use a new internal parse tree
+ format called <a href="json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable
+ and hence can be stored in the database to avoid unnecessary re-parsing
+ whenever the JSON value is used.
+ <li> New versions of JSON-generating functions generate binary JSONB instead
+ of JSON text.
+ <li> The <a href="json1.html#jvalid">json_valid()</a> function adds an optional second argument that
+ specifies what it means for the first argument to be "well-formed".
+ </ol>
+<li> Add the <a href="fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="fts5.html">FTS5</a> virtual table.
+<li> The <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default.
+ Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Do not allow the transitive constraint optimization to trick the
+ query planner into using a range constraint when a better equality
+ constraint is available.
+ (<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.)
+ <li> The query planner now does a better job of disregarding
+ indexes that <a href="lang_analyze.html">ANALYZE</a> identifies as low-quality.
+ (<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.)
+ </ol>
+<li> Increase the default value for <a href="limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to
+ 4294967294.
+<li> Enhancements to the <a href="cli.html">CLI</a>:
+ <ol type="a">
+ <li> Improvements to the display of UTF-8 content on Windows
+ <li> Automatically detect playback of ".dump" scripts and make appropriate
+ changes to settings such as ".dbconfig defensive off" and
+ ".dbconfig dqs_dll on".
+ </ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2024-01-15 17:01:13 1066602b2b1976fe58b5150777cced894af17c803e068f5918390d6915b46e1d
+<li>SHA3-256 for sqlite3.c: f56d8e5e8c61d87b957f1cc60b3042c134d7bc0ca3aba002e6999e8f0af310a3
+
+</ol></p>
+<a name="version_3_44_2"></a>
+<h3>2023-11-24 (3.44.2)</h3><p><ol class='lessindent'>
+<li> Fix a mistake in the <a href="cli.html">CLI</a> that was introduced by the fix (item 15 above) in 3.44.1.
+<li> Fix a problem in FTS5 that was discovered during internal fuzz testing only
+ minutes after the 3.44.1 release was tagged.
+<li> Fix incomplete assert() statements that the fuzzer discovered the day after
+ the previous release.
+<li> Fix a couple of harmless compiler warnings that appeared in debug builds with GCC 16.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f
+<li>SHA3-256 for sqlite3.c: bd70b012e2d1b3efa132d905224cd0ab476a69b892f8c6b21135756ec7ffbb13
+
+</ol></p>
+<a name="version_3_44_1"></a>
+<h3>2023-11-22 (3.44.1)</h3><p><ol class='lessindent'>
+<li> Change the <a href="cli.html">CLI</a> so that it uses UTF-16 for console I/O on Windows. This
+ enables proper display of unicode text on old Windows7 machines.
+<li> Other obscure bug fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-11-22 14:18:12 d295f48e8f367b066b881780c98bdf980a1d550397d5ba0b0e49842c95b3e8b4
+<li>SHA3-256 for sqlite3.c: e359dc502a73f3a8ad8e976a51231134d25cb93ad557a724dd92fe0c5897113a
+
+</ol></p>
+<a name="version_3_44_0"></a>
+<h3>2023-11-01 (3.44.0)</h3><p><ol class='lessindent'>
+<li> <a href="lang_aggfunc.html">Aggregate functions</a> can now include an ORDER BY clause after their last
+ parameter. The arguments to the function are processed in the order
+ specified. This can be important for functions like
+ <a href="lang_aggfunc.html#group_concat">string_agg()</a> and <a href="json1.html#jgrouparray">json_group_array()</a>.
+<li> Add support for the <a href="lang_corefunc.html#concat">concat()</a> and <a href="lang_corefunc.html#concat_ws">concat_ws()</a> scalar SQL functions,
+ compatible with PostgreSQL, SQLServer, and MySQL.
+<li> Add support for the <a href="lang_aggfunc.html#group_concat">string_agg()</a> aggregate SQL function, compatible
+ with PostgreSQL and SQLServer.
+<li> New conversion letters on the <a href="lang_datefunc.html#strftm">strftime() SQL function</a>: %e %F %I %k %l %p %P %R %T %u
+<li> Add new C-language APIs: <a href="c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>.
+<li> Many errors associated with CREATE TABLE are now raised when the CREATE TABLE statement
+ itself is run, rather than being deferred until the first time the table is actually
+ used.
+<li> The <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command now verifies the consistency of the
+ content in various built-in <a href="vtab.html">virtual tables</a> using the new <a href="vtab.html#xintegrity">xIntegrity method</a>.
+ This works for the <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, and <a href="geopoly.html">GEOPOLY</a> extensions.
+<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> setting now prevents <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a>
+ from being turned on. Previously writable_schema could be turned on, but would
+ not actually allow the schema to be writable. Now it simply cannot be turned on.
+<li> Tag the built-in <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, and <a href="geopoly.html">GEOPOLY</a> virtual tables as
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> so that they can be used inside of triggers in
+ high-security deployments.
+<li> The <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statement is deprecated, as its use when the
+ schema contains LIKE operators can lead to reports of database corruption
+ by <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>.
+<li> <a href="compile.html#use_seh">SQLITE_USE_SEH</a> (Structured Exception Handling) is now enabled by default whenever
+ SQLite is built using the Microsoft C compiler. It can be disabled using
+ -DSQLITE_USE_SEH=0
+<li> Query planner optimizations:
+ <ol type="a">
+ <li> In partial index scans, if the WHERE clause implies a constant value for a table
+ column, replace occurrences of that table column with the constant. This
+ increases the likelihood of the partial index being a covering index.
+ <li> Disable the view-scan optimization (added in <a href="#version_3_42_0">version 3.42.0</a> - item 1c)
+ as it was causing multiple performance regressions. In its place, reduce
+ the estimated row count for DISTINCT subqueries by a factor of 8.
+ </ol>
+<li> SQLite now performs run-time detection of whether or not the underlying hardware
+ supports "long double" with precision greater than "double" and uses appropriate
+ floating-point routines depending on what it discovered.
+<li> The <a href="cli.html">CLI</a> for Windows now defaults to using UTF-8 for both input
+ and output on platforms that support it. The --no-utf8 option is available
+ to disable UTF8 support.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad8130
+<li>SHA3-256 for sqlite3.c: d9e6530096136067644b1cb2057b3b0fa51070df99ec61971f73c9ba6aa9a36e
+
+</ol></p>
+<a name="version_3_43_2"></a>
+<h3>2023-10-10 (3.43.2)</h3><p><ol class='lessindent'>
+<li> Fix a couple of obscure UAF errors and an obscure memory leak.
+<li> Omit the use of the sprintf() function from the standard library
+ in the <a href="cli.html">CLI</a>, as this now generates warnings on some platforms.
+<li> Avoid conversion of a double into unsigned long long integer, as
+ some platforms do not do such conversions correctly.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-10-10 12:14:04 4310099cce5a487035fa535dd3002c59ac7f1d1bec68d7cf317fd3e769484790
+<li>SHA3-256 for sqlite3.c: e17a3dc69330bd109256fb5a6e2b3ce8fbec48892a800389eb7c0f8856703161
+
+</ol></p>
+<a name="version_3_43_1"></a>
+<h3>2023-09-11 (3.43.1)</h3><p><ol class='lessindent'>
+<li> Fix a regression in the way that the <a href="lang_aggfunc.html#sumunc">sum()</a>, <a href="lang_aggfunc.html#avg">avg()</a>, and <a href="lang_aggfunc.html#sumunc">total()</a>
+ aggregate functions handle infinities.
+<li> Fix a bug in the <a href="json1.html#jarraylen">json_array_length()</a> function that occurs when the
+ argument comes directly from <a href="json1.html#jrm">json_remove()</a>.
+<li> Fix the omit-unused-subquery-columns optimization (introduced in
+ in version 3.42.0) so that it works correctly if the subquery is a
+ compound where one arm is DISTINCT and the other is not.
+<li> Other minor fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0
+<li>SHA3-256 for sqlite3.c: 391af0a4755e31ae8b29776a4a060b678823ffe4c4db558567567c688a578589
+
+</ol></p>
+<a name="version_3_43_0"></a>
+<h3>2023-08-24 (3.43.0)</h3><p><ol class='lessindent'>
+<li> Add support for <a href="fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>. This is a variety
+ of <a href="fts5.html">FTS5</a> full-text search index that omits storing the content that is being indexed
+ while also allowing records to be deleted.
+<li> Enhancements to the <a href="lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added new <a href="lang_datefunc.html#tmshf">time shift modifiers</a> of the form <tt>&plusmn;YYYY-MM-DD HH:MM:SS.SSS</tt>.
+ <li> Added the <a href="lang_datefunc.html#tmdif">timediff() SQL function</a>.
+ </ol>
+<li> Added the <a href="lang_corefunc.html#octet_length">octet_length(X)</a> SQL function.
+<li> Added the <a href="c3ref/stmt_explain.html">sqlite3_stmt_explain()</a> API.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Generalize the LEFT JOIN strength reduction optimization so that it works
+ for RIGHT and FULL JOINs as well. Rename it to
+ <a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a>.
+ <li> Enhance the theorem prover in the <a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> optimization
+ so that it returns fewer false-negatives.
+ </ol>
+<li> Enhancements to the <a href="floatingpoint.html#decext">decimal extension</a>:
+ <ol type="a">
+ <li> New function decimal_pow2(N) returns the N-th power of 2 for integer N
+ between -20000 and +20000.
+ <li> New function decimal_exp(X) works like decimal(X) except that it returns
+ the result in exponential notation - with a "e+NN" at the end.
+ <li> If X is a floating-point value, then the decimal(X) function now does a full
+ expansion of that value into its exact decimal equivalent.
+ </ol>
+<li> Performance enhancements to <a href="json1.html">JSON processing</a> results in a 2x performance
+ improvement for some kinds of processing on large JSON strings.
+<li> New makefile target "verify-source" checks to ensure that there are no
+ unintentional changes in the source tree. (Works for
+ <a href="getthecode.html">canonical source code</a> only -
+ not for <a href="amalgamation.html#amalgtarball">precompiled amalgamation tarballs</a>.)
+<li> Added the <a href="compile.html#use_seh">SQLITE_USE_SEH</a> compile-time option that enables Structured
+ Exception Handling on Windows while working with the memory-mapped
+ <a href="walformat.html#shm">shm file</a> that is part of <a href="wal.html">WAL mode</a> processing. This option is enabled
+ by default when building on Windows using Makefile.msc.
+<li> The <a href="vfs.html">VFS</a> for unix now assumes that the nanosleep() system call is
+ available unless compiled with -DHAVE_NANOSLEEP=0.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-08-24 12:36:59 0f80b798b3f4b81a7bb4233c58294edd0f1156f36b6ecf5ab8e83631d468778c
+<li>SHA3-256 for sqlite3.c: a6fc5379891d77b69a7d324cd24a437307af66cfdc3fef5dfceec3c82c8d4078
+
+</ol></p>
+<a name="version_3_42_0"></a>
+<h3>2023-05-16 (3.42.0)</h3><p><ol class='lessindent'>
+<li> Add the <a href="fts5.html#the_secure_delete_configuration_option">FTS5 secure-delete command</a>. This option causes all forensic traces
+ to be removed from the FTS5 inverted index when content is deleted.
+<li> Enhance the <a href="json1.html">JSON SQL functions</a> to support <a href="json1.html#json5">JSON5 extensions</a>.
+<li> The <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> calls to <a href="c3ref/config.html">sqlite3_config()</a>
+ are now allowed to occur <i>after</i> <a href="c3ref/initialize.html">sqlite3_initialize()</a>.
+<li> New <a href="c3ref/db_config.html">sqlite3_db_config()</a> options: <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">SQLITE_DBCONFIG_STMT_SCANSTATUS</a> and
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder">SQLITE_DBCONFIG_REVERSE_SCANORDER</a>.
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Enable the "count-of-view" optimization by default.
+ <li> Avoid computing unused columns in subqueries.
+ <li> Improvements to the <a href="optoverview.html#pushdown">push-down optimization</a>.
+ </ol>
+<li> Enhancements to the <a href="cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add the --unsafe-testing command-line option. Without this option, some
+ dot-commands (ex: ".testctrl") are now disabled because those commands
+ that are intended for testing only and can cause malfunctions if misused.
+ <li> Allow commands ".log on" and ".log off", even in --safe mode.
+ <li> "--" as a command-line argument means all subsequent arguments that
+ start with "-" are interpreted as normal non-option argument.
+ <li> Magic parameters ":inf" and ":nan" bind to floating point literals
+ Infinity and NaN, respectively.
+ <li> The --utf8 command-line option omits all translation to or from
+ MBCS on the Windows console for interactive sessions, and sets
+ the console code page for UTF-8 I/O during such sessions.
+ The --utf8 option is a no-op on all other platforms.
+ </ol>
+<li> Add the ability for <a href="appfunc.html">application-defined SQL functions</a> to have the same name
+ as join keywords: CROSS, FULL, INNER, LEFT, NATURAL, OUTER, or RIGHT.
+<li> Enhancements to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>:
+ <ol type="a">
+ <li> Detect and raise an error when a NaN value is stored in a NOT NULL column.
+ <li> Improved error message output identifies the root page of a b-tree when
+ an error is found within a b-tree.
+ </ol>
+<li> Allow the <a href="sessionintro.html">session extension</a> to be configured to capture changes from
+ tables that lack an explicit ROWID.
+<li> Added the <a href="lang_datefunc.html#subsec">subsecond modifier</a> to the <a href="lang_datefunc.html">date and time functions</a>.
+<li> Negative values passed into <a href="c3ref/sleep.html">sqlite3_sleep()</a> are henceforth interpreted as 0.
+<li> The maximum recursion depth for JSON arrays and objects is lowered from 2000
+ to 1000.
+<li> Extended the <a href="printf.html">built-in printf()</a> function so the <a href="printf.html#comma">comma option</a> now works with
+ floating-point conversions in addition to integer conversions.
+<li> Miscellaneous bug fixes and performance optimizations
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
+<li>SHA3-256 for sqlite3.c: 6aa3fadf000000625353bbaa1e83af114c40c240a0aa5a2c1c2aabcfc28d4f92
+
+</ol></p>
+<a name="version_3_41_2"></a>
+<h3>2023-03-22 (3.41.2)</h3><p><ol class='lessindent'>
+<li> Multiple fixes for reads past the end of memory buffers
+ (NB: <i>reads</i> not <i>writes</i>) in the following circumstances:
+ <ol type="a">
+ <li> When processing a corrupt database file using the non-standard
+ <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option.
+ <li> In the <a href="cli.html">CLI</a> when the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> routine returns an out-of-range value
+ (see also the fix to sqlite3_error_offset() below).
+ <li> In the <a href="recovery.html">recovery extension</a>.
+ <li> In <a href="fts3.html">FTS3</a> when processing a corrupt database file.
+ </ol>
+<li> Fix the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> so that it does not return out-of-range values when
+ reporting errors associated with <a href="gencol.html">generated columns</a>.
+<li> Multiple fixes in the query optimizer for problems that cause incorrect
+ results for bizarre, fuzzer-generated queries.
+<li> Increase the size of the reference counter in the page cache object to 64 bits to
+ ensure that the counter never overflows.
+<li> Fix a performance regression caused by a bug fix in patch release 3.41.1.
+<li> Fix a few incorrect assert() statements.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da
+<li>SHA3-256 for sqlite3.c: c83f68b7aac1e7d3ed0fcdb9857742f024449e1300bfb3375131a6180b36cf7c
+
+</ol></p>
+<a name="version_3_41_1"></a>
+<h3>2023-03-10 (3.41.1)</h3><p><ol class='lessindent'>
+<li> Provide compile-time options -DHAVE_LOG2=0 and -DHAVE_LOG10=0 to enable SQLite to be
+ compiled on systems that omit the standard library functions log2() and log10(), repectively.
+<li> Ensure that the datatype for column t1.x in
+ "<tt>CREATE TABLE t1 AS SELECT CAST(7 AS INT) AS x;</tt>" continues to be INT and is not NUM,
+ for historical compatibility.
+<li> Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to detect when extra bytes appear at the end of an
+ index record.
+<li> Fix various obscure bugs reported by the user community. See the
+ <a href="https://sqlite.org/src/timeline?from=version-3.41.0&to=version-3.41.1">timeline of changes</a>
+ for details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-03-10 12:13:52 20399f3eda5ec249d147ba9e48da6e87f969d7966a9a896764ca437ff7e737ff
+<li>SHA3-256 for sqlite3.c: d0d9db8425570f4a57def04fb8f4ac84f5c3e4e71d3d4d10472e3639c5fdf09f
+
+</ol></p>
+<a name="version_3_41_0"></a>
+<h3>2023-02-21 (3.41.0)</h3><p><ol class='lessindent'>
+<li>Query planner improvements:
+ <ol type="a">
+ <li> Make use of <a href="expridx.html">indexed expressions</a> within an aggregate query that
+ includes a GROUP BY clause.
+ <li> The query planner has improved awareness of when an index is
+ a <a href="queryplanner.html#covidx">covering index</a> and adjusts predicted runtimes accordingly.
+ <li> The query planner is more aggressive about using <a href="optoverview.html#coroutines">co-routines</a> rather
+ than materializing subqueries and views.
+ <li> Queries against the built-in table-valued functions <a href="json1.html#jtree">json_tree()</a> and
+ <a href="json1.html#jeach">json_each()</a> will now usually treat "ORDER BY rowid" as a no-op.
+ <li> Enhance the ability of the query planner to use <a href="expridx.html">indexed expressions</a>
+ even if the expression has been modified by the
+ <a href="optoverview.html#constprop">constant-propagation optimization</a>.
+ (See <a href="https://sqlite.org/forum/forumpost/0a539c76db3b9e29">forum thread 0a539c7</a>.)
+ </ol>
+<li>Add the built-in <a href="lang_corefunc.html#unhex">unhex()</a> SQL function.
+<li>Add the base64 and base85 application-defined functions as an extension and
+ include that extension in the <a href="cli.html">CLI</a>.
+<li>Add the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interface. (This interface is only
+ available if SQLite is compiled using <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.)
+<li>In-memory databases created using <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> now report their
+ filename as an empty string, not as 'x'.
+<li>Changes to the <a href="cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add the new base64() and base85() SQL functions
+ <li> Enhanced <a href="eqp.html">EXPLAIN QUERY PLAN</a> output using the new <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a>
+ interface when compiled using <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+ <li> The "<tt>.scanstats est</tt>" command provides query planner estimates in profiles.
+ <li> The continuation prompt indicates if the input is currently inside of a
+ string literal, identifier literal, comment, trigger definition, etc.
+ <li> Enhance the --safe command-line option to disallow dangerous SQL functions.
+ <li> The <a href="quirks.html#dblquote">double-quoted string misfeature</a> is now disabled by default for CLI
+ builds. Legacy use cases can reenable the misfeature at run-time using
+ the "<tt>.dbconfig dqs_dml on</tt>" and "<tt>.dbconfig dqs_ddl on</tt>"
+ commands.
+ </ol>
+<li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it detects when text strings in
+ a table are equivalent to but not byte-for-byte identical to the same strings in the index.
+<li>Enhance the <a href="carray.html">carray table-valued function</a> so that it is able to bind an array of
+ BLOB objects.
+<li>Added the <a href="c3ref/interrupt.html">sqlite3_is_interrupted()</a> interface.
+<li>Long-running calls to <a href="c3ref/prepare.html">sqlite3_prepare()</a> and similar now invoke the
+ <a href="c3ref/progress_handler.html">progress handler callback</a> and react to <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>The <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> functions are enhanced so that
+ they reliably detect if they are invoked on a parameter that was not selected for
+ multi-value IN processing using <a href="c3ref/vtab_in.html">sqlite3_vtab_in()</a>.
+ They return SQLITE_ERROR instead of SQLITE_MISUSE in this case.
+<li>The parser now ignores excess parentheses around a subquery on the right-hand side
+ of an IN operator, so that SQLite now works the same as PostgreSQL in this regard.
+ Formerly, SQLite treated the subquery as an expression with an implied "LIMIT 1".
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> option to the <a href="c3ref/file_control.html">sqlite3_file_control()</a> API.
+<li>Makefile improvements:
+ <ol type="a">
+ <li>The new makefile target "sqlite3r.c" builds an <a href="amalgamation.html">amalgamation</a> that includes
+ the <a href="recovery.html">recovery extension</a>.
+ <li>New makefile targets "devtest" and "releasetest" for running a
+ quick developmental test prior to doing a check-in and for doing a full
+ release test, respectively.
+ </ol>
+<li>Miscellaneous performance enhancements.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-02-21 18:09:37 05941c2a04037fc3ed2ffae11f5d2260706f89431f463518740f72ada350866d
+<li>SHA3-256 for sqlite3.c: 02bd9e678460946810801565667fdb8f0c29c78e51240512d2e5bb3dbdee7464
+
+</ol></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_encoding.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="https://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_fknoaction.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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
+<li>Fix a faulty assert() statement.
+ Ticket <a href="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
+<li>Assertion fault on queries involving expressions of the form
+ "x IN (?)". Ticket <a href="https://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
+<li>Incorrect column datatype reported.
+ Ticket <a href="https://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="https://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
+<li>Partial index causes assertion fault on UPDATE OR REPLACE.
+ Ticket <a href="https://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
+<li>Crash when calling undocumented SQL function sqlite_rename_parent()
+ with NULL parameters.
+ Ticket <a href="https://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
+<li>ORDER BY ignored if the query has an identical GROUP BY.
+ Ticket <a href="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/finfo?name=tool/genfkey.c">
+ source code</a> and
+ <a href="https://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="https://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="https://icu.unicode.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_corefunc.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="https://icu.unicode.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_corefunc.html#randomblob">randomblob()</a> and
+<a href="lang_corefunc.html#hex">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: https://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..51e915f
--- /dev/null
+++ b/www/chronology.html
@@ -0,0 +1,948 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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' data-sortkey='08567'><a href='https://www.sqlite.org/src/timeline?c=e876e51a0e&y=ci'>2024-01-30</a></td>
+<td width='100' align='center' data-sortkey='3450100'><a href="releaselog/3_45_1.html">3.45.1</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08552'><a href='https://www.sqlite.org/src/timeline?c=1066602b2b&y=ci'>2024-01-15</a></td>
+<td width='100' align='center' data-sortkey='3450000'><a href="releaselog/3_45_0.html">3.45.0</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08500'><a href='https://www.sqlite.org/src/timeline?c=ebead0e723&y=ci'>2023-11-24</a></td>
+<td width='100' align='center' data-sortkey='3440200'><a href="releaselog/3_44_2.html">3.44.2</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08498'><a href='https://www.sqlite.org/src/timeline?c=d295f48e8f&y=ci'>2023-11-22</a></td>
+<td width='100' align='center' data-sortkey='3440100'><a href="releaselog/3_44_1.html">3.44.1</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08477'><a href='https://www.sqlite.org/src/timeline?c=17129ba1ff&y=ci'>2023-11-01</a></td>
+<td width='100' align='center' data-sortkey='3440000'><a href="releaselog/3_44_0.html">3.44.0</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08455'><a href='https://www.sqlite.org/src/timeline?c=e17a3dc693&y=ci'>2023-10-10</a></td>
+<td width='100' align='center' data-sortkey='3430200'><a href="releaselog/3_43_2.html">3.43.2</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08426'><a href='https://www.sqlite.org/src/timeline?c=2d3a40c05c&y=ci'>2023-09-11</a></td>
+<td width='100' align='center' data-sortkey='3430100'><a href="releaselog/3_43_1.html">3.43.1</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08408'><a href='https://www.sqlite.org/src/timeline?c=0f80b798b3&y=ci'>2023-08-24</a></td>
+<td width='100' align='center' data-sortkey='3430000'><a href="releaselog/3_43_0.html">3.43.0</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08308'><a href='https://www.sqlite.org/src/timeline?c=831d0fb283&y=ci'>2023-05-16</a></td>
+<td width='100' align='center' data-sortkey='3420000'><a href="releaselog/3_42_0.html">3.42.0</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08253'><a href='https://www.sqlite.org/src/timeline?c=0d1fc92f94&y=ci'>2023-03-22</a></td>
+<td width='100' align='center' data-sortkey='3410200'><a href="releaselog/3_41_2.html">3.41.2</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08241'><a href='https://www.sqlite.org/src/timeline?c=d0d9db8425&y=ci'>2023-03-10</a></td>
+<td width='100' align='center' data-sortkey='3410100'><a href="releaselog/3_41_1.html">3.41.1</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08224'><a href='https://www.sqlite.org/src/timeline?c=05941c2a04&y=ci'>2023-02-21</a></td>
+<td width='100' align='center' data-sortkey='3410000'><a href="releaselog/3_41_0.html">3.41.0</a></td></tr>
+<tr><td width='100' align='center' data-sortkey='08169'><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' data-sortkey='08127'><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' data-sortkey='08079'><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' data-sortkey='08055'><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' data-sortkey='08009'><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' data-sortkey='08001'><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' data-sortkey='07983'><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' data-sortkey='07933'><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' data-sortkey='07931'><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' data-sortkey='07924'><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' data-sortkey='07892'><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' data-sortkey='07878'><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' data-sortkey='07860'><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' data-sortkey='07813'><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' data-sortkey='07806'><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' data-sortkey='07773'><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' data-sortkey='07611'><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' data-sortkey='07551'><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' data-sortkey='07534'><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' data-sortkey='07527'><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' data-sortkey='07518'><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' data-sortkey='07516'><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' data-sortkey='07513'><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' data-sortkey='07462'><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' data-sortkey='07412'><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' data-sortkey='07303'><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' data-sortkey='07246'><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' data-sortkey='07232'><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' data-sortkey='07222'><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' data-sortkey='07219'><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' data-sortkey='07103'><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' data-sortkey='07098'><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' data-sortkey='06994'><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' data-sortkey='06988'><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' data-sortkey='06902'><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' data-sortkey='06817'><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' data-sortkey='06767'><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' data-sortkey='06750'><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' data-sortkey='06749'><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' data-sortkey='06681'><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' data-sortkey='06655'><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' data-sortkey='06614'><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' data-sortkey='06607'><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' data-sortkey='06604'><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' data-sortkey='06501'><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' data-sortkey='06446'><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' data-sortkey='06438'><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' data-sortkey='06368'><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' data-sortkey='06278'><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' data-sortkey='06217'><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' data-sortkey='06194'><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' data-sortkey='06149'><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' data-sortkey='06148'><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' data-sortkey='06140'><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' data-sortkey='06126'><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' data-sortkey='06125'><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' data-sortkey='06123'><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' data-sortkey='06068'><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' data-sortkey='06025'><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' data-sortkey='05987'><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' data-sortkey='05984'><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' data-sortkey='05983'><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' data-sortkey='05948'><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' data-sortkey='05924'><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' data-sortkey='05903'><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' data-sortkey='05871'><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' data-sortkey='05839'><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' data-sortkey='05836'><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' data-sortkey='05754'><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' data-sortkey='05724'><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' data-sortkey='05714'><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' data-sortkey='05706'><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' data-sortkey='05704'><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' data-sortkey='05678'><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' data-sortkey='05661'><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' data-sortkey='05635'><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' data-sortkey='05629'><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' data-sortkey='05621'><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' data-sortkey='05556'><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' data-sortkey='05539'><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' data-sortkey='05537'><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' data-sortkey='05460'><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' data-sortkey='05458'><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' data-sortkey='05390'><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' data-sortkey='05379'><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' data-sortkey='05377'><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' data-sortkey='05348'><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' data-sortkey='05306'><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' data-sortkey='05280'><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' data-sortkey='05270'><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' data-sortkey='05266'><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' data-sortkey='05228'><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' data-sortkey='05224'><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' data-sortkey='05207'><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' data-sortkey='05187'><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' data-sortkey='05180'><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' data-sortkey='05175'><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' data-sortkey='05112'><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' data-sortkey='05040'><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' data-sortkey='04978'><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' data-sortkey='04970'><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' data-sortkey='04955'><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' data-sortkey='04954'><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' data-sortkey='04927'><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' data-sortkey='04919'><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' data-sortkey='04860'><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' data-sortkey='04810'><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' data-sortkey='04766'><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' data-sortkey='04761'><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' data-sortkey='04758'><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' data-sortkey='04660'><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' data-sortkey='04622'><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' data-sortkey='04608'><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' data-sortkey='04597'><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' data-sortkey='04529'><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' data-sortkey='04508'><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' data-sortkey='04501'><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' data-sortkey='04432'><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' data-sortkey='04401'><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' data-sortkey='04317'><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' data-sortkey='04297'><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' data-sortkey='04289'><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' data-sortkey='04289'><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' data-sortkey='04289'><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' data-sortkey='04234'><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' data-sortkey='04170'><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' data-sortkey='04094'><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' data-sortkey='04051'><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' data-sortkey='03968'><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' data-sortkey='03963'><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' data-sortkey='03928'><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' data-sortkey='03896'><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' data-sortkey='03892'><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' data-sortkey='03891'><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' data-sortkey='03821'><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' data-sortkey='03765'><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' data-sortkey='03705'><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' data-sortkey='03660'><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' data-sortkey='03659'><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' data-sortkey='03640'><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' data-sortkey='03626'><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' data-sortkey='03509'><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' data-sortkey='03492'><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' data-sortkey='03430'><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' data-sortkey='03400'><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' data-sortkey='03367'><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' data-sortkey='03362'><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' data-sortkey='03346'><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' data-sortkey='03313'><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' data-sortkey='03281'><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' data-sortkey='03237'><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' data-sortkey='03225'><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' data-sortkey='03204'><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' data-sortkey='03198'><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' data-sortkey='03186'><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' data-sortkey='03162'><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' data-sortkey='03149'><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' data-sortkey='03108'><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' data-sortkey='03074'><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' data-sortkey='03073'><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' data-sortkey='03071'><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' data-sortkey='03044'><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' data-sortkey='03024'><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' data-sortkey='03020'><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' data-sortkey='03017'><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' data-sortkey='03010'><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' data-sortkey='02982'><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' data-sortkey='02959'><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' data-sortkey='02936'><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' data-sortkey='02912'><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' data-sortkey='02891'><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' data-sortkey='02828'><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' data-sortkey='02800'><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' data-sortkey='02770'><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' data-sortkey='02730'><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' data-sortkey='02724'><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' data-sortkey='02676'><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' data-sortkey='02659'><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' data-sortkey='02637'><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' data-sortkey='02605'><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' data-sortkey='02575'><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' data-sortkey='02553'><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' data-sortkey='02529'><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' data-sortkey='02497'><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' data-sortkey='02443'><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' data-sortkey='02436'><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' data-sortkey='02427'><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' data-sortkey='02420'><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' data-sortkey='02372'><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' data-sortkey='02355'><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' data-sortkey='02350'><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' data-sortkey='02338'><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' data-sortkey='02332'><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' data-sortkey='02245'><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' data-sortkey='02187'><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' data-sortkey='02120'><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' data-sortkey='02058'><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' data-sortkey='02005'><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' data-sortkey='01994'><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' data-sortkey='01987'><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' data-sortkey='01979'><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' data-sortkey='01974'><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' data-sortkey='01951'><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' data-sortkey='01951'><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' data-sortkey='01865'><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' data-sortkey='01858'><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' data-sortkey='01837'><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' data-sortkey='01834'><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' data-sortkey='01831'><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' data-sortkey='01761'><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' data-sortkey='01686'><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' data-sortkey='01678'><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' data-sortkey='01674'><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' data-sortkey='01668'><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' data-sortkey='01668'><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' data-sortkey='01657'><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' data-sortkey='01649'><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' data-sortkey='01644'><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' data-sortkey='01644'><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' data-sortkey='01630'><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' data-sortkey='01619'><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' data-sortkey='01518'><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' data-sortkey='01494'><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' data-sortkey='01478'><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' data-sortkey='01474'><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' data-sortkey='01454'><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' data-sortkey='01436'><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' data-sortkey='01436'><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' data-sortkey='01414'><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' data-sortkey='01406'><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' data-sortkey='01402'><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' data-sortkey='01393'><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' data-sortkey='01300'><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' data-sortkey='01271'><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' data-sortkey='01246'><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' data-sortkey='01246'><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' data-sortkey='01238'><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' data-sortkey='01219'><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' data-sortkey='01205'><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' data-sortkey='01101'><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' data-sortkey='01070'><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' data-sortkey='01047'><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' data-sortkey='01022'><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' data-sortkey='01004'><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' data-sortkey='01004'><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' data-sortkey='00914'><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' data-sortkey='00892'><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' data-sortkey='00864'><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' data-sortkey='00853'><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' data-sortkey='00806'><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' data-sortkey='00770'><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' data-sortkey='00745'><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' data-sortkey='00739'><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' data-sortkey='00727'><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' data-sortkey='00714'><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' data-sortkey='00702'><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' data-sortkey='00701'><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' data-sortkey='00690'><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' data-sortkey='00689'><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' data-sortkey='00684'><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' data-sortkey='00678'><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' data-sortkey='00678'><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' data-sortkey='00672'><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' data-sortkey='00670'><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' data-sortkey='00632'><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' data-sortkey='00630'><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' data-sortkey='00625'><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' data-sortkey='00614'><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' data-sortkey='00612'><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' data-sortkey='00604'><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' data-sortkey='00594'><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' data-sortkey='00594'><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' data-sortkey='00591'><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' data-sortkey='00584'><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' data-sortkey='00581'><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' data-sortkey='00574'><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' data-sortkey='00574'><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' data-sortkey='00572'><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' data-sortkey='00552'><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' data-sortkey='00547'><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' data-sortkey='00546'><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' data-sortkey='00536'><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' data-sortkey='00530'><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' data-sortkey='00524'><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' data-sortkey='00518'><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' data-sortkey='00516'><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' data-sortkey='00511'><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' data-sortkey='00493'><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' data-sortkey='00486'><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' data-sortkey='00485'><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' data-sortkey='00477'><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' data-sortkey='00476'><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' data-sortkey='00465'><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' data-sortkey='00464'><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' data-sortkey='00454'><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' data-sortkey='00453'><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' data-sortkey='00445'><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' data-sortkey='00432'><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' data-sortkey='00429'><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' data-sortkey='00425'><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' data-sortkey='00423'><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' data-sortkey='00423'><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' data-sortkey='00419'><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' data-sortkey='00412'><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' data-sortkey='00408'><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' data-sortkey='00341'><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' data-sortkey='00242'><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' data-sortkey='00233'><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' data-sortkey='00232'><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' data-sortkey='00231'><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' data-sortkey='00216'><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' data-sortkey='00216'><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' data-sortkey='00211'><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' data-sortkey='00210'><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' data-sortkey='00188'><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' data-sortkey='00187'><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' data-sortkey='00187'><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' data-sortkey='00179'><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' data-sortkey='00174'><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' data-sortkey='00141'><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' data-sortkey='00116'><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' data-sortkey='00104'><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' data-sortkey='00068'><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' data-sortkey='00064'><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' data-sortkey='00064'><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' data-sortkey='00062'><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' data-sortkey='00056'><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' data-sortkey='00054'><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' data-sortkey='00045'><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' data-sortkey='00029'><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' data-sortkey='00012'><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' data-sortkey='00006'><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' data-sortkey='00002'><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' data-sortkey='00001'><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 -1;
+ if(aa>bb) return +1;
+ return a.rowIndex-b.rowIndex;
+ }
+ 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"),"nK",1);
+</script>
+
+<p>
+<i>346 releases
+over 23.5 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=5d8275493b">2023-03-03 01:19:02</a> UTC </small></i></p>
+
diff --git a/www/cintro.html b/www/cintro.html
new file mode 100644
index 0000000..7247c9d
--- /dev/null
+++ b/www/cintro.html
@@ -0,0 +1,602 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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 extract 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,
+ blob literal, numeric constant, or NULL is allowed
+ in queries or data modification statements. (DQL or DML)
+ (Parameters may not be used for column or table names,
+ or as values for constraints or default values. (DDL))
+ 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="https://www.sqlite.org/src/doc/trunk/src/date.c">date.c</a> and
+ <a href="https://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>
+
+
diff --git a/www/cksumvfs.html b/www/cksumvfs.html
new file mode 100644
index 0000000..4811a4d
--- /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=c9b2514ff0">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/cli.html b/www/cli.html
new file mode 100644
index 0000000..6ed5de9
--- /dev/null
+++ b/www/cli.html
@@ -0,0 +1,2050 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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-toc2"><a href="#the_unsafe_testing_command_line_option">23.2. The --unsafe-testing command-line option</a></div>
+<div class="fancy-toc2"><a href="#the_no_utf8_and_utf8_command_line_options">23.3. The --no-utf8 and --utf8 command-line options</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
+.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
+.crnl on|off Translate \n to \r\n. Default ON
+.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
+.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|on|off Turn logging on or off. FILE can be stderr/stdout
+.mode MODE ?OPTIONS? Set output mode
+.nonce STRING Suspend safe mode for one command if 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 Stop interpreting input stream, exit if primary.
+.read FILE Read input from FILE or command output
+.recover Recover as much data as possible from corrupt db.
+.restore ?DB? FILE Restore content of DB (default "main") from FILE
+.save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)
+.scanstats on|off|est Turn sqlite3_stmt_scanstatus() metrics on or off
+.schema ?PATTERN? Show the CREATE statements matching PATTERN
+.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
+.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
+.version Show source, library and compiler versions
+.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.
+Or use no name to open a private, temporary on-disk database which
+will also disappear upon exit or use of ".open".
+
+</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="https://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 ".separator" 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="https://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="https://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;
+<a name="base64"></a>
+
+<a name="base85"></a>
+
+</li><li>the base64() and base85() functions which encode a
+blob to base64 or base85 text or decode the same to a blob; 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. Defaults to :memory:.
+OPTIONS include:
+ -- treat no subsequent arguments as options
+ -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 inputs 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
+ -pcachetrace trace all page cache operations
+ -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'
+ -unsafe-testing allow unsafe commands and modes for testing
+ -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="testing_mode"></a>
+
+</p><h2 id="the_unsafe_testing_command_line_option"><span>23.2. </span>The --unsafe-testing command-line option</h2>
+
+<p>The --unsafe-testing command-line option supports use of the CLI for
+internal testing of the SQLite library. It is not needed or useful for using
+the CLI as a utility for creating, modifying or querying SQLite databases.
+Its intended use is to permit scripted testing with direct schema changes,
+defensive measures defeated, and certain special-purpose, undocumented,
+test-oriented dot-commands enabled.
+</p><p>
+Misbehavior which requires use of the --unsafe-testing option to be induced
+will generally not be considered a bug for that reason alone. CLI behavior
+with --unsafe-testing is not supported or defined.
+
+</p><h2 id="the_no_utf8_and_utf8_command_line_options"><span>23.3. </span>The --no-utf8 and --utf8 command-line options</h2>
+
+<p>On the Windows platform, when the console is used for input or output,
+translation is required between character encoding available from or sent to
+the console and the CLI's internal, UTF-8 text representation. Past versions
+of the CLI accepted these options to enable or disable use of a translation
+that relied upon a Windows console feature whereby it could be made to
+produce or accept UTF-8 on modern versions of the OS.</p>
+
+<p>Present CLI versions (3.44.1 or later) do console I/O by reading or writing
+UTF-16 from/to the Windows console APIs. Because this operates correctly even
+on Windows versions going back to Window 2000, there is no longer any need
+for these options. They are still accepted, but without effect.</p>
+
+<p>In all cases, non-console text I/O is UTF-8 encoded.</p>
+
+<p>On non-Windows platforms, these options are also ignored.</p>
+
+<a name="compiling"></a>
+
+<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=ab1e42c23b">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/codeofconduct.html b/www/codeofconduct.html
new file mode 100644
index 0000000..2ad7b2b
--- /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=fa6662a963">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/codeofethics.html b/www/codeofethics.html
new file mode 100644
index 0000000..4f9938e
--- /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=85f98a3f83">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/compile.html b/www/compile.html
new file mode 100644
index 0000000..5e300e2
--- /dev/null
+++ b/www/compile.html
@@ -0,0 +1,2133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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<p><b><a href="compile.html#strict_subtype">SQLITE_STRICT_SUBTYPE=1</a></b>.
+This option causes an error to be raised if an application defined
+function that does not have the <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property
+invokes the <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface. The sqlite3_result_subtype()
+interface does not work reliably unless the function is registered
+with the SQLITE_RESULT_SUBTYPE property. This compile-time option
+is designed to bring this problem to the attention of developers
+early.
+</li<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="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 determine 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="json_max_depth"></a>
+<p><b>SQLITE_JSON_MAX_DEPTH=<i>N</i></b></p><blockquote><p>
+ This macro sets the maximum nesting depth for JSON objects and arrays.
+ The default value is 1000.
+ <p>
+ The <a href="json1.html">JSON SQL functions</a> use a
+ <a href="https://en.wikipedia.org/wiki/Recursive_descent_parser">recursive decent parser</a>.
+ This means that deeply nested JSON might require a lot of stack space to
+ parse. On systems with limited stack space, SQLite can be compiled with
+ a greatly reduced maximum JSON nesting depth to avoid the possibility of
+ a stack overflow, even from hostile inputs. A value of 10 or 20 is normally
+ sufficient even for the most complex real-world JSON.
+</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 option is a limit on the <i>total</i> amount of memory allocated.
+ See the <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> option for a limitation on the amount
+ of memory allowed in any single memory allocation.
+ <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>
+
+<p>There are also some size limits that cannot be modified using
+<a href="c3ref/limit.html">sqlite3_limit()</a>. See, for example:
+
+</p><ul>
+<li> <a href="compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> </li>
+<li> <a href="compile.html#json_max_depth">SQLITE_JSON_MAX_DEPTH</a> </li>
+<li> <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</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="compile.html#printf_precision_limit">SQLITE_PRINTF_PRECISION_LIMIT</a> </li>
+<li> <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> </li>
+<li> <a href="compile.html#yystackdepth">YYSTACKDEPTH</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 or strings, this option improves
+ read performance.
+ <p>
+ As of version 3.45.0 (2024-01-15), this option is enabled by
+ default. To disable it, using -DSQLITE_DIRECT_OVERFLOW_READ=0.
+</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 a 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.
+ See <a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a> for a limitation 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. When this option is enabled and an illegal API usage
+ is detected, the interface will typically return SQLITE_MISUSE.
+ <p>
+ The SQLITE_ENABLE_API_ARMOR option does not guarantee that all
+ illegal API usages will be detected. Even when
+ SQLITE_ENABLE_API_ARMOR is enabled, passing incorrect values
+ into the C-language APIs can cause a process crash due to segmentation
+ fault or null-pointer deference or other reasons. The
+ SQLITE_ENABLE_API_ARMOR compile-time option is intended as an aid
+ for application testing and debugging option. Applications
+ should not depend SQLITE_ENABLE_API_ARMOR for safety.
+ SQLITE_ENABLE_API_ARMORE is appropriate as a second line of
+ defense against application bugs, but it should not be the only
+ defense. If any SQLite interface returns SQLITE_MISUSE, that
+ indicates that the application is using SQLite contrary to
+ the spec and that the application contains a bug. The SQLITE_MISUSE
+ return provides the application with the opportunity to respond
+ gracefully to that bug, rather than simply crashing the process,
+ but nothing more. Applications should not make use of nor depend
+ upon SQLITE_MISUSE for routine processing.
+</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>, versions 3 and 4
+ of the full-text search engine are 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 are 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_hidden_columns"></a>
+<p><b>SQLITE_ENABLE_HIDDEN_COLUMNS</b></p><blockquote><p>
+ When this option is defined in the <a href="amalgamation.html">amalgamation</a>,
+ The <a href="vtab.html#hiddencol">hidden columns</a> feature is enabled for virtual tables.
+</p></blockquote><a name="enable_icu"></a>
+<p><b>SQLITE_ENABLE_ICU</b></p><blockquote><p>
+ This option causes the
+ <a href="https://icu.unicode.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> and
+ <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interfaces. Those
+ interfaces are normally omitted from the build
+ because they imposes a 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="https://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 superseded 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 superseded 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="strict_subtype"></a>
+<p><b>SQLITE_STRICT_SUBTYPE=1</b></p><blockquote><p>
+ This option causes <a href="appfunc.html">application-defined SQL functions</a> to raise an SQL
+ error if they invoke the <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface but
+ where not registered with the <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property.
+ This recommended option helps to identify problems in the
+ implementation of application-defined SQL functions early in the
+ development cycle.
+</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="use_seh"></a>
+<p><b>SQLITE_USE_SEH</b></p><blockquote><p>
+ This option enabled Structured Exception Handling (SEH) on Windows builds.
+ SEH is a Windows-specific technique for catching exceptions raised while
+ accessing a memory-mapped file. SEH is used to intercept errors that might
+ occur while accessing the memory-mapped <a href="walformat.html#shm">shm file</a> that are part of
+ <a href="wal.html">WAL mode</a> processing. If the operating system raised errors while SQLite
+ is trying to access the shm file, this option causes those errors to be
+ caught and dealt with by SQLite, rather than aborting the whole process.
+ <p>
+ This option only works when compiling on Windows using MSVC.
+</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 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="disable_pagecache_overflow_stats"></a>
+<p><b>SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS</b></p><blockquote><p>
+ This option disables the collection of the <a href="c3ref/status.html">sqlite3_status()</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow">SQLITE_STATUS_PAGECACHE_OVERFLOW</a> and <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a>
+ statistics. Setting this option has been shown to increase performance in
+ high concurrency multi-threaded applications.
+</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=1a49b43fd9">2024-01-09 20:59:08</a> UTC </small></i></p>
+
diff --git a/www/completion.html b/www/completion.html
new file mode 100644
index 0000000..2062b92
--- /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=887445dcd1">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/conflict.html b/www/conflict.html
new file mode 100644
index 0000000..4ea58cf
--- /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=1ad44025d4">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/consortium.html b/www/consortium.html
new file mode 100644
index 0000000..2a008ee
--- /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=ad2c94214c">2022-01-08 05:02:57</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..282a03c
--- /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 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..aec24b5
--- /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=19090139cc">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/cpu.html b/www/cpu.html
new file mode 100644
index 0000000..192cbaf
--- /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=30de04a5bf">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/crew.html b/www/crew.html
new file mode 100644
index 0000000..fa6704a
--- /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=520fe02caf">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/csv.html b/www/csv.html
new file mode 100644
index 0000000..504ffb8
--- /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=5f8e2137c1">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/custombuild.html b/www/custombuild.html
new file mode 100644
index 0000000..0bc8b62
--- /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=681be6b966">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/cves.html b/www/cves.html
new file mode 100644
index 0000000..7d1714b
--- /dev/null
+++ b/www/cves.html
@@ -0,0 +1,783 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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-2024-0232'>CVE-2024-0232</a>
+</td>
+<td valign='top'><a href="releaselog/3_43_2.html">3.43.2</a><br>(2023-10-10)</td>
+<td valign='top'>An attacker that can inject arbitrary SQL statements into an application
+ might be able to provoke a use-after-free bug in SQLite's JSON parser that
+ can (in theory) lead to an application crash and denial of service. See
+ <a href="https://sqlite.org/forum/forumpost/b25edc1d4662ebca">forum thread b25edc1d4662</a>
+ for the bug report.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2023-32697'>CVE-2023-32697</a>
+</td>
+<td valign='top'>Not a bug in SQLite</td>
+<td valign='top'>This is a bug in the SQLite JDBC library, which is a wrapper library that
+ provides access to SQLite from Java. SQLite JDBC is created and maintained
+ independently from SQLite. Despite the use of "SQLite" in the name, the
+ SQLite JDBC library is not affiliated with the SQLite project in any way.
+ The vulnerability identified by this CVE is in the separate SQLite JDBC
+ wrapper library and does not affect SQLite itself.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2023-39939'>CVE-2023-39939</a>
+</td>
+<td valign='top'>Not a bug in SQLite</td>
+<td valign='top'>This is not a bug in SQLite. This is an
+ <a href="https://en.wikipedia.org/wiki/SQL_injection">SQL injection bug</a> in an application
+ (LuxCal Web Calendar) that links against SQLite.
+ Even though this CVE is not about SQLite, "SQLite" is
+ mentioned in the description and so we list it here.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2023-39543'>CVE-2023-39543</a>
+</td>
+<td valign='top'>Not a bug in SQLite</td>
+<td valign='top'>This is not a bug in SQLite. This is an
+ <a href="https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting">XSS vulnerability</a>
+ in a separate application (LuxCal Web Calendar) that links against
+ SQLite. The bug is in the application, not in SQLite. However "SQLite" is
+ mentioned in the description and so we list it here.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2023-7104'>CVE-2023-7104</a>
+</td>
+<td valign='top'><a href="releaselog/3_43_2.html">3.43.2</a><br>(2023-10-10)</td>
+<td valign='top'>This is a bug in the <a href="sessionintro.html">session extension</a> of SQLite, not in the SQLite core.
+ This bug is only reachable by applications that recompile SQLite using the
+ <a href="compile.html#enable_session">-DSQLITE_ENABLE_SESSION</a> compile-time option and then use the Session
+ C-language APIs to process a <a href="sessionintro.html#changeset">changeset</a> that has been subtly corrupted by an
+ adversary. So this bug probably does not apply to you. See
+ <a href="https://sqlite.org/forum/forumpost/f935c4708dd528d9">forum post f935c4708dd528d9</a>
+ for additional information.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2022-46908'>CVE-2022-46908</a>
+</td>
+<td valign='top'>Not a bug in the core 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-38627'>CVE-2022-38627</a>
+</td>
+<td valign='top'>Not a bug in SQLite</td>
+<td valign='top'>This is not a bug in SQLite. This is an
+ <a href="https://en.wikipedia.org/wiki/SQL_injection">SQL injection bug</a> in a specific
+ PHP application. In other words, the bug is in the PHP application code, not
+ in SQLite. Even though this CVE is not about SQLite, "SQLite" is
+ mentioned in the publicity about the bug and so we list it here.</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 in SQLite</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 in SQLite</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 in SQLite</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 in SQLite</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'>Not a bug in the core SQLite library</td>
+<td valign='top'>This bug is not in the SQLite core library, but rather in an
+ <a href="https://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 in SQLite</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 in SQLite</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 a 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 an 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 an 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=c03e1c6ed6">2024-01-16 16:06:37</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..e4e7712
--- /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>
+
+
diff --git a/www/datatypes.html b/www/datatypes.html
new file mode 100644
index 0000000..dfd3bef
--- /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=52a7afb2f5">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/dbhash.html b/www/dbhash.html
new file mode 100644
index 0000000..7a07bfb
--- /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=e56508811f">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/dbpage.html b/www/dbpage.html
new file mode 100644
index 0000000..77916bb
--- /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=21798cdb09">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/dbstat.html b/www/dbstat.html
new file mode 100644
index 0000000..62fdccc
--- /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=47144226ef">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/debugging.html b/www/debugging.html
new file mode 100644
index 0000000..107a2e0
--- /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=ffab87c734">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/deterministic.html b/www/deterministic.html
new file mode 100644
index 0000000..885ed9f
--- /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=72aa24619c">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/different.html b/www/different.html
new file mode 100644
index 0000000..64dee1b
--- /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=95a3317bd2">2022-04-18 02:55:50</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..ab6e15c
--- /dev/null
+++ b/www/doc_backlink_crossref.html
@@ -0,0 +1,17346 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="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>--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_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="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="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="cli.html#compiling">cli.html#compiling</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="howtocompile.html#cli">howtocompile.html#cli</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="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="howtocompile.html#cli">howtocompile.html#cli</a>
+<li>-DSQLITE_ENABLE_SESSION &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</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_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_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="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_STRICT_SUBTYPE &rarr; <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.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>
+<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_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>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+<li>ACID &rarr; <a href="useovernet.html">useovernet.html</a>
+<li>acos &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>acosh &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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.html">lang.html</a>
+ <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+<li>Aggregate functions &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+<li>Aggregate Functions &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="json1.html#jgroupobjectb">json1.html#jgroupobjectb</a>
+ <a href="windowfunctions.html#aggwinfunc">windowfunctions.html#aggwinfunc</a>
+<li>aggregate JSON SQL functions &rarr; <a href="json1.html#json5">json1.html#json5</a>
+<li>aggregate SQL functions &rarr; <a href="json1.html">json1.html</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#*funcinexpr">lang_expr.html#*funcinexpr</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.html">lang.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_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_41_0">changes.html#version_3_41_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_hidden_columns">compile.html#enable_hidden_columns</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="prosupport.html">prosupport.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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_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="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_45_0">changes.html#version_3_45_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="lang.html">lang.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_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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="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="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="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/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</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/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="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</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_42_0">changes.html#version_3_42_0</a>
+ <a href="changes.html#version_3_45_0">changes.html#version_3_45_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#strict_subtype">compile.html#strict_subtype</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="news.html">news.html</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_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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>asin &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>asinh &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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>atan &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>atan2 &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>atanh &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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.html">lang.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="profile.html">profile.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_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>avg &rarr; <a href="changes.html#version_3_43_1">changes.html#version_3_43_1</a>
+ <a href="lang_aggfunc.html#aggfunclist">lang_aggfunc.html#aggfunclist</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</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="changes.html#version_3_42_0">changes.html#version_3_42_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>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.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>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="changes.html#version_3_45_1">changes.html#version_3_45_1</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="releaselog/3_45_1.html">releaselog/3_45_1.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>canonical source code &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_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="changes.html#version_3_41_0">changes.html#version_3_41_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>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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="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 &rarr; <a href="lang_expr.html#collateop">lang_expr.html#collateop</a>
+ <a href="oldnews.html">oldnews.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>ceil &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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>
+ <a href="lang_corefunc.html">lang_corefunc.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="cves.html#cvetab">cves.html#cvetab</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="lang_corefunc.html">lang_corefunc.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_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="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</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="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile</a>
+ <a href="capi3ref.html#sqlitefcntlcksmfile">capi3ref.html#sqlitefcntlcksmfile</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>
+ <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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</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_41_0">changes.html#version_3_41_0</a>
+ <a href="changes.html#version_3_41_2">changes.html#version_3_41_2</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="changes.html#version_3_43_2">changes.html#version_3_43_2</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="changes.html#version_3_44_1">changes.html#version_3_44_1</a>
+ <a href="changes.html#version_3_44_2">changes.html#version_3_44_2</a>
+ <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</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="json1.html#jblobbug">json1.html#jblobbug</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="quirks.html#dblquote">quirks.html#dblquote</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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="profile.html">profile.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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">lang_corefunc.html</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>comma option &rarr; <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.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="profile.html">profile.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_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 &rarr; <a href="lang.html">lang.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.html">lang.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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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>concat &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+<li>concat_ws &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>contentless fts4 tables &rarr; <a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a>
+<li>contentless-delete &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</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.html">lang.html</a>
+ <a href="lang_datefunc.html">lang_datefunc.html</a>
+ <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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>cos &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>cosh &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>count &rarr; <a href="arch.html">arch.html</a>
+ <a href="lang_aggfunc.html#aggfunclist">lang_aggfunc.html#aggfunclist</a>
+ <a href="lang_aggfunc.html#avg">lang_aggfunc.html#avg</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_41_0">changes.html#version_3_41_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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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.html">lang.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.html">lang.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.html">lang.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.html">lang.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="lang.html">lang.html</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/get_clientdata.html">c3ref/get_clientdata.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_get_clientdata">capi3ref.html#sqlite3_get_clientdata</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="threadsafe.html">threadsafe.html</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="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</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>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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.html">lang.html</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</a>
+<li>datetime &rarr; <a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</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_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>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="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="cli.html#miscfeatures">cli.html#miscfeatures</a>
+ <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a>
+ <a href="printf.html">printf.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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>degrees &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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.html">lang.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.html">lang.html</a>
+ <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>double-quoted string misfeature &rarr; <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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.html">lang.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>
+<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.html">lang.html</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.html">lang.html</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.html">lang.html</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>exp &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</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_explain.html">c3ref/stmt_explain.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_explain">capi3ref.html#sqlite3_stmt_explain</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="lang.html">lang.html</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#sqlitescanstatparentid">c3ref/c_scanstat_est.html#sqlitescanstatparentid</a>
+ <a href="c3ref/c_scanstat_est.html#sqlitescanstatselectid">c3ref/c_scanstat_est.html#sqlitescanstatselectid</a>
+ <a href="c3ref/stmt_explain.html">c3ref/stmt_explain.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_explain">capi3ref.html#sqlite3_stmt_explain</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#sqlitescanstatparentid">capi3ref.html#sqlitescanstatparentid</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_41_0">changes.html#version_3_41_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="profile.html">profile.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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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 &rarr; <a href="lang.html">lang.html</a>
+<li>expression affinity &rarr; <a href="lang_createtable.html#createtabas">lang_createtable.html#createtabas</a>
+<li>expression index &rarr; <a href="c3ref/c_deterministic.html#sqliteresultsubtype">c3ref/c_deterministic.html#sqliteresultsubtype</a>
+ <a href="capi3ref.html#sqliteresultsubtype">capi3ref.html#sqliteresultsubtype</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="deterministic.html">deterministic.html</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</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="c3ref/deserialize.html">c3ref/deserialize.html</a>
+ <a href="capi3ref.html#sqlite3_deserialize">capi3ref.html#sqlite3_deserialize</a>
+ <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="json1.html#jblobbug">json1.html#jblobbug</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">lang_mathfunc.html</a>
+ <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="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 &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 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="lang_corefunc.html">lang_corefunc.html</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_41_2">changes.html#version_3_41_2</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</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="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</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_41_2.html">releaselog/3_41_2.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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#xintegrity">vtab.html#xintegrity</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_44_0">changes.html#version_3_44_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_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_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="fts3.html#fts4order">fts3.html#fts4order</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 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_43_0">changes.html#version_3_43_0</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</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="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</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_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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_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#xintegrity">vtab.html#xintegrity</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 contentless-delete tables &rarr; <a href="fts5.html#the_delete_all_command">fts5.html#the_delete_all_command</a>
+ <a href="fts5.html#the_deletemerge_configuration_option">fts5.html#the_deletemerge_configuration_option</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_delete_tables">fts5.html#contentless_delete_tables</a>
+ <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_deletemerge_configuration_option">fts5.html#the_deletemerge_configuration_option</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 secure-delete command &rarr; <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</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 tokendata option &rarr; <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a>
+<li>FTS5 tokenizers &rarr; <a href="fts5.html#fts5_phrases">fts5.html#fts5_phrases</a>
+ <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-arguments &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>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>functions within expressions &rarr; <a href="lang_corefunc.html">lang_corefunc.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="changes.html#version_3_41_2">changes.html#version_3_41_2</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>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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 &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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_corefunc.html">lang_corefunc.html</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="lang_aggfunc.html#aggfunclist">lang_aggfunc.html#aggfunclist</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">lang_corefunc.html</a>
+ <a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a>
+ <a href="lang_corefunc.html#unhex">lang_corefunc.html#unhex</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="compile.html#enable_hidden_columns">compile.html#enable_hidden_columns</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#comma">printf.html#comma</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://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#tmdif">lang_datefunc.html#tmdif</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#subsec">lang_datefunc.html#subsec</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#jlndy">lang_datefunc.html#jlndy</a>
+ <a href="lang_datefunc.html#tmdif">lang_datefunc.html#tmdif</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#jlndy">lang_datefunc.html#jlndy</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#tmshf">lang_datefunc.html#tmshf</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://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://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#strftm">lang_datefunc.html#strftm</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://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.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.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.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="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.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.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="oldnews.html">oldnews.html</a>
+<li>http://www.selenic.com/mercurial/wiki/ &rarr; <a href="privatebranch.html">privatebranch.html</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#tmdif">lang_datefunc.html#tmdif</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://airsdk.harman.com &rarr; <a href="famous.html">famous.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://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting &rarr; <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>https://developers.google.com/open-source/osa#2005-google-oreilly-open-source-award-winners &rarr; <a href="oldnews.html">oldnews.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/Recursive_descent_parser &rarr; <a href="compile.html#json_max_depth">compile.html#json_max_depth</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/SQL_injection &rarr; <a href="cves.html#cvetab">cves.html#cvetab</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://forums.mcafee.com/t5/WebAdvisor/SQLite-Temporary-Files/m-p/19512 &rarr; <a href="famous.html">famous.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/chrisdavies/dbench &rarr; <a href="fasterthanfs.html">fasterthanfs.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://golangexample.com/an-unscientific-benchmark-of-sqlite-vs-the-file-system-btrfs/ &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>https://icu.unicode.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="quirks.html">quirks.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>
+<li>https://json.org &rarr; <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+ <a href="json1.html#json5">json1.html#json5</a>
+<li>https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.3 &rarr; <a href="uri.html">uri.html</a>
+<li>https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/start &rarr; <a href="uri.html">uri.html</a>
+<li>https://link.springer.com/book/10.1007/978-1-4302-3226-1 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://link.springer.com/referenceworkentry/10.1007/978-0-387-35973-1_1151 &rarr; <a href="rtree.html">rtree.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://postgresql.org &rarr; <a href="json1.html#jsonbx">json1.html#jsonbx</a>
+<li>https://spec.json5.org/ &rarr; <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+ <a href="json1.html#json5">json1.html#json5</a>
+<li>https://spec.json5.org/#introduction &rarr; <a href="json1.html#json5">json1.html#json5</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/0a539c76db3b9e29 &rarr; <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</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/2568d1f6e6 &rarr; <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.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/6f0958b03b &rarr; <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.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/7481d2a6df8980ff &rarr; <a href="lang_select.html#bareagg">lang_select.html#bareagg</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/b25edc1d4662ebca &rarr; <a href="cves.html#cvetab">cves.html#cvetab</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/forum/forumpost/f935c4708dd528d9 &rarr; <a href="cves.html#cvetab">cves.html#cvetab</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#comma">printf.html#comma</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>
+<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=f9372072a6 &rarr; <a href="printf.html#comma">printf.html#comma</a>
+<li>https://sqlite.org/src/timeline?df=major-release &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://sqlite.org/src/timeline?from=version-3.41.0&to=version-3.41.1 &rarr; <a href="changes.html#version_3_41_1">changes.html#version_3_41_1</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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/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://tools.ietf.org/html/rfc8259#section-9 &rarr; <a href="json1.html#varg">json1.html#varg</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.airbus.com/en/products-services/commercial-aircraft/passenger-aircraft/a350-family &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="download.html#srctree">download.html#srctree</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#comma">printf.html#comma</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.rfc-editor.org/rfc/rfc8259.txt &rarr; <a href="json1.html#howtocompile">json1.html#howtocompile</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/download.html &rarr; <a href="howtocompile.html#dll">howtocompile.html#dll</a>
+ <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</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/sqlar/doc/trunk/README.md &rarr; <a href="affcase1.html#smaller">affcase1.html#smaller</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="howtocompile.html#amal">howtocompile.html#amal</a>
+ <a href="privatebranch.html">privatebranch.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/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>https://www.sqlite.org/src/artifact/d29c8048beb7e &rarr; <a href="oldnews.html">oldnews.html</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/fileio.c &rarr; <a href="cli.html#fileio">cli.html#fileio</a>
+<li>https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/series.c &rarr; <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</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=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>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/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>https://www.sqlite.org/src/doc/trunk/src/date.c &rarr; <a href="cintro.html">cintro.html</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/func.c &rarr; <a href="cintro.html">cintro.html</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/os_unix.c &rarr; <a href="vfs.html">vfs.html</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_demovfs.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_journal.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_multiplex.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_onefile.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_quota.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_vfs.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://www.sqlite.org/src/doc/trunk/src/test_vfstrace.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>https://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>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/fdiff?v1=e45e3f9daf38c5be&v2=714df4e1c82f629d&sbs=1 &rarr; <a href="oldnews.html">oldnews.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="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="cli.html#dotopen">cli.html#dotopen</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>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/src/vdbe.c &rarr; <a href="opcode.html">opcode.html</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/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>https://www.sqlite.org/src/finfo?name=ext/misc/spellfix.c &rarr; <a href="spellfix1.html">spellfix1.html</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/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>https://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>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/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>https://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>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/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>https://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>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/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>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/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>https://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>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/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>https://www.sqlite.org/src/info/2d1a5c67df &rarr; <a href="oldnews.html">oldnews.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/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>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/31338dca7e &rarr; <a href="oldnews.html">oldnews.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/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>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/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>https://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>https://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>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/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>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/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>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/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>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/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>https://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>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/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>https://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>https://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>https://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>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/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>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/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>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/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>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/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>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/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>https://www.sqlite.org/src/info/98825a79ce145686392d8074032ae54863aa21a3 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://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>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/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>https://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>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/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>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/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>https://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>https://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>https://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>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/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>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/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>https://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>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/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>https://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>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/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>https://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>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/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>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/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>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/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>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/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>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/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>https://www.sqlite.org/src/info/eb5548a849 &rarr; <a href="oldnews.html">oldnews.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/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>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/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>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/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>https://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>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/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>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=5d863f876e &rarr; <a href="oldnews.html">oldnews.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/tree?ci=trunk &rarr; <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</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.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.html &rarr; <a href="faq.html#q6">faq.html#q6</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>IEEE 754 floating point values are approximations &rarr; <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</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="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>iif &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <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="lang.html">lang.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 expressions &rarr; <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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/reset.html">c3ref/reset.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_reset">capi3ref.html#sqlite3_reset</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.html">lang.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="lang_corefunc.html">lang_corefunc.html</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>invalid UTF &rarr; <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</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>jfuzz &rarr; <a href="changes.html#version_3_45_1">changes.html#version_3_45_1</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</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#json5">json1.html#json5</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 BLOB input bug &rarr; <a href="changes.html#version_3_45_1">changes.html#version_3_45_1</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.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="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="compile.html#enable_json1">compile.html#enable_json1</a>
+ <a href="compile.html#json_max_depth">compile.html#json_max_depth</a>
+ <a href="compile.html#omit_json">compile.html#omit_json</a>
+ <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a>
+ <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a>
+ <a href="testing.html#slt">testing.html#slt</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="changes.html#version_3_43_0">changes.html#version_3_43_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#*funcinexpr">lang_expr.html#*funcinexpr</a>
+ <a href="news.html">news.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_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>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>JSON5 &rarr; <a href="json1.html#jvalid">json1.html#jvalid</a>
+ <a href="news.html">news.html</a>
+<li>JSON5 extensions &rarr; <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+<li>json_array &rarr; <a href="json1.html#jarrayb">json1.html#jarrayb</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>
+<li>json_array_length &rarr; <a href="changes.html#version_3_43_1">changes.html#version_3_43_1</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>json_each &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>json_error_position &rarr; <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+<li>json_extract &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="json1.html#jexb">json1.html#jexb</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="changes.html#version_3_44_0">changes.html#version_3_44_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="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_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="lang_aggfunc.html#aggorderby">lang_aggfunc.html#aggorderby</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_insert &rarr; <a href="json1.html#jsetb">json1.html#jsetb</a>
+<li>json_object &rarr; <a href="json1.html#jarray">json1.html#jarray</a>
+ <a href="json1.html#jobjb">json1.html#jobjb</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="json1.html#jpatchb">json1.html#jpatchb</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="changes.html#version_3_43_1">changes.html#version_3_43_1</a>
+ <a href="json1.html#jpatch">json1.html#jpatch</a>
+ <a href="json1.html#jrmb">json1.html#jrmb</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>json_replace &rarr; <a href="json1.html#jsetb">json1.html#jsetb</a>
+<li>json_set &rarr; <a href="json1.html#jpatch">json1.html#jpatch</a>
+ <a href="json1.html#jsetb">json1.html#jsetb</a>
+<li>json_tree &rarr; <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>json_valid &rarr; <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+ <a href="json1.html#json5">json1.html#json5</a>
+ <a href="json1.html#jsonbx">json1.html#jsonbx</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a>
+<li>JSONB &rarr; <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="changes.html#version_3_45_1">changes.html#version_3_45_1</a>
+ <a href="json1.html#jgroupobjectb">json1.html#jgroupobjectb</a>
+ <a href="json1.html#jvalid">json1.html#jvalid</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a>
+ <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a>
+ <a href="testing.html#slt">testing.html#slt</a>
+<li>jsonb_extract &rarr; <a href="json1.html#jptr">json1.html#jptr</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>langexpr &rarr; <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</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="lang_corefunc.html">lang_corefunc.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="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_corefunc.html#octet_length">lang_corefunc.html#octet_length</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="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 &rarr; <a href="faq.html#q18">faq.html#q18</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</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 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">lang_corefunc.html</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">lang_corefunc.html</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>ln &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</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="lang_corefunc.html">lang_corefunc.html</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="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</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>log &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>log2 &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</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">lang_corefunc.html</a>
+ <a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a>
+<li>ltrim &rarr; <a href="lang_corefunc.html">lang_corefunc.html</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>math functions &rarr; <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</a>
+<li>mathfunc &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+<li>max &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+<li>max_agg &rarr; <a href="lang_aggfunc.html#aggfunclist">lang_aggfunc.html#aggfunclist</a>
+ <a href="lang_corefunc.html#max_scalar">lang_corefunc.html#max_scalar</a>
+ <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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#*funcinexpr">lang_expr.html#*funcinexpr</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="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 &rarr; <a href="lang_corefunc.html">lang_corefunc.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_aggfunc.html#aggfunclist">lang_aggfunc.html#aggfunclist</a>
+ <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>mod &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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>nullif &rarr; <a href="lang_corefunc.html">lang_corefunc.html</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>octet_length &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_corefunc.html#length">lang_corefunc.html#length</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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 clause &rarr; <a href="lang.html">lang.html</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>OUTER JOIN strength reduction &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</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_case_sensitive_like">pragma.html#pragma_case_sensitive_like</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>pow &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</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.html">lang.html</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA automatic_index &rarr; <a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a>
+ <a href="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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_44_0">changes.html#version_3_44_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="pragma.html#toc">pragma.html#toc</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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 collation_list &rarr; <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA compile_options &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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 database_list &rarr; <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA default_cache_size &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA defer_foreign_keys &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</a>
+ <a href="quirks.html">quirks.html</a>
+<li>PRAGMA freelist_count &rarr; <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA full_column_names &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA fullfsync &rarr; <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</a>
+ <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a>
+<li>PRAGMA index_list &rarr; <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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_41_0">changes.html#version_3_41_0</a>
+ <a href="changes.html#version_3_41_1">changes.html#version_3_41_1</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="changes.html#version_3_45_1">changes.html#version_3_45_1</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="invalidutf.html">invalidutf.html</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_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a>
+ <a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a>
+ <a href="pragma.html#toc">pragma.html#toc</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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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>
+ <a href="vtab.html#xintegrity">vtab.html#xintegrity</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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 max_page_count &rarr; <a href="pragma.html#toc">pragma.html#toc</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="changes.html#version_3_45_1">changes.html#version_3_45_1</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="pragma.html#toc">pragma.html#toc</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</a>
+ <a href="psow.html">psow.html</a>
+<li>PRAGMA parser_trace &rarr; <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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 query_only &rarr; <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="vtab.html#xintegrity">vtab.html#xintegrity</a>
+<li>PRAGMA read_uncommitted &rarr; <a href="isolation.html">isolation.html</a>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+<li>PRAGMA reverse_unordered_selects &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder">c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder</a>
+ <a href="capi3ref.html#sqlitedbconfigreversescanorder">capi3ref.html#sqlitedbconfigreversescanorder</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_21_0">changes.html#version_3_21_0</a>
+ <a href="compile.html#reverse_unordered_selects">compile.html#reverse_unordered_selects</a>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</a>
+<li>PRAGMA shrink_memory &rarr; <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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 user_version &rarr; <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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>
+ <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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_autocheckpoint &rarr; <a href="pragma.html#toc">pragma.html#toc</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="pragma.html#toc">pragma.html#toc</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="changes.html#version_3_44_0">changes.html#version_3_44_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="pragma.html#toc">pragma.html#toc</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="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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>precompiled amalgamation tarballs &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</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_explain.html">c3ref/stmt_explain.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_explain">capi3ref.html#sqlite3_stmt_explain</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="threadsafe.html">threadsafe.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="lang_corefunc.html">lang_corefunc.html</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="changes.html#version_3_42_0">changes.html#version_3_42_0</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>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.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 &rarr; <a href="lang_corefunc.html">lang_corefunc.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#fpapprox">floatingpoint.html#fpapprox</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>radians &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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_corefunc.html">lang_corefunc.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>
+ <a href="lang_corefunc.html">lang_corefunc.html</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="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="changes.html#version_3_41_2">changes.html#version_3_41_2</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>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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#base85">cli.html#base85</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.html">lang.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</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="lang.html">lang.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="lang_corefunc.html">lang_corefunc.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="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</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="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.html">lang.html</a>
+ <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.html">lang.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="lang_corefunc.html">lang_corefunc.html</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="aff_short.html">aff_short.html</a>
+ <a href="amalgamation.html">amalgamation.html</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</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_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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#xintegrity">vtab.html#xintegrity</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</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 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>rtrim &rarr; <a href="lang_corefunc.html">lang_corefunc.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>safe command-line option &rarr; <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_40_1.html">releaselog/3_40_1.html</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.html">lang.html</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_FKNOACTION">session.html#SQLITE_CHANGESETAPPLY_FKNOACTION</a>
+ <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.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>scalar functions &rarr; <a href="lang_aggfunc.html#aggorderby">lang_aggfunc.html#aggorderby</a>
+ <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+ <a href="windowfunctions.html">windowfunctions.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.html">lang.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="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="compile.html#enable_session">compile.html#enable_session</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_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_secure_delete">pragma.html#pragma_secure_delete</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="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="compile.html#use_seh">compile.html#use_seh</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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>sign &rarr; <a href="lang_corefunc.html">lang_corefunc.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_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</a>
+<li>simple-select-stmt &rarr; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+<li>sin &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>sinh &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</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 &rarr; <a href="lang_corefunc.html">lang_corefunc.html</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/objlist.html">c3ref/objlist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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_api_routines &rarr; <a href="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>sqlite3_auto_extension &rarr; <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a>
+ <a href="capi3ref.html">capi3ref.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="loadext.html#statext">loadext.html#statext</a>
+ <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a>
+<li>sqlite3_autovacuum_pages &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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>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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>sqlite3_backup_remaining &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>sqlite3_backup_step &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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_int64 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+<li>sqlite3_bind_null &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.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_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#omit_utf16">compile.html#omit_utf16</a>
+<li>sqlite3_bind_text64 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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_blob &rarr; <a href="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="session.html">session.html</a>
+ <a href="session/objlist.html">session/objlist.html</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <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_changeset_iter &rarr; <a href="session.html">session.html</a>
+ <a href="session/objlist.html">session/objlist.html</a>
+<li>sqlite3_clear_bindings &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html">capi3ref.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_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_database_name16 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_decltype &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#omit_decltype">compile.html#omit_decltype</a>
+<li>sqlite3_column_decltype16 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#omit_decltype">compile.html#omit_decltype</a>
+<li>sqlite3_column_double &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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_name16 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+<li>sqlite3_column_origin_name &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_origin_name16 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_table_name &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_table_name16 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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">capi3ref.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_42_0">changes.html#version_3_42_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#statext">loadext.html#statext</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_42_0.html">releaselog/3_42_0.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/objlist.html">c3ref/objlist.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="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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+<li>sqlite3_create_filename &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/user_data.html">c3ref/user_data.html</a>
+ <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a>
+ <a href="capi3ref.html">capi3ref.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_result_subtype">capi3ref.html#sqlite3_result_subtype</a>
+ <a href="capi3ref.html#sqlite3_user_data">capi3ref.html#sqlite3_user_data</a>
+ <a href="capi3ref.html#sqlite3_value_subtype">capi3ref.html#sqlite3_value_subtype</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#*funcinexpr">lang_expr.html#*funcinexpr</a>
+ <a href="news.html">news.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_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/funclist.html">c3ref/funclist.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="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>
+<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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_DETERMINISTIC">capi3ref.html#SQLITE_DETERMINISTIC</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/module.html">c3ref/module.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/module.html">c3ref/module.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_column_count">capi3ref.html#sqlite3_column_count</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/objlist.html">c3ref/objlist.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_db_cacheflush &rarr; <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_DBCONFIG_DEFENSIVE">capi3ref.html#SQLITE_DBCONFIG_DEFENSIVE</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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_42_0">changes.html#version_3_42_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_42_0.html">releaselog/3_42_0.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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>
+<li>sqlite3_db_readonly &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/release_memory.html">c3ref/release_memory.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="capi3ref.html#SQLITE_DBSTATUS options">capi3ref.html#SQLITE_DBSTATUS options</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/serialize.html">c3ref/serialize.html</a>
+ <a href="capi3ref.html">capi3ref.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="changes.html#version_3_41_0">changes.html#version_3_41_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>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>sqlite3_drop_modules &rarr; <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="invalidutf.html">invalidutf.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="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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_41_2">changes.html#version_3_41_2</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_41_2.html">releaselog/3_41_2.html</a>
+<li>sqlite3_errstr &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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>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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_ABORT_ROLLBACK">capi3ref.html#SQLITE_ABORT_ROLLBACK</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/objlist.html">c3ref/objlist.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">capi3ref.html</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE">capi3ref.html#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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_41_0">changes.html#version_3_41_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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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">capi3ref.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>
+ <a href="vtab.html#xintegrity">vtab.html#xintegrity</a>
+<li>sqlite3_free_filename &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_free_table &rarr; <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+<li>sqlite3_get_auxdata &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/get_clientdata.html">c3ref/get_clientdata.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="capi3ref.html#sqlite3_get_clientdata">capi3ref.html#sqlite3_get_clientdata</a>
+<li>sqlite3_get_clientdata &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_get_auxdata">capi3ref.html#sqlite3_get_auxdata</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/objlist.html">c3ref/objlist.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="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/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>
+ <a href="c3ref/complete.html">c3ref/complete.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.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">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN">capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN</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_42_0">changes.html#version_3_42_0</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#statext">loadext.html#statext</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="changes.html#version_3_41_0">changes.html#version_3_41_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="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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/objlist.html">c3ref/objlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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_is_interrupted &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_interrupt">capi3ref.html#sqlite3_interrupt</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>sqlite3_keyword_check &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html">capi3ref.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">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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">capi3ref.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/funclist.html">c3ref/funclist.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">capi3ref.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>
+ <a href="vtab.html#xintegrity">vtab.html#xintegrity</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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vtab.html">c3ref/vtab.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>sqlite3_mutex_held &rarr; <a href="c3ref/funclist.html">c3ref/funclist.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">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/funclist.html">c3ref/funclist.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">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.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">capi3ref.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/funclist.html">c3ref/funclist.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">capi3ref.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_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/funclist.html">c3ref/funclist.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">capi3ref.html</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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_overload_function &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+<li>sqlite3_pcache &rarr; <a href="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="c3ref/pcache_methods2.html#thexdestroypagecachemethod">c3ref/pcache_methods2.html#thexdestroypagecachemethod</a>
+ <a href="capi3ref.html">capi3ref.html</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/objlist.html">c3ref/objlist.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="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_pcache_page &rarr; <a href="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>sqlite3_prepare &rarr; <a href="c3ref/funclist.html">c3ref/funclist.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/stmt_explain.html">c3ref/stmt_explain.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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_stmt_explain">capi3ref.html#sqlite3_stmt_explain</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_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="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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/funclist.html">c3ref/funclist.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="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.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="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.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="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_PREPARE_NORMALIZE">capi3ref.html#SQLITE_PREPARE_NORMALIZE</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.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/stmt_explain.html">c3ref/stmt_explain.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="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_stmt_explain">capi3ref.html#sqlite3_stmt_explain</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/funclist.html">c3ref/funclist.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/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/stmt_explain.html">c3ref/stmt_explain.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_PREPARE_NORMALIZE">capi3ref.html#SQLITE_PREPARE_NORMALIZE</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="capi3ref.html#sqlite3_stmt_explain">capi3ref.html#sqlite3_stmt_explain</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_count &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_depth &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_hook &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_old &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_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="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+ <a href="security.html">security.html</a>
+<li>sqlite3_randomness &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/funclist.html">c3ref/funclist.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">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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_rebaser &rarr; <a href="session.html">session.html</a>
+ <a href="session/objlist.html">session/objlist.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.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="c3ref/stmt_explain.html">c3ref/stmt_explain.html</a>
+ <a href="capi3ref.html">capi3ref.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#sqlite3_stmt_explain">capi3ref.html#sqlite3_stmt_explain</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_STATIC">capi3ref.html#SQLITE_STATIC</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_blob64 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</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="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_result_error16 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+<li>sqlite3_result_error_code &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <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_error_nomem &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+<li>sqlite3_result_error_toobig &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+<li>sqlite3_result_int &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="capi3ref.html">capi3ref.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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</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="appfunc.html">appfunc.html</a>
+ <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/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</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="appfunc.html">appfunc.html</a>
+ <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/c_deterministic.html#sqliteresultsubtype">c3ref/c_deterministic.html#sqliteresultsubtype</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="capi3ref.html#sqlite3_value_subtype">capi3ref.html#sqlite3_value_subtype</a>
+ <a href="capi3ref.html#sqliteresultsubtype">capi3ref.html#sqliteresultsubtype</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="compile.html#strict_subtype">compile.html#strict_subtype</a>
+ <a href="news.html">news.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_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text16 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text16be &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text16le &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text64 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <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="appfunc.html">appfunc.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.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_value">capi3ref.html#sqlite3_value</a>
+<li>sqlite3_result_zeroblob &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</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_rollback_hook &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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_session &rarr; <a href="session.html">session.html</a>
+ <a href="session/objlist.html">session/objlist.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.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">capi3ref.html#sqlite3</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="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/get_clientdata.html">c3ref/get_clientdata.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="capi3ref.html#sqlite3_get_clientdata">capi3ref.html#sqlite3_get_clientdata</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_clientdata &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_get_auxdata">capi3ref.html#sqlite3_get_auxdata</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+<li>sqlite3_set_last_insert_rowid &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.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">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN">capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+<li>sqlite3_snapshot &rarr; <a href="c3ref/objlist.html">c3ref/objlist.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">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <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">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <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="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/funclist.html">c3ref/funclist.html</a>
+ <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">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html">capi3ref.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#comma">printf.html#comma</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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_sql &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>
+ <a href="capi3ref.html">capi3ref.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#disable_pagecache_overflow_stats">compile.html#disable_pagecache_overflow_stats</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/funclist.html">c3ref/funclist.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="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#tmdif">lang_datefunc.html#tmdif</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/objlist.html">c3ref/objlist.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">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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_explain &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>sqlite3_stmt_isexplain &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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="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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_SCANSTAT_EST">capi3ref.html#SQLITE_SCANSTAT_EST</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus">capi3ref.html#sqlite3_stmt_scanstatus</a>
+<li>sqlite3_stmt_scanstatus_v2 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="compile.html#enable_stmt_scanstatus">compile.html#enable_stmt_scanstatus</a>
+ <a href="profile.html">profile.html</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</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/objlist.html">c3ref/objlist.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="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <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="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_appendall &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <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="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_appendchar &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <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="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_appendf &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <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="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/funclist.html">c3ref/funclist.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_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html">capi3ref.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_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/funclist.html">c3ref/funclist.html</a>
+ <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">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/str.html">c3ref/str.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="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</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/funclist.html">c3ref/funclist.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_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <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="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_value &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/str.html">c3ref/str.html</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+<li>sqlite3_str_vappendf &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <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="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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">capi3ref.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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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>sqlite3_table_column_metadata &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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>sqlite3_temp_directory &rarr; <a href="c3ref/objlist.html">c3ref/objlist.html</a>
+ <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">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_TRACE">capi3ref.html#SQLITE_TRACE</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#SQLITE_TXN_NONE">capi3ref.html#SQLITE_TXN_NONE</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.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/objlist.html">c3ref/objlist.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/value_encoding.html">c3ref/value_encoding.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="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_value_encoding">capi3ref.html#sqlite3_value_encoding</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/funclist.html">c3ref/funclist.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">capi3ref.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/funclist.html">c3ref/funclist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_value_encoding">capi3ref.html#sqlite3_value_encoding</a>
+<li>sqlite3_value_bytes16 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="capi3ref.html#sqlite3_value_encoding">capi3ref.html#sqlite3_value_encoding</a>
+<li>sqlite3_value_double &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a>
+<li>sqlite3_value_dup &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</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_value_free &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</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_frombind &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.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_value_int64 &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_value_nochange &rarr; <a href="c3ref/funclist.html">c3ref/funclist.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="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</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_numeric_type &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</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/funclist.html">c3ref/funclist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.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="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_value_encoding">capi3ref.html#sqlite3_value_encoding</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/funclist.html">c3ref/funclist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</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#sqlite3_value_encoding">capi3ref.html#sqlite3_value_encoding</a>
+<li>sqlite3_value_text16be &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="c3ref/value_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="capi3ref.html#sqlite3_value_encoding">capi3ref.html#sqlite3_value_encoding</a>
+<li>sqlite3_value_text16le &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="c3ref/value_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="capi3ref.html#sqlite3_value_encoding">capi3ref.html#sqlite3_value_encoding</a>
+<li>sqlite3_value_type &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_version &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/objlist.html">c3ref/objlist.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">capi3ref.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#tmdif">lang_datefunc.html#tmdif</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="loadext.html#statext">loadext.html#statext</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+<li>sqlite3_vmprintf &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="printf.html">printf.html</a>
+<li>sqlite3_vsnprintf &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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>
+ <a href="vtab.html#xintegrity">vtab.html#xintegrity</a>
+<li>sqlite3_vtab_collation &rarr; <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas">c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="capi3ref.html#sqlitevtabusesallschemas">capi3ref.html#sqlitevtabusesallschemas</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="c3ref/objlist.html">c3ref/objlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="capi3ref.html">capi3ref.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="changes.html#version_3_41_0">changes.html#version_3_41_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_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>sqlite3_vtab_in_first &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>sqlite3_vtab_in_next &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>sqlite3_vtab_nochange &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="capi3ref.html#SQLITE_CHECKPOINT_FULL">capi3ref.html#SQLITE_CHECKPOINT_FULL</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.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">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html">capi3ref.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/funclist.html">c3ref/funclist.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html">capi3ref.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">session.html</a>
+ <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changegroup_add_strm &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changegroup_delete &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changegroup_new &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changegroup_output &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changegroup_schema &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.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">session.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/funclist.html">session/funclist.html</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_FKNOACTION">session.html#SQLITE_CHANGESETAPPLY_FKNOACTION</a>
+ <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.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_FKNOACTION">session.html#SQLITE_CHANGESETAPPLY_FKNOACTION</a>
+ <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.html</a>
+<li>sqlite3changeset_concat &rarr; <a href="session.html">session.html</a>
+ <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/funclist.html">session/funclist.html</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_conflict &rarr; <a href="session.html">session.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>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changeset_finalize &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_fk_conflicts &rarr; <a href="session.html">session.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>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changeset_invert &rarr; <a href="session.html">session.html</a>
+ <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/funclist.html">session/funclist.html</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">session.html</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <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/changeset_iter.html">session/changeset_iter.html</a>
+ <a href="session/funclist.html">session/funclist.html</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">session.html</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</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.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+ <a href="session/funclist.html">session/funclist.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>
+ <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">session.html</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+ <a href="session/funclist.html">session/funclist.html</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">session.html</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_pk &rarr; <a href="session.html">session.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>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3changeset_start &rarr; <a href="session.html">session.html</a>
+ <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/funclist.html">session/funclist.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>sqlite3changeset_upgrade &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3rebaser_configure &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3rebaser_create &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3rebaser_delete &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3rebaser_rebase &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3session_attach &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session.html#sqlite3session_diff">session.html#sqlite3session_diff</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</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">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <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/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</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_changeset_size &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#SQLITE_SESSION_OBJCONFIG_ROWID">session.html#SQLITE_SESSION_OBJCONFIG_ROWID</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</a>
+<li>sqlite3session_config &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3session_create &rarr; <a href="session.html">session.html</a>
+ <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/funclist.html">session/funclist.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#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_delete &rarr; <a href="session.html">session.html</a>
+ <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/funclist.html">session/funclist.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#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_diff &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</a>
+<li>sqlite3session_enable &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session.html#sqlite3session_changeset">session.html#sqlite3session_changeset</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</a>
+ <a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a>
+<li>sqlite3session_indirect &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>sqlite3session_isempty &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3session_memory_used &rarr; <a href="session.html">session.html</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+<li>sqlite3session_object_config &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</a>
+<li>sqlite3session_patchset &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_table_filter &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session/funclist.html">session/funclist.html</a>
+ <a href="session/session.html">session/session.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_ABORT_ROLLBACK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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">rescode.html#abort</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_ACCESS_EXISTS &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html">capi3ref.html</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_ALTER_TABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_ANALYZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_ANY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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_ATTACH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_AUTH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#auth_user">rescode.html#auth_user</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_AUTH_USER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_BLOB &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.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">capi3ref.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="rescode.html#pve">rescode.html#pve</a>
+ <a href="wal.html#busy">wal.html#busy</a>
+<li>SQLITE_BUSY_RECOVERY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_BUSY_SNAPSHOT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_BUSY_TIMEOUT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CALLBACK &rarr; <a href="compile.html#tclapi">compile.html#tclapi</a>
+<li>SQLITE_CANTOPEN &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/deserialize.html">c3ref/deserialize.html</a>
+ <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">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_deserialize">capi3ref.html#sqlite3_deserialize</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>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_CANTOPEN_CONVPATH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+ <a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a>
+<li>SQLITE_CANTOPEN_DIRTYWAL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CANTOPEN_FULLPATH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CANTOPEN_ISDIR &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CANTOPEN_NOTEMPDIR &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CANTOPEN_SYMLINK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</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">session.html</a>
+ <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/constlist.html">session/constlist.html</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESET_CONFLICT &rarr; <a href="session.html">session.html</a>
+ <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/constlist.html">session/constlist.html</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_FKNOACTION &rarr; <a href="session.html">session.html</a>
+ <a href="session/constlist.html">session/constlist.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">session.html</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/constlist.html">session/constlist.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+<li>SQLITE_CHECKPOINT_FULL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CHECKPOINT_PASSIVE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="wal.html#bigwal">wal.html#bigwal</a>
+<li>SQLITE_CHECKPOINT_TRUNCATE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+ <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="lang_corefunc.html">lang_corefunc.html</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="lang_corefunc.html">lang_corefunc.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="compile.html#allow_covering_index_scan">compile.html#allow_covering_index_scan</a>
+<li>SQLITE_CONFIG_GETMALLOC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>SQLITE_CONFIG_GETPCACHE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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#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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_log">capi3ref.html#sqlite3_log</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</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_42_0.html">releaselog/3_42_0.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/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_CONFIG_MEMSTATUS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <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">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/constlist.html">c3ref/constlist.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="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/constlist.html">c3ref/constlist.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">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_PCACHE2 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</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">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqliteconfigpagecache">capi3ref.html#sqliteconfigpagecache</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.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_PMASZ &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.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="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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a>
+<li>SQLITE_CONFIG_SQLLOG &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="compile.html#enable_sqllog">compile.html#enable_sqllog</a>
+<li>SQLITE_CONFIG_STMTJRNL_SPILL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="capi3ref.html">capi3ref.html</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_CONFIG_WIN32_HEAPSIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="rescode.html#pve">rescode.html#pve</a>
+ <a href="vtab.html#obc">vtab.html#obc</a>
+<li>SQLITE_CONSTRAINT_CHECK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_COMMITHOOK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_DATATYPE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_FOREIGNKEY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_FUNCTION &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_NOTNULL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_PINNED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_PRIMARYKEY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_ROWID &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_TRIGGER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_UNIQUE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CONSTRAINT_VTAB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_COPY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+<li>SQLITE_CORRUPT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html">capi3ref.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="rescode.html#pve">rescode.html#pve</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_INDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CORRUPT_SEQUENCE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CORRUPT_VTAB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="fts5.html#the_deletemerge_configuration_option">fts5.html#the_deletemerge_configuration_option</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_CREATE_INDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_TABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_TEMP_INDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_TEMP_TABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_TEMP_TRIGGER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_TEMP_VIEW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_TRIGGER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_VIEW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_CREATE_VTABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DBCONFIG_DEFENSIVE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="changes.html#version_3_44_0">changes.html#version_3_44_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="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="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_FKEY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="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/constlist.html">c3ref/constlist.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="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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/db_config.html">c3ref/db_config.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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_MAX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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_DBCONFIG_REVERSE_SCANORDER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+<li>SQLITE_DBCONFIG_STMT_SCANSTATUS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a>
+<li>SQLITE_DBCONFIG_TRIGGER_EQP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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>SQLITE_DBSTATUS_CACHE_MISS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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>SQLITE_DBSTATUS_CACHE_SPILL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+<li>SQLITE_DBSTATUS_CACHE_USED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>SQLITE_DBSTATUS_CACHE_WRITE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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>SQLITE_DBSTATUS_DEFERRED_FKS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+<li>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+<li>SQLITE_DBSTATUS_LOOKASIDE_USED &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+<li>SQLITE_DBSTATUS_MAX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DBSTATUS_SCHEMA_USED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_DBSTATUS_STMT_USED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_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/constlist.html">c3ref/constlist.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="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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+<li>SQLITE_DESERIALIZE_FREEONCLOSE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DESERIALIZE_READONLY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_DESERIALIZE_RESIZEABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DETACH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DETERMINISTIC &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html">capi3ref.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_45_0">changes.html#version_3_45_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_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.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">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</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>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_DQS &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_DROP_INDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_TABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_TEMP_INDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_TEMP_TABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_TEMP_TRIGGER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_TEMP_VIEW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_TRIGGER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_VIEW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_DROP_VTABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_EMPTY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</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/get_auxdata.html">c3ref/get_auxdata.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</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="changes.html#version_3_41_2">changes.html#version_3_41_2</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_41_2.html">releaselog/3_41_2.html</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_41_0">changes.html#version_3_41_0</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="profile.html">profile.html</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.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_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/constlist.html">c3ref/constlist.html</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/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html">capi3ref.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_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</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="rescode.html#pve">rescode.html#pve</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>SQLITE_ERROR_MISSING_COLLSEQ &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_ERROR_RETRY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#error_missing_collseq">rescode.html#error_missing_collseq</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_ERROR_SNAPSHOT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlitefcntlckptstart">capi3ref.html#sqlitefcntlckptstart</a>
+<li>SQLITE_FCNTL_CKSM_FILE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlitefcntlcksmfile">capi3ref.html#sqlitefcntlcksmfile</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</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">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="capi3ref.html">capi3ref.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_GET_LOCKPROXYFILE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="capi3ref.html">capi3ref.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_LAST_ERRNO &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_PDB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlitefcntlrbu">capi3ref.html#sqlitefcntlrbu</a>
+<li>SQLITE_FCNTL_RESERVE_BYTES &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_FCNTL_RESET_CACHE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlitefcntlresetcache">capi3ref.html#sqlitefcntlresetcache</a>
+ <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_SET_LOCKPROXYFILE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlitefcntlsync">capi3ref.html#sqlitefcntlsync</a>
+<li>SQLITE_FCNTL_SYNC_OMITTED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+<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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.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_FORMAT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</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="compile.html#yystackdepth">compile.html#yystackdepth</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="capi3ref.html">capi3ref.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="rescode.html#pve">rescode.html#pve</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+<li>SQLITE_FUNCTION &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.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="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/constlist.html">c3ref/constlist.html</a>
+ <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">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>SQLITE_INDEX_CONSTRAINT_GE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_GLOB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_GT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_IS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_ISNOT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_ISNOTNULL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html">capi3ref.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_LE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_LIKE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_LIMIT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>SQLITE_INDEX_CONSTRAINT_LT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_MATCH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_NE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_OFFSET &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>SQLITE_INDEX_CONSTRAINT_REGEXP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_INDEX_SCAN_UNIQUE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <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="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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.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_INTERNAL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_INTERRUPT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <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">capi3ref.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>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_IOCAP_ATOMIC &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_BATCH_ATOMIC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_IMMUTABLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <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">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="rescode.html#pve">rescode.html#pve</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_AUTH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_BEGIN_ATOMIC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_BLOCKED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_CHECKRESERVEDLOCK &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_CLOSE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_COMMIT_ATOMIC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_CONVPATH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_CORRUPTFS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_DATA &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_DELETE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_DELETE_NOENT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_DIR_CLOSE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_DIR_FSYNC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_FSTAT &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_FSYNC &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_GETTEMPPATH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_IN_PAGE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_IOERR_LOCK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_MMAP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_NOMEM &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_RDLOCK &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_READ &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_ROLLBACK_ATOMIC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_SEEK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_SHMLOCK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_SHMMAP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_SHMOPEN &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_SHMSIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_SHORT_READ &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_TRUNCATE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_UNLOCK &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_VNODE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_IOERR_WRITE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_JSON_MAX_DEPTH &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="limits.html#max_expr_depth">limits.html#max_expr_depth</a>
+<li>SQLITE_LIMIT_FUNCTION_ARG &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</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">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a>
+<li>SQLITE_LIMIT_SQL_LENGTH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>SQLITE_LIMIT_WORKER_THREADS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="capi3ref.html">capi3ref.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="rescode.html#pve">rescode.html#pve</a>
+ <a href="rtree.html#readwrite">rtree.html#readwrite</a>
+<li>SQLITE_LOCKED_SHAREDCACHE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_LOCKED_VTAB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</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="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</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>
+<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="compile.html#max_allocation_size">compile.html#max_allocation_size</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</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="compile.html#yystackdepth">compile.html#yystackdepth</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="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</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_MISMATCH &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html">capi3ref.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="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="rescode.html#pve">rescode.html#pve</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>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_RECURSIVE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_APP1 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_APP2 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_APP3 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_LRU &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_LRU2 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_MAIN &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_OPEN &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_PMEM &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_PRNG &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_VFS1 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>SQLITE_MUTEX_STATIC_VFS2 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_MUTEX_STATIC_VFS3 &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_NOLFS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</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/constlist.html">c3ref/constlist.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/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">capi3ref.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="rescode.html#pve">rescode.html#pve</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_NOTADB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</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/constlist.html">c3ref/constlist.html</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">capi3ref.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="rescode.html#pve">rescode.html#pve</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>SQLITE_NOTICE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_NOTICE_RBU &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_NOTICE_RECOVER_ROLLBACK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_NOTICE_RECOVER_WAL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_NULL &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.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="lang_corefunc.html">lang_corefunc.html</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/constlist.html">c3ref/constlist.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">capi3ref.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="rescode.html#pve">rescode.html#pve</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_OK_SYMLINK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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_case_sensitive_like">pragma.html#pragma_case_sensitive_like</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#statext">loadext.html#statext</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_AUTOPROXY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_OPEN_CREATE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.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">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_EXRESCODE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.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">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+<li>SQLITE_OPEN_NOFOLLOW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html#opennofollow">c3ref/open.html#opennofollow</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.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">capi3ref.html</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/constlist.html">c3ref/constlist.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">capi3ref.html</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/constlist.html">c3ref/constlist.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="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</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">capi3ref.html</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/constlist.html">c3ref/constlist.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">capi3ref.html</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_PERM &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</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_PRAGMA &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_PREPARE_NO_VTAB &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_PREPARE_NORMALIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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_PREPARE_PERSISTENT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html">capi3ref.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_PRINTF_PRECISION_LIMIT &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+<li>SQLITE_PROTOCOL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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>
+ <a href="rescode.html#pve">rescode.html#pve</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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="rescode.html#pve">rescode.html#pve</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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#pve">rescode.html#pve</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_CANTINIT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_READONLY_CANTLOCK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_READONLY_DBMOVED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_READONLY_DIRECTORY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_READONLY_RECOVERY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_READONLY_ROLLBACK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_RECURSIVE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_REINDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_REPLACE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+<li>SQLITE_RESULT_SUBTYPE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_result_subtype">capi3ref.html#sqlite3_result_subtype</a>
+ <a href="changes.html#version_3_45_0">changes.html#version_3_45_0</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="compile.html#strict_subtype">compile.html#strict_subtype</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.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">capi3ref.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_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="rescode.html#pve">rescode.html#pve</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_SAVEPOINT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_COMPLEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_EST &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_EXPLAIN &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_NAME &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_NCYCLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_NLOOP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_NVISIT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_PARENTID &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCANSTAT_SELECTID &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SCHEMA &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>
+ <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>
+ <a href="rescode.html#pve">rescode.html#pve</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_SELECT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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_SERIALIZE_NOCOPY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SESSION_CONFIG_STRMSIZE &rarr; <a href="session.html">session.html</a>
+ <a href="session/constlist.html">session/constlist.html</a>
+<li>SQLITE_SESSION_OBJCONFIG_ROWID &rarr; <a href="session.html">session.html</a>
+ <a href="session.html#sqlite3session_object_config">session.html#sqlite3session_object_config</a>
+ <a href="session/constlist.html">session/constlist.html</a>
+ <a href="session/sqlite3session_object_config.html">session/sqlite3session_object_config.html</a>
+<li>SQLITE_SESSION_OBJCONFIG_SIZE &rarr; <a href="session.html#sqlite3session_object_config">session.html#sqlite3session_object_config</a>
+ <a href="session/sqlite3session_object_config.html">session/sqlite3session_object_config.html</a>
+<li>SQLITE_SHM_EXCLUSIVE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SHM_LOCK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SHM_NLOCK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SHM_SHARED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_SHM_UNLOCK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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/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="lang_corefunc.html">lang_corefunc.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_6_18.html">releaselog/3_6_18.html</a>
+<li>SQLITE_SOURCE_ID &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html">capi3ref.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_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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="carray.html#onearg">carray.html#onearg</a>
+<li>SQLITE_STATUS_MALLOC_COUNT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_STATUS_MALLOC_SIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="memstat.html">memstat.html</a>
+<li>SQLITE_STATUS_MEMORY_USED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="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_OVERFLOW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="compile.html#disable_pagecache_overflow_stats">compile.html#disable_pagecache_overflow_stats</a>
+<li>SQLITE_STATUS_PAGECACHE_SIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="compile.html#disable_pagecache_overflow_stats">compile.html#disable_pagecache_overflow_stats</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+<li>SQLITE_STATUS_PAGECACHE_USED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_STATUS_PARSER_STACK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="compile.html#yytrackmaxstackdepth">compile.html#yytrackmaxstackdepth</a>
+<li>SQLITE_STATUS_SCRATCH_OVERFLOW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_STATUS_SCRATCH_SIZE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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_SCRATCH_USED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_FILTER_HIT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_STMTSTATUS_FILTER_MISS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_STMTSTATUS_FULLSCAN_STEP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_MEMUSED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_REPREPARE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_RUN &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_SORT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_VM_STEP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STRICT_SUBTYPE &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_SUBTYPE &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_value_subtype">capi3ref.html#sqlite3_value_subtype</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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html">capi3ref.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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="testing.html#defcode">testing.html#defcode</a>
+<li>SQLITE_TESTCTRL_ASSERT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_BITVEC_TEST &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_BYTEORDER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>
+<li>SQLITE_TESTCTRL_EXPLAIN_STMT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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_EXTRA_SCHEMA_CHECKS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_FAULT_INSTALL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_FIRST &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_FK_NO_ACTION &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_IMPOSTER &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_INTERNAL_FUNCTIONS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_ISINIT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_ISKEYWORD &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_JSON_SELFCHECK &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_LAST &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_LOCALTIME_FAULT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_LOGEST &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_NEVER_CORRUPT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_OPTIMIZATIONS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="testing.html#disopttest">testing.html#disopttest</a>
+<li>SQLITE_TESTCTRL_PARSER_COVERAGE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_PENDING_BYTE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_PRNG_RESET &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_PRNG_RESTORE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_PRNG_SAVE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_PRNG_SEED &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_RESERVE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_RESULT_INTREAL &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_SCRATCHMALLOC &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_SEEK_COUNT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_SORTER_MMAP &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_TRACEFLAGS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_TUNE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_USELONGDOUBLE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TESTCTRL_VDBE_COVERAGE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_TRACE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_trace_v2">capi3ref.html#sqlite3_trace_v2</a>
+<li>SQLITE_TRACE_CLOSE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TRACE_PROFILE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TRACE_ROW &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>SQLITE_TRACE_STMT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TRANSACTION &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TRANSIENT &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="carray.html#onearg">carray.html#onearg</a>
+<li>SQLITE_TXN_NONE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TXN_READ &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_TXN_WRITE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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/constlist.html">c3ref/constlist.html</a>
+ <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="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_SEH &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</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/constlist.html">c3ref/constlist.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="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="capi3ref.html">capi3ref.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/constlist.html">c3ref/constlist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.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_encoding">capi3ref.html#sqlite3_value_encoding</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/constlist.html">c3ref/constlist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.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_encoding">capi3ref.html#sqlite3_value_encoding</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/constlist.html">c3ref/constlist.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_encoding.html">c3ref/value_encoding.html</a>
+ <a href="capi3ref.html">capi3ref.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_encoding">capi3ref.html#sqlite3_value_encoding</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_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_createindex.html#indexexpr">lang_createindex.html#indexexpr</a>
+<li>SQLITE_VERSION &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html">capi3ref.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_NUMBER &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html">capi3ref.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_CONSTRAINT_SUPPORT &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_VTAB_DIRECTONLY &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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>
+ <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="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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="changes.html#version_3_44_0">changes.html#version_3_44_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="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+<li>SQLITE_VTAB_USES_ALL_SCHEMAS &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>SQLITE_WARNING &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>SQLITE_WARNING_AUTOINDEX &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <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>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+<li>SQLITE_WIN32_DATA_DIRECTORY_TYPE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.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_WIN32_TEMP_DIRECTORY_TYPE &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="capi3ref.html">capi3ref.html</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>sqrt &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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>strftime &rarr; <a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</a>
+<li>strftime SQL function &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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>string_agg &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="lang_aggfunc.html#aggorderby">lang_aggfunc.html#aggorderby</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+<li>subprograms &rarr; <a href="opcode.html">opcode.html</a>
+<li>Subqueries &rarr; <a href="fullsql.html">fullsql.html</a>
+<li>subsec modifier &rarr; <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+<li>subsecond modifier &rarr; <a href="changes.html#version_3_42_0">changes.html#version_3_42_0</a>
+ <a href="releaselog/3_42_0.html">releaselog/3_42_0.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="lang_corefunc.html">lang_corefunc.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="changes.html#version_3_43_1">changes.html#version_3_43_1</a>
+ <a href="lang_select.html#bareagg">lang_select.html#bareagg</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>sum aggregate function &rarr; <a href="floatingpoint.html#decext">floatingpoint.html#decext</a>
+<li>sumFunc &rarr; <a href="lang_aggfunc.html#aggfunclist">lang_aggfunc.html#aggfunclist</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>tan &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>tanh &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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="lang_expr.html#collateop">lang_expr.html#collateop</a>
+ <a href="lang_expr.html#extract">lang_expr.html#extract</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>time &rarr; <a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</a>
+<li>time shift modifiers &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>timediff SQL function &rarr; <a href="changes.html#version_3_43_0">changes.html#version_3_43_0</a>
+ <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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>total &rarr; <a href="changes.html#version_3_43_1">changes.html#version_3_43_1</a>
+ <a href="lang_aggfunc.html#avg">lang_aggfunc.html#avg</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a>
+<li>total_changes &rarr; <a href="lang_corefunc.html">lang_corefunc.html</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>trim &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+<li>trunc &rarr; <a href="lang_mathfunc.html">lang_mathfunc.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="lang_corefunc.html">lang_corefunc.html</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>unhex &rarr; <a href="changes.html#version_3_41_0">changes.html#version_3_41_0</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_corefunc.html#hex">lang_corefunc.html#hex</a>
+ <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a>
+ <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a>
+ <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a>
+<li>unicode &rarr; <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="lang_corefunc.html">lang_corefunc.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>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 &rarr; <a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</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">lang_corefunc.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="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.html">lang.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>
+ <a href="lang_corefunc.html">lang_corefunc.html</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="fullsql.html">fullsql.html</a>
+ <a href="lang.html">lang.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="lang.html">lang.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>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="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.0 &rarr; <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</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="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 &rarr; <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</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="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>Version 3.19.3 &rarr; <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#sqlite_shared_cache_mode">sharedcache.html#sqlite_shared_cache_mode</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="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.15 &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.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>
+<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.41.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.41.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.41.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.42.0 &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a>
+ <a href="testing.html">testing.html</a>
+<li>version 3.43.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.43.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.43.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>version 3.44.0 &rarr; <a href="changes.html#version_3_45_1">changes.html#version_3_45_1</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a>
+<li>version 3.44.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.44.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.45.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.45.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#dontuse">sharedcache.html#dontuse</a>
+ <a href="sharedcache.html#sqlite_shared_cache_mode">sharedcache.html#sqlite_shared_cache_mode</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="oldnews.html">oldnews.html</a>
+<li>version 3.8.4.2 &rarr; <a href="chronology.html">chronology.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_43_0">changes.html#version_3_43_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_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#statext">loadext.html#statext</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_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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/c_vtab_constraint_support.html#sqlitevtabusesallschemas">c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas</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="capi3ref.html#sqlitevtabusesallschemas">capi3ref.html#sqlitevtabusesallschemas</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_vtab">sqldiff.html#sqldiff_vtab</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_44_0">changes.html#version_3_44_0</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_secure_delete">pragma.html#pragma_secure_delete</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_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.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/deserialize.html">c3ref/deserialize.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_deserialize">capi3ref.html#sqlite3_deserialize</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_43_0">changes.html#version_3_43_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="compile.html#use_seh">compile.html#use_seh</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_43_0.html">releaselog/3_43_0.html</a>
+ <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a>
+ <a href="releaselog/3_43_2.html">releaselog/3_43_2.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>
+<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="fullsql.html">fullsql.html</a>
+ <a href="lang_aggfunc.html#aggorderby">lang_aggfunc.html#aggorderby</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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-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#*funcinexpr">lang_expr.html#*funcinexpr</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.html">lang.html</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_returning.html">lang_returning.html</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/c_vtab_constraint_support.html#sqlitevtabusesallschemas">c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas</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="capi3ref.html#sqlitevtabusesallschemas">capi3ref.html#sqlitevtabusesallschemas</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/c_vtab_constraint_support.html#sqlitevtabusesallschemas">c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas</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="capi3ref.html#sqlitevtabusesallschemas">capi3ref.html#sqlitevtabusesallschemas</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>xIntegrity method &rarr; <a href="changes.html#version_3_44_0">changes.html#version_3_44_0</a>
+ <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a>
+ <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a>
+ <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</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#yystackdepth">compile.html#yystackdepth</a>
+ <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="lang_corefunc.html">lang_corefunc.html</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=08af34fe24">2023-03-31 19:57:15</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..2bf33f3
--- /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>--unsafe-testing command-line option - <a href="cli.html#testing_mode">cli.html#testing_mode</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_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_DISABLE_PAGECACHE_OVERFLOW_STATS - <a href="compile.html#disable_pagecache_overflow_stats">compile.html#disable_pagecache_overflow_stats</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_HIDDEN_COLUMNS - <a href="compile.html#enable_hidden_columns">compile.html#enable_hidden_columns</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_JSON_MAX_DEPTH - <a href="compile.html#json_max_depth">compile.html#json_max_depth</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_STRICT_SUBTYPE - <a href="compile.html#strict_subtype">compile.html#strict_subtype</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_SEH - <a href="compile.html#use_seh">compile.html#use_seh</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 functions - <a href="lang_aggfunc.html">lang_aggfunc.html</a></li><li>aggregate JSON SQL functions - <a href="json1.html#jgroupobjectb">json1.html#jgroupobjectb</a></li><li>aggregate SQL 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>base64 SQL function - <a href="cli.html#base64">cli.html#base64</a></li><li>base85 SQL function - <a href="cli.html#base85">cli.html#base85</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>comma option - <a href="printf.html#comma">printf.html#comma</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>concat - <a href="lang_corefunc.html#concat">lang_corefunc.html#concat</a></li><li>concat SQL function - <a href="lang_corefunc.html#concat">lang_corefunc.html#concat</a></li><li>concat_ws - <a href="lang_corefunc.html#concat_ws">lang_corefunc.html#concat_ws</a></li><li>concat_ws SQL function - <a href="lang_corefunc.html#concat_ws">lang_corefunc.html#concat_ws</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>contentless-delete - <a href="fts5.html#clssdeltab">fts5.html#clssdeltab</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 - <a href="lang_datefunc.html#dttm">lang_datefunc.html#dttm</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#dttm">lang_datefunc.html#dttm</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 - <a href="lang_datefunc.html#dttm">lang_datefunc.html#dttm</a></li><li>datetime SQL function - <a href="lang_datefunc.html#dttm">lang_datefunc.html#dttm</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>deletemerge - <a href="fts5.html#the_deletemerge_configuration_option">fts5.html#the_deletemerge_configuration_option</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>double-quoted string misfeature - <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 contentless-delete tables - <a href="fts5.html#contentless_delete_tables">fts5.html#contentless_delete_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 pitfalls - <a href="fts5.html#external_content_table_pitfalls">fts5.html#external_content_table_pitfalls</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 secure-delete command - <a href="fts5.html#the_secure_delete_configuration_option">fts5.html#the_secure_delete_configuration_option</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 tokendata option - <a href="fts5.html#the_tokendata_option">fts5.html#the_tokendata_option</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-arguments - <a href="syntax/function-arguments.html">syntax/function-arguments.html</a></li><li>function-arguments syntax diagram - <a href="syntax/function-arguments.html">syntax/function-arguments.html</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>functions within expressions - <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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 - <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_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>IEEE 754 floating point values are approximations - <a href="floatingpoint.html#fpapprox">floatingpoint.html#fpapprox</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 expression - <a href="expridx.html">expridx.html</a></li><li>indexed expressions - <a href="expridx.html">expridx.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>jfuzz - <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</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 BLOB input bug - <a href="json1.html#jblobbug">json1.html#jblobbug</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>JSON5 - <a href="json1.html#json5">json1.html#json5</a></li><li>JSON5 extensions - <a href="json1.html#json5">json1.html#json5</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_error_position - <a href="json1.html#jerr">json1.html#jerr</a></li><li>json_error_position SQL function - <a href="json1.html#jerr">json1.html#jerr</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>JSONB - <a href="json1.html#jsonbx">json1.html#jsonbx</a></li><li>jsonb - <a href="json1.html#jminib">json1.html#jminib</a></li><li>jsonb SQL function - <a href="json1.html#jminib">json1.html#jminib</a></li><li>jsonb_array - <a href="json1.html#jarrayb">json1.html#jarrayb</a></li><li>jsonb_array SQL function - <a href="json1.html#jarrayb">json1.html#jarrayb</a></li><li>jsonb_extract - <a href="json1.html#jexb">json1.html#jexb</a></li><li>jsonb_extract SQL function - <a href="json1.html#jexb">json1.html#jexb</a></li><li>jsonb_group_array - <a href="json1.html#jgrouparrayb">json1.html#jgrouparrayb</a></li><li>jsonb_group_array SQL function - <a href="json1.html#jgrouparrayb">json1.html#jgrouparrayb</a></li><li>jsonb_group_object - <a href="json1.html#jgroupobjectb">json1.html#jgroupobjectb</a></li><li>jsonb_group_object SQL function - <a href="json1.html#jgroupobjectb">json1.html#jgroupobjectb</a></li><li>jsonb_insert - <a href="json1.html#jinsb">json1.html#jinsb</a></li><li>jsonb_insert SQL function - <a href="json1.html#jinsb">json1.html#jinsb</a></li><li>jsonb_object - <a href="json1.html#jobjb">json1.html#jobjb</a></li><li>jsonb_object SQL function - <a href="json1.html#jobjb">json1.html#jobjb</a></li><li>jsonb_patch - <a href="json1.html#jpatchb">json1.html#jpatchb</a></li><li>jsonb_patch SQL function - <a href="json1.html#jpatchb">json1.html#jpatchb</a></li><li>jsonb_remove - <a href="json1.html#jrmb">json1.html#jrmb</a></li><li>jsonb_remove SQL function - <a href="json1.html#jrmb">json1.html#jrmb</a></li><li>jsonb_replace - <a href="json1.html#jreplb">json1.html#jreplb</a></li><li>jsonb_replace SQL function - <a href="json1.html#jreplb">json1.html#jreplb</a></li><li>jsonb_set - <a href="json1.html#jsetb">json1.html#jsetb</a></li><li>jsonb_set SQL function - <a href="json1.html#jsetb">json1.html#jsetb</a></li><li>julianday - <a href="lang_datefunc.html#jlndy">lang_datefunc.html#jlndy</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#jlndy">lang_datefunc.html#jlndy</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>octet_length - <a href="lang_corefunc.html#octet_length">lang_corefunc.html#octet_length</a></li><li>octet_length SQL function - <a href="lang_corefunc.html#octet_length">lang_corefunc.html#octet_length</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>omit-outer-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>ORDER BY clause in aggregate functions - <a href="lang_aggfunc.html#aggorderby">lang_aggfunc.html#aggorderby</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>OUTER JOIN strength reduction - <a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</a></li><li>OUTER JOIN strength reduction optimization - <a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</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>precompiled amalgamation tarballs - <a href="amalgamation.html#amalgtarball">amalgamation.html#amalgtarball</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>preupdate method - <a href="tclsqlite.html#preupdate">tclsqlite.html#preupdate</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>Scalar Functions - <a href="lang_corefunc.html">lang_corefunc.html</a></li><li>scalar functions - <a href="lang_corefunc.html">lang_corefunc.html</a></li><li>scan status flags - <a href="c3ref/c_scanstat_complex.html">c3ref/c_scanstat_complex.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_clientdata - <a href="c3ref/get_clientdata.html">c3ref/get_clientdata.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_is_interrupted - <a href="c3ref/interrupt.html">c3ref/interrupt.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.xIntegrity - <a href="vtab.html#xintegrity">vtab.html#xintegrity</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_clientdata - <a href="c3ref/get_clientdata.html">c3ref/get_clientdata.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_explain - <a href="c3ref/stmt_explain.html">c3ref/stmt_explain.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_scanstatus_v2 - <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.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_encoding.html">c3ref/value_encoding.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>sqlite3changegroup_schema - <a href="session/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.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>sqlite3changeset_upgrade - <a href="session/sqlite3changeset_upgrade.html">session/sqlite3changeset_upgrade.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_object_config - <a href="session/sqlite3session_object_config.html">session/sqlite3session_object_config.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_FKNOACTION - <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.html</a></li><li>SQLITE_CHANGESETAPPLY_IGNORENOOP - <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.html</a></li><li>SQLITE_CHANGESETAPPLY_INVERT - <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.html</a></li><li>SQLITE_CHANGESETAPPLY_NOSAVEPOINT - <a href="session/c_changesetapply_fknoaction.html">session/c_changesetapply_fknoaction.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_REVERSE_SCANORDER - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder">c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder</a></li><li>SQLITE_DBCONFIG_STMT_SCANSTATUS - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus</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_DISABLE_PAGECACHE_OVERFLOW_STATS - <a href="compile.html#disable_pagecache_overflow_stats">compile.html#disable_pagecache_overflow_stats</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_HIDDEN_COLUMNS - <a href="compile.html#enable_hidden_columns">compile.html#enable_hidden_columns</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_IN_PAGE - <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</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_JSON_MAX_DEPTH - <a href="compile.html#json_max_depth">compile.html#json_max_depth</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_RBU - <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</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_RESULT_SUBTYPE - <a href="c3ref/c_deterministic.html#sqliteresultsubtype">c3ref/c_deterministic.html#sqliteresultsubtype</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_COMPLEX - <a href="c3ref/c_scanstat_complex.html">c3ref/c_scanstat_complex.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_NCYCLE - <a href="c3ref/c_scanstat_est.html#sqlitescanstatncycle">c3ref/c_scanstat_est.html#sqlitescanstatncycle</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_PARENTID - <a href="c3ref/c_scanstat_est.html#sqlitescanstatparentid">c3ref/c_scanstat_est.html#sqlitescanstatparentid</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_SESSION_OBJCONFIG_ROWID - <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.html</a></li><li>SQLITE_SESSION_OBJCONFIG_SIZE - <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.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_STRICT_SUBTYPE - <a href="compile.html#strict_subtype">compile.html#strict_subtype</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_FK_NO_ACTION - <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_JSON_SELFCHECK - <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_USELONGDOUBLE - <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_SEH - <a href="compile.html#use_seh">compile.html#use_seh</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_VTAB_USES_ALL_SCHEMAS - <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas">c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas</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>statically linked extensions - <a href="loadext.html#statext">loadext.html#statext</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 - <a href="lang_datefunc.html#strftm">lang_datefunc.html#strftm</a></li><li>strftime SQL function - <a href="lang_datefunc.html#strftm">lang_datefunc.html#strftm</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>string_agg - <a href="lang_aggfunc.html#group_concat">lang_aggfunc.html#group_concat</a></li><li>string_agg aggregate function - <a href="lang_aggfunc.html#group_concat">lang_aggfunc.html#group_concat</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>subsec modifier - <a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</a></li><li>subsecond modifier - <a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</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 preupdate method - <a href="tclsqlite.html#preupdate">tclsqlite.html#preupdate</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 - <a href="lang_datefunc.html#dttm">lang_datefunc.html#dttm</a></li><li>time shift modifiers - <a href="lang_datefunc.html#tmshf">lang_datefunc.html#tmshf</a></li><li>time SQL function - <a href="lang_datefunc.html#dttm">lang_datefunc.html#dttm</a></li><li>timediff - <a href="lang_datefunc.html#tmdif">lang_datefunc.html#tmdif</a></li><li>timediff SQL function - <a href="lang_datefunc.html#tmdif">lang_datefunc.html#tmdif</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>unhex - <a href="lang_corefunc.html#unhex">lang_corefunc.html#unhex</a></li><li>unhex SQL function - <a href="lang_corefunc.html#unhex">lang_corefunc.html#unhex</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 - <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a></li><li>unixepoch function - <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a></li><li>unixepoch SQL 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>unsafe-testing command-line option - <a href="cli.html#testing_mode">cli.html#testing_mode</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 3.41.0 - <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a></li><li>version 3.41.0 - <a href="releaselog/3_41_0.html">releaselog/3_41_0.html</a></li><li>Version 3.41.1 - <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a></li><li>version 3.41.1 - <a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a></li><li>Version 3.41.2 - <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a></li><li>version 3.41.2 - <a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a></li><li>Version 3.42.0 - <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a></li><li>version 3.42.0 - <a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a></li><li>Version 3.43.0 - <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a></li><li>version 3.43.0 - <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a></li><li>Version 3.43.0.0 - <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a></li><li>version 3.43.0.0 - <a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a></li><li>Version 3.43.1 - <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a></li><li>version 3.43.1 - <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a></li><li>Version 3.43.1.0 - <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a></li><li>version 3.43.1.0 - <a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a></li><li>Version 3.43.2 - <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a></li><li>version 3.43.2 - <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a></li><li>Version 3.43.2.0 - <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a></li><li>version 3.43.2.0 - <a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a></li><li>Version 3.44.0 - <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a></li><li>version 3.44.0 - <a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a></li><li>Version 3.44.1 - <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a></li><li>version 3.44.1 - <a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a></li><li>Version 3.44.2 - <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a></li><li>version 3.44.2 - <a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a></li><li>Version 3.45.0 - <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a></li><li>version 3.45.0 - <a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a></li><li>Version 3.45.1 - <a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a></li><li>version 3.45.1 - <a href="releaselog/3_45_1.html">releaselog/3_45_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>xIntegrity - <a href="vtab.html#xintegrity">vtab.html#xintegrity</a></li><li>xIntegrity method - <a href="vtab.html#xintegrity">vtab.html#xintegrity</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=08af34fe24">2023-03-31 19:57:15</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..cb003a0
--- /dev/null
+++ b/www/doc_pagelink_crossref.html
@@ -0,0 +1,1149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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_[&#94;_]+_crossref) are skipped.</p><ul><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="prosupport.html">prosupport.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="lts.html">lts.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="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="c3ref/funclist.html">c3ref/funclist.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="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="c3ref/objlist.html">c3ref/objlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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/funclist.html">c3ref/funclist.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> </li>
+<li><a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/objlist.html">c3ref/objlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="docs.html">docs.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.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/stmt.html">c3ref/stmt.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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> </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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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> </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="c3ref/objlist.html">c3ref/objlist.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="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="lang_transaction.html">lang_transaction.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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="c3ref/funclist.html">c3ref/funclist.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> </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="c3ref/funclist.html">c3ref/funclist.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/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/funclist.html">c3ref/funclist.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> </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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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/funclist.html">c3ref/funclist.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="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="c3ref/constlist.html">c3ref/constlist.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/constlist.html">c3ref/constlist.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> </li>
+<li><a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.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="keyword_index.html">keyword_index.html</a> <a href="lang_delete.html">lang_delete.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/constlist.html">c3ref/constlist.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_encoding.html">c3ref/value_encoding.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/constlist.html">c3ref/constlist.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_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.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="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_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/constlist.html">c3ref/constlist.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="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/constlist.html">c3ref/constlist.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="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/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/constlist.html">c3ref/constlist.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="malloc.html">malloc.html</a> <a href="memstat.html">memstat.html</a> <a href="pragma.html">pragma.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/constlist.html">c3ref/constlist.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="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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/constlist.html">c3ref/constlist.html</a> <a href="c3ref/create_function.html">c3ref/create_function.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">capi3ref.html</a> <a href="compile.html">compile.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/constlist.html">c3ref/constlist.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/constlist.html">c3ref/constlist.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="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/constlist.html">c3ref/constlist.html</a> <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="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="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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/constlist.html">c3ref/constlist.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/constlist.html">c3ref/constlist.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="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/constlist.html">c3ref/constlist.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/constlist.html">c3ref/constlist.html</a> <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/constlist.html">c3ref/constlist.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/constlist.html">c3ref/constlist.html</a> <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> </li>
+<li><a href="c3ref/c_scanstat_complex.html">c3ref/c_scanstat_complex.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.html</a> <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> </li>
+<li><a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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/constlist.html">c3ref/constlist.html</a> <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="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="c3ref/constlist.html">c3ref/constlist.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> </li>
+<li><a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.html</a> <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> </li>
+<li><a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.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="lang_indexedby.html">lang_indexedby.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/constlist.html">c3ref/constlist.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_testctrl_always.html">c3ref/c_testctrl_always.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.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/c_trace.html">c3ref/c_trace.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.html</a> <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> </li>
+<li><a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> &rarr;
+<a href="c3ref/constlist.html">c3ref/constlist.html</a> <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> </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/constlist.html">c3ref/constlist.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="c3ref/constlist.html">c3ref/constlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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> </li>
+<li><a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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/column_decltype.html">c3ref/column_decltype.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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/column_name.html">c3ref/column_name.html</a> &rarr;
+<a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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> </li>
+<li><a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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="pragma.html">pragma.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="c3ref/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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="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;
+<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_complex.html">c3ref/c_scanstat_complex.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/get_clientdata.html">c3ref/get_clientdata.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_explain.html">c3ref/stmt_explain.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_encoding.html">c3ref/value_encoding.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> </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/objlist.html">c3ref/objlist.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/create_filename.html">c3ref/create_filename.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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> </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/funclist.html">c3ref/funclist.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/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/user_data.html">c3ref/user_data.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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> </li>
+<li><a href="c3ref/data_directory.html">c3ref/data_directory.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.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> </li>
+<li><a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> &rarr;
+<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> </li>
+<li><a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/db_handle.html">c3ref/db_handle.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/db_name.html">c3ref/db_name.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="vtablist.html">vtablist.html</a> </li>
+<li><a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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="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/funclist.html">c3ref/funclist.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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="pragma.html">pragma.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="invalidutf.html">invalidutf.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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/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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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/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/objlist.html">c3ref/objlist.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/funclist.html">c3ref/funclist.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="c3ref/sqlite3.html">c3ref/sqlite3.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="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="c3ref/objlist.html">c3ref/objlist.html</a> <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="c3ref/funclist.html">c3ref/funclist.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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/funclist.html">c3ref/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_complex.html">c3ref/c_scanstat_complex.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/get_clientdata.html">c3ref/get_clientdata.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_explain.html">c3ref/stmt_explain.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_encoding.html">c3ref/value_encoding.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="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/funclist.html">c3ref/funclist.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/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/get_clientdata.html">c3ref/get_clientdata.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/get_clientdata.html">c3ref/get_clientdata.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.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="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/objlist.html">c3ref/objlist.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="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/initialize.html">c3ref/initialize.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/complete.html">c3ref/complete.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/funclist.html">c3ref/funclist.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> </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="c3ref/objlist.html">c3ref/objlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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="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_complex.html">c3ref/c_scanstat_complex.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/get_clientdata.html">c3ref/get_clientdata.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_explain.html">c3ref/stmt_explain.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_encoding.html">c3ref/value_encoding.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="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/objlist.html">c3ref/objlist.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="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="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="c3ref/funclist.html">c3ref/funclist.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="lang_corefunc.html">lang_corefunc.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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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/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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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="c3ref/funclist.html">c3ref/funclist.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="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="c3ref/objlist.html">c3ref/objlist.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> </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="c3ref/funclist.html">c3ref/funclist.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="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/objlist.html">c3ref/objlist.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="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/funclist.html">c3ref/funclist.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="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="c3ref/objlist.html">c3ref/objlist.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/funclist.html">c3ref/funclist.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> </li>
+<li><a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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">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="c3ref/objlist.html">c3ref/objlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <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> </li>
+<li><a href="c3ref/objlist.html">c3ref/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_complex.html">c3ref/c_scanstat_complex.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/get_clientdata.html">c3ref/get_clientdata.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_explain.html">c3ref/stmt_explain.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_encoding.html">c3ref/value_encoding.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> </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/funclist.html">c3ref/funclist.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/pcache.html">c3ref/pcache.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.html</a> <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/objlist.html">c3ref/objlist.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> </li>
+<li><a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.html</a> <a href="capi3ref.html">capi3ref.html</a> <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/funclist.html">c3ref/funclist.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/stmt_explain.html">c3ref/stmt_explain.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="security.html">security.html</a> </li>
+<li><a href="c3ref/randomness.html">c3ref/randomness.html</a> &rarr;
+<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> </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="c3ref/funclist.html">c3ref/funclist.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/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/funclist.html">c3ref/funclist.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="c3ref/stmt_explain.html">c3ref/stmt_explain.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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.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="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="appfunc.html">appfunc.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.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/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="c3ref/funclist.html">c3ref/funclist.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/snapshot.html">c3ref/snapshot.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.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="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/funclist.html">c3ref/funclist.html</a> <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/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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_open.html">c3ref/snapshot_open.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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/get_clientdata.html">c3ref/get_clientdata.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/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/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="threadsafe.html">threadsafe.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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.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="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/objlist.html">c3ref/objlist.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_explain.html">c3ref/stmt_explain.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="threadsafe.html">threadsafe.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/stmt_explain.html">c3ref/stmt_explain.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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="profile.html">profile.html</a> </li>
+<li><a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <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> </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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/stmt.html">c3ref/stmt.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="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/str.html">c3ref/str.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.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="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/str_append.html">c3ref/str_append.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/str_finish.html">c3ref/str_finish.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/str_new.html">c3ref/str_new.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/strglob.html">c3ref/strglob.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </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/funclist.html">c3ref/funclist.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> </li>
+<li><a href="c3ref/strlike.html">c3ref/strlike.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/system_errno.html">c3ref/system_errno.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.html</a> <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="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="c3ref/funclist.html">c3ref/funclist.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="testing.html">testing.html</a> </li>
+<li><a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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> </li>
+<li><a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="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="c3ref/funclist.html">c3ref/funclist.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="c3ref/funclist.html">c3ref/funclist.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> </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/objlist.html">c3ref/objlist.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/value_encoding.html">c3ref/value_encoding.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="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/funclist.html">c3ref/funclist.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_encoding.html">c3ref/value_encoding.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="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/funclist.html">c3ref/funclist.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> </li>
+<li><a href="c3ref/value_encoding.html">c3ref/value_encoding.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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> </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="c3ref/funclist.html">c3ref/funclist.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> </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/objlist.html">c3ref/objlist.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="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/funclist.html">c3ref/funclist.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="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="c3ref/objlist.html">c3ref/objlist.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="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/funclist.html">c3ref/funclist.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="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="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> &rarr;
+<a href="c3ref/objlist.html">c3ref/objlist.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_distinct.html">c3ref/vtab_distinct.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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_in.html">c3ref/vtab_in.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <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> </li>
+<li><a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.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="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="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="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/funclist.html">c3ref/funclist.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="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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <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="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="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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/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/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.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="wal.html">wal.html</a> </li>
+<li><a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> &rarr;
+<a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <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="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="c3ref/funclist.html">c3ref/funclist.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="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="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.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="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="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c_interface.html">c_interface.html</a> <a href="capi3ref.html">capi3ref.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="json1.html">json1.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="profile.html">profile.html</a> <a href="qmplan.html">qmplan.html</a> <a href="quickstart.html">quickstart.html</a> <a href="quirks.html">quirks.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/get_auxdata.html">c3ref/get_auxdata.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="cves.html">cves.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="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="lts.html">lts.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="profile.html">profile.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="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="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="docs.html">docs.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="keyword_index.html">keyword_index.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="lts.html">lts.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="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_explain.html">c3ref/stmt_explain.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="profile.html">profile.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="lts.html">lts.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="c3ref/deserialize.html">c3ref/deserialize.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="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="fts3.html">fts3.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="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="lang_aggfunc.html">lang_aggfunc.html</a> <a href="printf.html">printf.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="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="docs.html">docs.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="pragma.html">pragma.html</a> <a href="rbu.html">rbu.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="pragma.html">pragma.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="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="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="lts.html">lts.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="invalidutf.html">invalidutf.html</a> &rarr;
+<a href="c3ref/errcode.html">c3ref/errcode.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="isolation.html">isolation.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="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="index.html">index.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="loadext.html">loadext.html</a> <a href="sitemap.html">sitemap.html</a> <a href="testing.html">testing.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="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.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.html">lang.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="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.html">lang.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="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="lang.html">lang.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="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.html">lang.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="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="lang.html">lang.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.html">lang.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="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> </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.html">lang.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_datefunc.html">lang_datefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_mathfunc.html">lang_mathfunc.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="security.html">security.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="undoredo.html">undoredo.html</a> <a href="windowfunctions.html">windowfunctions.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.html">lang.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="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.html">lang.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="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.html">lang.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="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.html">lang.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="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="lang.html">lang.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.html">lang.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="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.html">lang.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="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.html">lang.html</a> <a href="lang_attach.html">lang_attach.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.html">lang.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="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.html">lang.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="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.html">lang.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_naming.html">lang_naming.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.html">lang.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="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_explain.html">c3ref/stmt_explain.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="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="lang.html">lang.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="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.html">lang.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="lang_vacuum.html">lang_vacuum.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="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="lang.html">lang.html</a> <a href="queryplanner-ng.html">queryplanner-ng.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="c3ref/reset.html">c3ref/reset.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.html">lang.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="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="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="lang_expr.html">lang_expr.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="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.html">lang.html</a> <a href="lang_naming.html">lang_naming.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="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.html">lang.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang_returning.html">lang_returning.html</a> &rarr;
+<a href="c3ref/reset.html">c3ref/reset.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="lang.html">lang.html</a> <a href="lang_delete.html">lang_delete.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.html">lang.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="pragma.html">pragma.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.html">lang.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="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.html">lang.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="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.html">lang.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="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="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.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="lang.html">lang.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="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.html">lang.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="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_aggfunc.html">lang_aggfunc.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="keyword_index.html">keyword_index.html</a> <a href="lts.html">lts.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="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="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="lts.html">lts.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="profile.html">profile.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="queryplanner.html">queryplanner.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="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="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="fts5.html">fts5.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.html">lang.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="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="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="profile.html">profile.html</a> &rarr;
+<a href="doclist.html">doclist.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="lts.html">lts.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="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/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/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="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="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> <a href="session.html">session.html</a> <a href="session/constlist.html">session/constlist.html</a> </li>
+<li><a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/constlist.html">session/constlist.html</a> <a href="session/sqlite3session_object_config.html">session/sqlite3session_object_config.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="session.html">session.html</a> <a href="session/objlist.html">session/objlist.html</a> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/constlist.html">session/constlist.html</a> &rarr;
+<a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.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/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.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_object_config.html">session/sqlite3session_object_config.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="session/funclist.html">session/funclist.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.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/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.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_object_config.html">session/sqlite3session_object_config.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="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="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.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/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.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_object_config.html">session/sqlite3session_object_config.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> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/objlist.html">session/objlist.html</a> &rarr;
+<a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.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/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.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_object_config.html">session/sqlite3session_object_config.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="session/rebaser.html">session/rebaser.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/objlist.html">session/objlist.html</a> </li>
+<li><a href="session/session.html">session/session.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/objlist.html">session/objlist.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> <a href="session/funclist.html">session/funclist.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> <a href="session/funclist.html">session/funclist.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> <a href="session/funclist.html">session/funclist.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> <a href="session/funclist.html">session/funclist.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> <a href="session/funclist.html">session/funclist.html</a> </li>
+<li><a href="session/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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/funclist.html">session/funclist.html</a> <a href="session/session.html">session/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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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/funclist.html">session/funclist.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/funclist.html">session/funclist.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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.html</a> <a href="session/session.html">session/session.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> <a href="session/funclist.html">session/funclist.html</a> <a href="session/session.html">session/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> <a href="session/funclist.html">session/funclist.html</a> <a href="session/session.html">session/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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.html</a> </li>
+<li><a href="session/sqlite3session_object_config.html">session/sqlite3session_object_config.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.html</a> <a href="session/session.html">session/session.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/funclist.html">session/funclist.html</a> <a href="session/session.html">session/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> <a href="session.html">session.html</a> <a href="session/funclist.html">session/funclist.html</a> <a href="session/session.html">session/session.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="cves.html">cves.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="docs.html">docs.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="docs.html">docs.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="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/function-arguments.html">syntax/function-arguments.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_corefunc.html">lang_corefunc.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="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="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="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="docs.html">docs.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="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/deserialize.html">c3ref/deserialize.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="docs.html">docs.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_returning.html">lang_returning.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="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="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="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="features.html">features.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="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="fullsql.html">fullsql.html</a> <a href="index.html">index.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="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="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=08af34fe24">2023-03-31 19:57:15</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..fc35282
--- /dev/null
+++ b/www/doc_target_crossref.html
@@ -0,0 +1,2095 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="amalgamation.html#amalgtarball">amalgamation.html#amalgtarball</a> &rarr; {precompiled amalgamation tarballs}</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_IOERR_IN_PAGE SQLITE_NOTICE_RBU 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#sqlitedbconfigreversescanorder">c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder</a> &rarr; SQLITE_DBCONFIG_REVERSE_SCANORDER</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus</a> &rarr; SQLITE_DBCONFIG_STMT_SCANSTATUS</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#sqliteresultsubtype">c3ref/c_deterministic.html#sqliteresultsubtype</a> &rarr; SQLITE_RESULT_SUBTYPE</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_complex.html">c3ref/c_scanstat_complex.html</a> &rarr; SQLITE_SCANSTAT_COMPLEX {scan status flags}</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#sqlitescanstatncycle">c3ref/c_scanstat_est.html#sqlitescanstatncycle</a> &rarr; SQLITE_SCANSTAT_NCYCLE</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#sqlitescanstatparentid">c3ref/c_scanstat_est.html#sqlitescanstatparentid</a> &rarr; SQLITE_SCANSTAT_PARENTID</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_FK_NO_ACTION SQLITE_TESTCTRL_IMPOSTER SQLITE_TESTCTRL_INTERNAL_FUNCTIONS SQLITE_TESTCTRL_ISINIT SQLITE_TESTCTRL_ISKEYWORD SQLITE_TESTCTRL_JSON_SELFCHECK 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_USELONGDOUBLE 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_vtab_constraint_support.html#sqlitevtabusesallschemas">c3ref/c_vtab_constraint_support.html#sqlitevtabusesallschemas</a> &rarr; SQLITE_VTAB_USES_ALL_SCHEMAS</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/get_clientdata.html">c3ref/get_clientdata.html</a> &rarr; sqlite3_get_clientdata sqlite3_set_clientdata</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 sqlite3_is_interrupted</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_explain.html">c3ref/stmt_explain.html</a> &rarr; sqlite3_stmt_explain</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 sqlite3_stmt_scanstatus_v2</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_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_encoding.html">c3ref/value_encoding.html</a> &rarr; sqlite3_value_encoding</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#base64">cli.html#base64</a> &rarr; {base64 SQL function}</li>
+<li><a href="cli.html#base85">cli.html#base85</a> &rarr; {base85 SQL function}</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#testing_mode">cli.html#testing_mode</a> &rarr; {--unsafe-testing command-line option} {unsafe-testing command-line option}</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#disable_pagecache_overflow_stats">compile.html#disable_pagecache_overflow_stats</a> &rarr; -DSQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS</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_hidden_columns">compile.html#enable_hidden_columns</a> &rarr; -DSQLITE_ENABLE_HIDDEN_COLUMNS SQLITE_ENABLE_HIDDEN_COLUMNS</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#json_max_depth">compile.html#json_max_depth</a> &rarr; -DSQLITE_JSON_MAX_DEPTH SQLITE_JSON_MAX_DEPTH</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#strict_subtype">compile.html#strict_subtype</a> &rarr; -DSQLITE_STRICT_SUBTYPE SQLITE_STRICT_SUBTYPE</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_seh">compile.html#use_seh</a> &rarr; -DSQLITE_USE_SEH SQLITE_USE_SEH</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#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} {indexed expression} {indexed expressions} {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#fpapprox">floatingpoint.html#fpapprox</a> &rarr; {IEEE 754 floating point values are approximations}</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#clssdeltab">fts5.html#clssdeltab</a> &rarr; contentless-delete</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_delete_tables">fts5.html#contentless_delete_tables</a> &rarr; {FTS5 contentless-delete tables}</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_table_pitfalls">fts5.html#external_content_table_pitfalls</a> &rarr; {FTS5 external content pitfalls}</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_deletemerge_configuration_option">fts5.html#the_deletemerge_configuration_option</a> &rarr; deletemerge</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_secure_delete_configuration_option">fts5.html#the_secure_delete_configuration_option</a> &rarr; {FTS5 secure-delete 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_tokendata_option">fts5.html#the_tokendata_option</a> &rarr; {FTS5 tokendata option}</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 {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#jarrayb">json1.html#jarrayb</a> &rarr; jsonb_array {jsonb_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#jblobbug">json1.html#jblobbug</a> &rarr; {JSON BLOB input bug}</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#jerr">json1.html#jerr</a> &rarr; json_error_position {json_error_position SQL 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#jexb">json1.html#jexb</a> &rarr; jsonb_extract {jsonb_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#jgrouparrayb">json1.html#jgrouparrayb</a> &rarr; jsonb_group_array {jsonb_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#jgroupobjectb">json1.html#jgroupobjectb</a> &rarr; {aggregate JSON SQL functions} jsonb_group_object {jsonb_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#jinsb">json1.html#jinsb</a> &rarr; jsonb_insert {jsonb_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#jminib">json1.html#jminib</a> &rarr; jsonb {jsonb 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#jobjb">json1.html#jobjb</a> &rarr; jsonb_object {jsonb_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#jpatchb">json1.html#jpatchb</a> &rarr; jsonb_patch {jsonb_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#jreplb">json1.html#jreplb</a> &rarr; jsonb_replace {jsonb_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#jrmb">json1.html#jrmb</a> &rarr; jsonb_remove {jsonb_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#jsetb">json1.html#jsetb</a> &rarr; jsonb_set {jsonb_set SQL function}</li>
+<li><a href="json1.html#json5">json1.html#json5</a> &rarr; JSON5 {JSON5 extensions}</li>
+<li><a href="json1.html#jsonbx">json1.html#jsonbx</a> &rarr; JSONB</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} {Aggregate functions} aggfunc {aggregate SQL functions} {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#aggorderby">lang_aggfunc.html#aggorderby</a> &rarr; {ORDER BY clause in 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} string_agg {string_agg 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} {Scalar Functions} corefunc {scalar functions}</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#concat">lang_corefunc.html#concat</a> &rarr; concat {concat SQL function}</li>
+<li><a href="lang_corefunc.html#concat_ws">lang_corefunc.html#concat_ws</a> &rarr; concat_ws {concat_ws 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#octet_length">lang_corefunc.html#octet_length</a> &rarr; octet_length {octet_length 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#unhex">lang_corefunc.html#unhex</a> &rarr; unhex {unhex 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 and time functions} datefunc</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#dttm">lang_datefunc.html#dttm</a> &rarr; date {date SQL function} datetime {datetime SQL function} time {time SQL function}</li>
+<li><a href="lang_datefunc.html#jdmod">lang_datefunc.html#jdmod</a> &rarr; {julianday modifier}</li>
+<li><a href="lang_datefunc.html#jlndy">lang_datefunc.html#jlndy</a> &rarr; julianday {julianday SQL function}</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#strftm">lang_datefunc.html#strftm</a> &rarr; strftime {strftime SQL function}</li>
+<li><a href="lang_datefunc.html#subsec">lang_datefunc.html#subsec</a> &rarr; {subsec modifier} {subsecond modifier}</li>
+<li><a href="lang_datefunc.html#tmdif">lang_datefunc.html#tmdif</a> &rarr; timediff {timediff SQL function}</li>
+<li><a href="lang_datefunc.html#tmshf">lang_datefunc.html#tmshf</a> &rarr; {time shift modifiers}</li>
+<li><a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a> &rarr; unixepoch {unixepoch SQL function} {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#*funcinexpr">lang_expr.html#*funcinexpr</a> &rarr; {functions within expressions}</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#statext">loadext.html#statext</a> &rarr; {statically linked 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} {OUTER JOIN strength reduction} {OUTER 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} {omit-outer-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#comma">printf.html#comma</a> &rarr; {comma option}</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} {double-quoted string misfeature}</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_41_0.html">releaselog/3_41_0.html</a> &rarr; {Version 3.41.0} {version 3.41.0}</li>
+<li><a href="releaselog/3_41_1.html">releaselog/3_41_1.html</a> &rarr; {Version 3.41.1} {version 3.41.1}</li>
+<li><a href="releaselog/3_41_2.html">releaselog/3_41_2.html</a> &rarr; {Version 3.41.2} {version 3.41.2}</li>
+<li><a href="releaselog/3_42_0.html">releaselog/3_42_0.html</a> &rarr; {Version 3.42.0} {version 3.42.0}</li>
+<li><a href="releaselog/3_43_0.html">releaselog/3_43_0.html</a> &rarr; {Version 3.43.0} {Version 3.43.0.0} {version 3.43.0} {version 3.43.0.0}</li>
+<li><a href="releaselog/3_43_1.html">releaselog/3_43_1.html</a> &rarr; {Version 3.43.1} {Version 3.43.1.0} {version 3.43.1} {version 3.43.1.0}</li>
+<li><a href="releaselog/3_43_2.html">releaselog/3_43_2.html</a> &rarr; {Version 3.43.2} {Version 3.43.2.0} {version 3.43.2} {version 3.43.2.0}</li>
+<li><a href="releaselog/3_44_0.html">releaselog/3_44_0.html</a> &rarr; {Version 3.44.0} {version 3.44.0}</li>
+<li><a href="releaselog/3_44_1.html">releaselog/3_44_1.html</a> &rarr; {Version 3.44.1} {version 3.44.1}</li>
+<li><a href="releaselog/3_44_2.html">releaselog/3_44_2.html</a> &rarr; {Version 3.44.2} {version 3.44.2}</li>
+<li><a href="releaselog/3_45_0.html">releaselog/3_45_0.html</a> &rarr; {Version 3.45.0} {version 3.45.0}</li>
+<li><a href="releaselog/3_45_1.html">releaselog/3_45_1.html</a> &rarr; {Version 3.45.1} {version 3.45.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_fknoaction.html">session/c_changesetapply_fknoaction.html</a> &rarr; SQLITE_CHANGESETAPPLY_FKNOACTION SQLITE_CHANGESETAPPLY_IGNORENOOP 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/c_session_objconfig_rowid.html">session/c_session_objconfig_rowid.html</a> &rarr; SQLITE_SESSION_OBJCONFIG_ROWID SQLITE_SESSION_OBJCONFIG_SIZE</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/sqlite3changegroup_schema.html">session/sqlite3changegroup_schema.html</a> &rarr; sqlite3changegroup_schema</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/sqlite3changeset_upgrade.html">session/sqlite3changeset_upgrade.html</a> &rarr; sqlite3changeset_upgrade</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_object_config.html">session/sqlite3session_object_config.html</a> &rarr; sqlite3session_object_config</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/function-arguments.html">syntax/function-arguments.html</a> &rarr; function-arguments {function-arguments 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#preupdate">tclsqlite.html#preupdate</a> &rarr; {TCL interface preupdate method} {preupdate 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 jfuzz</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#xintegrity">vtab.html#xintegrity</a> &rarr; sqlite3_module.xIntegrity xIntegrity {xIntegrity method}</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=08af34fe24">2023-03-31 19:57:15</a> UTC </small></i></p>
+
diff --git a/www/doclist.html b/www/doclist.html
new file mode 100644
index 0000000..3e87b54
--- /dev/null
+++ b/www/doclist.html
@@ -0,0 +1,342 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="profile.html">Profiling SQL Queries</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..ec2c069
--- /dev/null
+++ b/www/docs.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>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 {
+ 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'>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
+ <a href="sqlanalyze.html">sqlite3_analyzer</a> 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
+ <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted files.
+</span>
+<li><a class='sh_link' href='carray.html'>Carray</a>
+<span class='desktoponly'>&rarr;
+ CARRAY is a <a href="vtab.html#tabfunc2">table-valued function</a>
+ 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()
+ <a href="vtab.html#tabfunc2">table-valued function</a>.
+</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 <a href="fts3.html">full-text search</a>.
+</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 <a href="c3ref/backup_finish.html">online-backup interface</a> 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
+ <a href="sharedcache.html">shared cache mode</a> 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 <a href="dbstat.html">dbstat virtual table</a>.
+</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='https://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. <a href="wal.html">WAL mode</a> 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..c39c607
--- /dev/null
+++ b/www/download.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 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="https://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="https://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="https://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..b4e68fa
--- /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=719c38ad7e">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/errlog.html b/www/errlog.html
new file mode 100644
index 0000000..286d7e4
--- /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=20f20663c0">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/expridx.html b/www/expridx.html
new file mode 100644
index 0000000..6858690
--- /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=918a2f1493">2023-02-11 20:57:33</a> UTC </small></i></p>
+
diff --git a/www/famous.html b/www/famous.html
new file mode 100644
index 0000000..d5fdc90
--- /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="https://airsdk.harman.com">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="https://www.airbus.com/en/products-services/commercial-aircraft/passenger-aircraft/a350-family">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="https://forums.mcafee.com/t5/WebAdvisor/SQLite-Temporary-Files/m-p/19512">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="https://airsdk.harman.com">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="https://www.airbus.com/en/products-services/commercial-aircraft/passenger-aircraft/a350-family">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="https://forums.mcafee.com/t5/WebAdvisor/SQLite-Temporary-Files/m-p/19512">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=bf54cf33a9">2023-01-02 14:22:42</a> UTC </small></i></p>
+
diff --git a/www/faq.html b/www/faq.html
new file mode 100644
index 0000000..3a559ec
--- /dev/null
+++ b/www/faq.html
@@ -0,0 +1,656 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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><li value='29'><a href="#q29">Where did my database go? (Or: How did my database become empty?)</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="https://www2.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.html">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>
+<a name="q29"></a>
+<p><b>(29) Where did my database go? (Or: How did my database become empty?)</b></p>
+<blockquote>Unless opened with flags to prevent it, a SQLite database is created
+ if it does not already exist. Newly created databases are initially empty.
+ This can confuse people who inadvertantly open different database files
+ in different contexts, due to either a typo in the filename
+ or use of a relative pathname that is used with
+ differing current directories for the opening processes.</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=4f3e5e4107">2023-12-22 14:38:37</a> UTC </small></i></p>
+
diff --git a/www/fasterthanfs.html b/www/fasterthanfs.html
new file mode 100644
index 0000000..42a53c8
--- /dev/null
+++ b/www/fasterthanfs.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>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 <a href="https://golangexample.com/an-unscientific-benchmark-of-sqlite-vs-the-file-system-btrfs/">2022 study</a>
+(<a href="https://github.com/chrisdavies/dbench">alternative link on GitHub</a>) found that
+SQLite is <i>roughly</i> twice as fast at real-world workloads compared to Btrfs and Ext4 on Linux.
+
+</p><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=0f7552234f">2023-12-05 14:43:20</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..8925c5d
--- /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=4569e5ca27">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/fileformat.html b/www/fileformat.html
new file mode 100644
index 0000000..a26002b
--- /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 4294967294 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="https://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>
+
+
diff --git a/www/fileformat2.html b/www/fileformat2.html
new file mode 100644
index 0000000..a26002b
--- /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 4294967294 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="https://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>
+
+
diff --git a/www/flextypegood.html b/www/flextypegood.html
new file mode 100644
index 0000000..e5ed0ba
--- /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
+ known as 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,
+ an 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
+ an 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 files 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 flexibly typed 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 contain the number
+of seconds since 1970 sometimes, or 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 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 authored 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 than 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. Some 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 spent 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 use 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=f43597ad0b">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/floatingpoint.html b/www/floatingpoint.html
new file mode 100644
index 0000000..06909b2
--- /dev/null
+++ b/www/floatingpoint.html
@@ -0,0 +1,480 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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>
+</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.
+
+<a name="fpapprox"></a>
+
+</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><li> decimal_pow2(N)
+</li></ul>
+
+
+<p>The first three functions respectively add, subtract, and multiply their arguments
+and return a new text string that is the decimal representation of the result. The
+argument is interpreted as text.
+There is no division operator because decimal division often does not generate
+a finite decimal result.
+
+</p><p>The decimal_pow2(N) function returns 2.0 raised to the N-th power where N is an
+integer between -20000 and +20000.
+
+</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>The decimal extension provides the "decimal" collating sequences
+that compares decimal text strings in numeric order.
+
+</p><p>The decimal(X) and decimal_exp(X) generate a decimal representation for input X.
+The decimal_exp(X) function returns the result in exponential notation (with a "e+NN"
+at the end) and decimal(X) returns a pure decimal (without the "e+NN"). If the input
+X is a floating point value, it is expanded to its exact decimal equivalent. For
+example:
+
+</p><div class="codeblock"><pre>sqlite> .mode qbox
+sqlite> select decimal(47.49);
+┌──────────────────────────────────────────────────────┐
+│ decimal(47.49) │
+├──────────────────────────────────────────────────────┤
+│ '47.49000000000000198951966012828052043914794921875' │
+└──────────────────────────────────────────────────────┘
+</pre></div>
+
+
diff --git a/www/footprint.html b/www/footprint.html
new file mode 100644
index 0000000..b23c96e
--- /dev/null
+++ b/www/footprint.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 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>
+As of 2023-07-04, the size of SQLite library is generally less than
+1 megabyte. The size varies by compiler, operating system,
+CPU architecture, compile-time options, and other factors. When
+compiling using -Os (optimize for size) and with no other compile
+time-options specified, here are a few examples from commonly used
+platforms:
+
+
+<ul>
+<li><p> gcc 10.2.1 on Raspberry PI 4 64-bit ARM: <b>590 KB</b>.
+<li><p> clang 14.0.0 on MacOS M1: <b>750 KB</b>.
+<li><p> gcc 5.4.0 on Ubuntu 16.04.7 x64: <b>650 KB</b>
+<li><p> gcc 9.4.0 on Ubuntu 20.04.5 x64: <b>650 KB</b>
+</ul>
+
+<p>
+Your mileage may vary.
+
+<p>
+Library size will likely be larger
+when including optional features such as full-text search or r-tree indexes,
+or when using more aggressive compiler options such as -O3.
+
+<p>
+This document is intended only as a general guideline to the
+compiled size of the SQLite library. If you need exact numbers, please
+make your own measurements using your specific combination of SQLite
+source code version, compiler, target platform, and compile-time options.
+<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=1a276af364">2023-07-30 10:50:18</a> UTC </small></i></p>
+
diff --git a/www/foreignkeys.html b/www/foreignkeys.html
new file mode 100644
index 0000000..c0f3b2f
--- /dev/null
+++ b/www/foreignkeys.html
@@ -0,0 +1,1051 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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><li><p>
+ <b>Foreign keys may not cross schema boundaries.</b> That is, in
+ <code>REFERENCES (X.Y)</code> table <code>X</code> will only be resolved
+ within the schema which contains the <code>REFERENCES</code> 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/foreignkeys.in?m=a8733ccf86">2024-01-23 13:08:17</a> UTC </small></i></p>
+
diff --git a/www/formatchng.html b/www/formatchng.html
new file mode 100644
index 0000000..3d3c76f
--- /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=8415958e0a">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..ac3a881
--- /dev/null
+++ b/www/fts3.html
@@ -0,0 +1,3287 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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="https://icu.unicode.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&nbsp;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.
+
+<a name="matchable"></a>
+
+</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="fileformat2.html#varint">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="https://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>
+
diff --git a/www/fts5.html b/www/fts5.html
new file mode 100644
index 0000000..6b1ea16
--- /dev/null
+++ b/www/fts5.html
@@ -0,0 +1,3718 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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_trigram_tokenizer">4.3.4. The 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="#contentless_delete_tables">4.4.2. Contentless-Delete Tables</a></div>
+<div class="fancy-toc3"><a href="#external_content_tables">4.4.3. External Content Tables</a></div>
+<div class="fancy-toc3"><a href="#external_content_table_pitfalls">4.4.4. External Content Table Pitfalls</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-toc2"><a href="#the_tokendata_option">4.7. The Tokendata 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_deletemerge_configuration_option">6.5. The 'deletemerge' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_integrity_check_command">6.6. The 'integrity-check' Command</a></div>
+<div class="fancy-toc2"><a href="#the_merge_command">6.7. The 'merge' Command</a></div>
+<div class="fancy-toc2"><a href="#the_optimize_command">6.8. The 'optimize' Command</a></div>
+<div class="fancy-toc2"><a href="#the_pgsz_configuration_option">6.9. The 'pgsz' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_rank_configuration_option">6.10. The 'rank' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_rebuild_command">6.11. The 'rebuild' Command</a></div>
+<div class="fancy-toc2"><a href="#the_secure_delete_configuration_option">6.12. The 'secure-delete' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_usermerge_configuration_option">6.13. 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="https://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 https://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>
+Each string in an fts5 query is parsed ("tokenized") by the
+<a href="fts5.html#tokenizers">tokenizer</a> and a list of zero or more <b>tokens</b>, or
+terms, extracted. For example, the default tokenizer tokenizes the string "alpha
+beta gamma" to three separate tokens - "alpha", "beta" and "gamma" - in that
+order.
+
+</p><p>
+FTS queries are made up of <b>phrases</b>. A phrase is an ordered list of
+one or more tokens. The tokens from each string in the query each make up a
+single phrase. 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>-- Because NOT groups more tightly than OR, either of the following may</i>
+<i>-- be used to match all documents that contain the token "two" but not</i>
+<i>-- "three", or contain the token "one". </i>
+... MATCH 'one OR two NOT three'
+... MATCH 'one OR (two NOT three)'
+
+<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'
+</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. Implicit AND operators group more tightly than all other
+operators, including NOT. 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 NOT two three' <i>-- 'one NOT (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="https://tartarus.org/martin/PorterStemmer" /="1">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="https://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_trigram_tokenizer"><span>4.3.4. </span>The Trigram Tokenizer</h3>
+
+<p>
+The 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 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> case_sensitive
+ </td><td> This value may be set to 1 or 0 (the default). If it is set to 1,
+ then matching is case sensitive. Otherwise, if this option is set to
+ 0, matching is case insensitive.
+
+ </td></tr><tr style="text-align:left"><td> remove_diacritics
+ </td><td> This value may also be set to 1 or 0 (the default). It may only
+ be set to 1 if the case_sensitive options is set to 0 - setting both
+ options to 1 is an error. If this option is set, then diacritics are
+ removed from the text before matching (e.g. so that "á" matches "a").
+</td></tr></table>
+
+<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>
+Unless the remove_diacritics option is set, 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, in addition to building
+the index, FTS5 makes a copy of the original row content.
+When column values are requested from the FTS5 table by the user or by an
+auxiliary function implementation, those values are
+read from that private copy of the content. 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.
+
+<a name="clssdeltab"></a>
+
+</p><a name="contentless_delete_tables"></a>
+<h3 tags="FTS5 contentless-delete tables" id="contentless_delete_tables"><span>4.4.2. </span>Contentless-Delete Tables</h3>
+
+<p>As of version 3.43.0, also available are contentless-delete tables.
+A contentless-delete table is created by setting the content option to an
+empty string and also setting the contentless_delete option to 1. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE f1 USING fts5(a, b, c, content='', contentless_delete=1);
+</pre></div>
+
+<p>A contentless-delete table differs from a contentless table in that:
+
+</p><ul>
+ <li> Contentless-delete tables support both DELETE and "INSERT OR REPLACE
+ INTO" statements.
+ </li><li> Contentless-delete tables support UPDATE statements, but only if new
+ values are supplied for all user-defined columns of the fts5 table.
+ </li><li> Contentless-delete tables do <b>not</b> support the
+ <a href="fts5.html#the_delete_command">FTS5 delete command</a>.
+</li></ul>
+
+<div class="codeblock"><pre><i>-- Supported UPDATE statement:</i>
+UPDATE f1 SET a=?, b=?, c=? WHERE rowid=?;
+
+<i>-- This UPDATE is not supported, as it does not supply a new value</i>
+<i>-- for column "c".</i>
+UPDATE f1 SET a=?, b=? WHERE rowid=?;
+</pre></div>
+
+<p> Unless backwards compatibility is required, new code should prefer
+contentless-delete tables to contentless tables.
+
+</p><a name="external_content_tables"></a>
+<h3 tags="FTS5 external content tables" id="external_content_tables"><span>4.4.3. </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="external_content_table_pitfalls"></a>
+<h3 tags="FTS5 external content pitfalls" id="external_content_table_pitfalls"><span>4.4.4. </span>External Content Table Pitfalls</h3>
+
+<p>
+It is the responsibility of the user to ensure that an FTS5 external content
+table (one with a non-empty content= option) is kept consistent with the
+content table itself (the table named by the content= option). If these are
+allowed to become inconsistent, then the results of queries against the FTS5
+table may become unintuitive and appear inconsistent.
+
+</p><p>
+In these situations, the apparently inconsistent results produced by queries
+against the FTS5 external content table may be understood as follows:
+
+</p><ul>
+ <li><p> If the query does not use the full-text index - does not contain a
+ MATCH operator or equivalent table-valued function syntax - then the
+ query is effectively passed through to the external content table. In
+ this case the contents of the FTS index have no effect on the results
+ of the query.
+
+ </p></li><li><p> If the query does use the full text index, then the FTS5 module
+ queries it for the set of rowid values corresponding to documents that match
+ the query. For each such rowid, it then runs a query similar to the following
+ to retrieve any required column values, where '?' is replaced by the rowid
+ value, and &lt;content&gt; and &lt;content_rowid&gt; by the values specified
+ for the content= and content_rowid= options:
+</p></li></ul>
+
+<div class="codeblock"><pre>SELECT &lt;content_rowid&gt;, &lt;cols&gt; FROM &lt;content&gt; WHERE &lt;content_rowid&gt; = ?;
+</pre></div>
+
+<p>
+For example, if a database is created using the following script:
+
+</p><div class="codeblock"><pre><i>-- Create and populate a table. </i>
+CREATE TABLE tbl(a INTEGER PRIMARY KEY, t TEXT);
+INSERT INTO tbl VALUES(1, 'all that glitters');
+INSERT INTO tbl VALUES(2, 'is not gold');
+
+<i>-- Create an external content FTS5 table </i>
+CREATE VIRTUAL TABLE ft USING fts5(t, content='tbl', content_rowid='a');
+</pre></div>
+
+<p>then the content table contains two rows, but the FTS index contains no
+entries corresponding to them. In this case the following queries will return
+inconsistent results as follows:
+
+</p><div class="codeblock"><pre><i>-- Returns 2 rows. Because the query does not use the FTS index, it is</i>
+<i>-- effectively executed against table 'tbl' directly, and so returns</i>
+<i>-- both rows.</i>
+SELECT * FROM t1;
+
+<i>-- Returns 0 rows. This query does use the FTS index, which currently</i>
+<i>-- contains no entries. So it returns 0 rows.</i>
+SELECT rowid, t FROM t1('gold')
+</pre></div>
+
+<p>
+Alternatively, if the database were created and populated as follows:
+
+</p><div class="codeblock"><pre><i>-- Create and populate a table. </i>
+CREATE TABLE tbl(a INTEGER PRIMARY KEY, t TEXT);
+
+<i>-- Create an external content FTS5 table </i>
+CREATE VIRTUAL TABLE ft USING fts5(t, content='tbl', content_rowid='a');
+INSERT INTO ft(rowid, t) VALUES(1, 'all that glitters');
+INSERT INTO ft(rowid, t) VALUES(2, 'is not gold');
+</pre></div>
+
+<p>then the content table is empty, but the FTS index contains entries for
+6 different tokens. In this case the following queries will return
+inconsistent results as follows:
+
+</p><div class="codeblock"><pre><i>-- Returns 0 rows. Since it does not use the FTS index, the query is</i>
+<i>-- passed directly through to table 'tbl', which contains no data.</i>
+SELECT * FROM t1;
+
+<i>-- Returns 1 row. The "rowid" field of the returned row is 2, and</i>
+<i>-- the "t" field set to NULL. "t" is set to NULL because when the external</i>
+<i>-- content table "tbl" was queried for the data associated with the row</i>
+<i>-- with a=2 ("a" is the content_rowid column), none could be found.</i>
+SELECT rowid, t FROM t1('gold')
+</pre></div>
+
+<p>As described in the previous section, triggers on the content table are
+a good way to ensure that an FTS5 external content table is kept consistent.
+However, triggers are only fired when rows are inserted, updated or deleted
+in the content table. This means that if, for example, a database is created
+as follows:
+
+</p><div class="codeblock"><pre><i>-- Create and populate a table. </i>
+CREATE TABLE tbl(a INTEGER PRIMARY KEY, t TEXT);
+INSERT INTO tbl VALUES(1, 'all that glitters');
+INSERT INTO tbl VALUES(2, 'is not gold');
+
+<i>-- Create an external content FTS5 table </i>
+CREATE VIRTUAL TABLE ft USING fts5(t, content='tbl', content_rowid='a');
+
+<i>-- Create triggers to keep the FTS5 table up to date</i>
+CREATE TRIGGER tbl_ai AFTER INSERT ON tbl BEGIN
+ INSERT INTO ft(rowid, t) VALUES (new.a, new.t);
+END;
+&lt;similar triggers for update + delete&gt;
+</pre></div>
+
+<p>then the content table and external content FTS5 table are inconsistent, as
+creating the triggers does not copy existing rows from the content table
+into the FTS index. The triggers are only able to ensure that updates made to
+the content table after they are created are reflected in the FTS index.
+
+</p><p>In this, and any other situation where the FTS index and its content table
+have become inconsistent, the <a href="#the_rebuild_command">'rebuild'</a>
+command may be used to completely discard the contents of the FTS index and
+rebuild it based on the current contents of the content table.
+
+</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="the_tokendata_option"></a>
+<h2 tags="FTS5 tokendata option" id="the_tokendata_option"><span>4.7. </span>The Tokendata Option</h2>
+
+<p>This option is only useful to applications that implement
+<a href="#custom_tokenizers">custom tokenizers</a>. Usually, tokenizers may
+return tokens that consist of any sequence of bytes, including 0x00 bytes.
+However, if the table specifies the tokendata=1 option, then fts5 ignores
+the first 0x00 byte and any trailing data in the token for the purposes
+of matching. It still stores the entire token as returned by the tokenizer,
+but it is ignored by the fts5 core.
+
+</p><p>The full version of the token, including any 0x00 byte and trailing data,
+is available to <a href="#custom_auxiliary_functions">custom auxiliary
+functions</a> via the <a href="#xQueryToken">xQueryToken</a> and
+<a href="#xInstToken">xInstToken</a> APIs.
+
+</p><p>This may be useful for ranking functions. A custom tokenizer may
+add extra data to some document tokens allowing a ranking function to give
+more weight to hits of some tokens (e.g. those in document headings).
+
+</p><p>Alternatively, the combination of a custom tokenizer and a custom auxiliary
+function may be used to implement
+<a href="https://www.unicode.org/reports/tr10/tr10-41.html#Asymmetric_Search">
+asymmetric search</a>. The tokenizer could (say) for each document token return
+the case-normalized and unmarked version of the token, followed by an 0x00
+byte, followed by the full text of the token from the document. When queried,
+fts5 would provide results as if all characters in the query were
+case-normalized and unmarked. The custom auxiliary function could then be used
+in the WHERE clause of the query to filter out any rows that do not match based
+on secondary or tertiary markings in the document or query terms.
+
+</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="https://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 (including
+<a href="fts5.html#contentless_delete_tables">contentless-delete</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>
+
+<a name="the_deletemerge_configuration_option"></a>
+<h2 tags="deletemerge" id="the_deletemerge_configuration_option"><span>6.5. </span>The 'deletemerge' Configuration Option</h2>
+
+<p> The 'deletemerge' option is only used by
+<a href="fts5.html#contentless_delete_tables">contentless-delete</a> tables.
+
+</p><p> When a row is deleted from a contentless-delete table, the entries
+associated with its tokens are not immediately removed from the FTS index.
+Instead, a "tombstone" marker containing the rowid of the deleted row is
+attached to the b-tree that contains the row's FTS index entries. When the
+b-tree is queried, any query result rows for which there exist tombstone
+markers are omitted from the results. When the b-tree is merged with other
+b-trees, both the deleted rows and their tombstone markers are discarded.
+
+</p><p> This option specifies a minimum percentage of rows in a b-tree that must
+have tombstone markers before the b-tree is made eligible for merging -
+either by <a href="#the_automerge_configuration_option">automatic</a> merges or
+explicit user <a href="the_merge_command">'merge'</a> commands - even if it
+does not meet the usual criteria as determined by the 'automerge' and
+<a href="#the_usermerge_configuration_option">'usermerge'</a> options.
+
+</p><p> For example, to specify that FTS5 should consider merging a component
+b-tree after 15% of its rows have associated tombstone markers:
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('deletemerge', 15);
+</pre></div>
+
+<p> The default value of this option is 10. Attempting to set it to less than
+zero restores the default value. Setting this option to 0 or to greater than
+100 ensures that b-trees are never made eligible for merging due to tombstone
+markers.
+
+</p><h2 id="the_integrity_check_command"><span>6.6. </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.7. </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.8. </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.9. </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.10. </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.11. </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_secure_delete_configuration_option"></a>
+<h2 tags="FTS5 secure-delete command" id="the_secure_delete_configuration_option"><span>6.12. </span>The 'secure-delete' Configuration Option</h2>
+
+<p> This command is used to set the persistent boolean "secure-delete" option.
+For example:
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('secure-delete', 1);
+</pre></div>
+
+<p> Normally, when an entry in an fts5 table is updated or deleted, instead
+of removing entries from the full-text index, delete-keys are added to the <a href="#the_automerge_configuration_option">new b-tree</a> created by the
+transaction. This is efficient, but it means that the old full-text index
+entries remain in the database file until they are eventually removed
+by merge operations on the full-text index. Anyone with access to the
+database can use these entries to trivially reconstruct the contents of
+deleted FTS5 table rows. However, if the 'secure-delete' option is set
+to 1, then full-text entries are actually removed from the database when
+existing FTS5 table rows are updated or deleted. This is slower, but
+it prevents old full-text entries from being used to reconstruct deleted
+table rows.
+
+</p><p> This option ensures that old full-text entries are not available to
+attackers with SQL access to the database. To also ensure that they may
+not be recovered by attackers with access to the SQLite database file
+itself, the application must also enable the SQLite core secure-delete
+option with a command like <a href="pragma.html#pragma_secure_delete">
+"PRAGMA secure_delete = 1"</a>.
+
+</p><p> <b>Warning:</b> Once one or more table rows have been updated or
+deleted with this option set, the FTS5 table may no longer be read or
+written by any version of FTS5 earlier than 3.42.0 (the first version
+in which this option was available). Attempting to do so results in
+an error, with an error message like "invalid fts5 file format (found 5,
+expected 4) - run 'rebuild'". The FTS5 file format may be reverted, so
+that it may be read by earlier versions of FTS5, by running the
+<a href="#the_rebuild_command">'rebuild' command</a> on the table using
+version 3.42.0 or later.
+
+</p><p>The default value of the secure-delete option is 0.
+
+</p><a name="the_usermerge_configuration_option"></a>
+<h2 tags="FTS5 usermerge option" id="the_usermerge_configuration_option"><span>6.13. </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_bind_pointer(pStmt, 1, (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 *pUserData,
+ fts5_tokenizer *pTokenizer,
+ void (*xDestroy)(void*)
+ );
+
+ <i>/* Find an existing tokenizer */</i>
+ int (*xFindTokenizer)(
+ fts5_api *pApi,
+ const char *zName,
+ void **ppUserData,
+ fts5_tokenizer *pTokenizer
+ );
+
+ <i>/* Create a new auxiliary function */</i>
+ int (*xCreateFunction)(
+ fts5_api *pApi,
+ const char *zName,
+ void *pUserData,
+ 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 pUserData
+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 (3)) or query
+ text (method (2)), 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 pUserData 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="#xPhraseFirstColumn">xPhraseFirstColumn</a>)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*);
+ void (*<a href="#xPhraseNextColumn">xPhraseNextColumn</a>)(Fts5Context*, Fts5PhraseIter*, int *piCol);
+
+ <i>/* Below this point are iVersion>=3 only */</i>
+ int (*<a href="#xQueryToken">xQueryToken</a>)(Fts5Context*,
+ int iPhrase, int iToken,
+ const char **ppToken, int *pnToken
+ );
+ int (*<a href="#xInstToken">xInstToken</a>)(Fts5Context*, int iIdx, int iToken, const char**, int*);
+};
+</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">
+If parameter iCol is less than zero, or greater than or equal to the
+ number of columns in the table, SQLITE_RANGE is returned.
+</p>
+
+<p>
+ Otherwise, 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">
+If parameter iCol is less than zero, or greater than or equal to the
+ number of phrases in the current query, as returned by xPhraseCount,
+ 0 is returned. Otherwise, this function 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(). If iIdx is less than zero or greater than
+ or equal to the value returned by xInstCount(), SQLITE_RANGE is returned.
+</p>
+
+<p>
+ Otherwise, 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. SQLITE_OK is returned 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 parameter iPhrase is less than zero, or greater than or equal to
+ the number of phrases in the query, as returned by xPhraseCount(),
+ this function returns SQLITE_RANGE.
+</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>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xQueryToken">
+<b>int (*xQueryToken)(Fts5Context*,
+ int iPhrase, int iToken,
+ const char **ppToken, int *pnToken
+)</b></dt><dd>
+<p style="margin-top:0.1em">
+This is used to access token iToken of phrase iPhrase of the current
+ query. Before returning, output parameter *ppToken is set to point
+ to a buffer containing the requested token, and *pnToken to the
+ size of this buffer in bytes.
+</p>
+
+<p>
+ If iPhrase or iToken are less than zero, or if iPhrase is greater than
+ or equal to the number of phrases in the query as reported by
+ xPhraseCount(), or if iToken is equal to or greater than the number of
+ tokens in the phrase, SQLITE_RANGE is returned and *ppToken and *pnToken
+ are both zeroed.
+</p>
+
+<p>
+ The output text is not a copy of the query text that specified the
+ token. It is the output of the tokenizer module. For tokendata=1
+ tables, this includes any embedded 0x00 and trailing data.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xInstToken">
+<b>int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*)</b></dt><dd>
+<p style="margin-top:0.1em">
+This is used to access token iToken of phrase hit iIdx within the
+ current row. If iIdx is less than zero or greater than or equal to the
+ value returned by xInstCount(), SQLITE_RANGE is returned. Otherwise,
+ output variable (*ppToken) is set to point to a buffer containing the
+ matching document token, and (*pnToken) to the size of that buffer in
+ bytes. This API is not available if the specified token matches a
+ prefix query term. In that case both output variables are always set
+ to 0.
+</p>
+
+<p>
+ The output text is not a copy of the document text that was tokenized.
+ It is the output of the tokenizer module. For tokendata=1 tables, this
+ includes any embedded 0x00 and trailing data.
+</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>
+</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=10.
+
+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=1 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="#doclist_index_format">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 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="#external_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>
+
+
diff --git a/www/fullsql.html b/www/fullsql.html
new file mode 100644
index 0000000..87c3650
--- /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=629b1f592b">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..8bdae0d
--- /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=1b689d97b3">2022-11-09 20:11:26</a> UTC </small></i></p>
+
diff --git a/www/geopoly.html b/www/geopoly.html
new file mode 100644
index 0000000..8d5dac9
--- /dev/null
+++ b/www/geopoly.html
@@ -0,0 +1,581 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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>. However,
+depending on configuration options and the a particular version of SQLite
+you are using, the Geopoly extension may or may not be enabled by default.
+To ensure that Geopoly is enabled for your build,
+add the <a href="compile.html#enable_geopoly">-DSQLITE_ENABLE_GEOPOLY=1</a> compile-time option.
+
+</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>
+<svg width="600" height="300" style="border:1px solid black">
+<polyline points="140.003,100 80.0019,134.644 80.0019,65.3565 140.003,100" style="fill:none;stroke:red;stroke-width:2"></polyline> <text x="100" y="106" alignment-baseline="central" text-anchor="middle">3</text>
+<polyline points="240.003,100 200,140.003 159.997,100 200,59.9973 240.003,100" style="fill:none;stroke:orange;stroke-width:2"></polyline> <text x="200" y="106" alignment-baseline="central" text-anchor="middle">4</text>
+<polyline points="340.003,100 312.358,138.042 267.637,123.511 267.637,76.4893 312.358,61.9583 340.003,100" style="fill:none;stroke:green;stroke-width:2"></polyline> <text x="300" y="106" alignment-baseline="central" text-anchor="middle">5</text>
+<polyline points="440.003,100 419.998,134.644 380.002,134.644 359.997,100 380.002,65.3565 419.998,65.3565 440.003,100" style="fill:none;stroke:blue;stroke-width:2"></polyline> <text x="400" y="106" alignment-baseline="central" text-anchor="middle">6</text>
+<polyline points="540.003,100 524.94,131.276 491.101,138.995 463.959,117.353 463.959,82.6471 491.101,61.005 524.94,68.7243 540.003,100" style="fill:none;stroke:purple;stroke-width:2"></polyline> <text x="500" y="106" alignment-baseline="central" text-anchor="middle">7</text>
+<polyline points="140.003,200 128.286,228.286 100,240.003 71.7143,228.286 59.9973,200 71.7143,171.714 100,159.997 128.286,171.714 140.003,200" style="fill:none;stroke:red;stroke-width:2"></polyline> <text x="100" y="206" alignment-baseline="central" text-anchor="middle">8</text>
+<polyline points="240.003,200 232.363,223.511 212.358,238.042 187.642,238.042 167.637,223.511 159.997,200 167.637,176.489 187.642,161.958 212.358,161.958 232.363,176.489 240.003,200" style="fill:none;stroke:orange;stroke-width:2"></polyline> <text x="200" y="206" alignment-baseline="central" text-anchor="middle">10</text>
+<polyline points="340.003,200 334.644,219.998 319.998,234.644 300,240.003 280.002,234.644 265.356,219.998 259.997,200 265.356,180.002 280.002,165.356 300,159.997 319.998,165.356 334.644,180.002 340.003,200" style="fill:none;stroke:green;stroke-width:2"></polyline> <text x="300" y="206" alignment-baseline="central" text-anchor="middle">12</text>
+<polyline points="440.003,200 436.956,215.305 428.286,228.286 415.305,236.956 400,240.003 384.695,236.956 371.714,228.286 363.044,215.305 359.997,200 363.044,184.695 371.714,171.714 384.695,163.044 400,159.997 415.305,163.044 428.286,171.714 436.956,184.695 440.003,200" style="fill:none;stroke:blue;stroke-width:2"></polyline> <text x="400" y="206" alignment-baseline="central" text-anchor="middle">16</text>
+<polyline points="540.003,200 538.042,212.358 532.363,223.511 523.511,232.363 512.358,238.042 500,240.003 487.642,238.042 476.489,232.363 467.637,223.511 461.958,212.358 459.997,200 461.958,187.642 467.637,176.489 476.489,167.637 487.642,161.958 500,159.997 512.358,161.958 523.511,167.637 532.363,176.489 538.042,187.642 540.003,200" style="fill:none;stroke:purple;stroke-width:2"></polyline> <text x="500" y="206" alignment-baseline="central" text-anchor="middle">20</text>
+</svg>
+</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=7b64a47e71">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/getthecode.html b/www/getthecode.html
new file mode 100644
index 0000000..b36aba1
--- /dev/null
+++ b/www/getthecode.html
@@ -0,0 +1,274 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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.
+
+</p><h1 id="verifying_that_the_code_is_unmodified"><span>4. </span>Verifying That The Code Is Unmodified</h1>
+
+<p>
+The "<tt>manifest</tt>" file at the root directory of the source tree
+contains either a SHA3-256 hash or a SHA1 hash for every source file
+in the repository. The name of the version of the entire source tree
+is just the SHA3-256 hash of the "<tt>manifest</tt>" file itself, possibly with
+the last line of that file omitted if the last line begins with
+"# Remove this line". The "<tt>manifest.uuid</tt>" file should contain
+the SHA3-256 hash of the "<tt>manifest</tt>" file. If all of the above hash
+comparisons are correct, then you can be confident that your source
+tree is authentic and unadulterated. Details on the format of
+manifest files are available on the
+<a href="https://fossil-scm.org/home/doc/trunk/www/fileformat.wiki#manifest">
+Fossil website</a>.
+
+</p><p>
+The process of checking source code authenticity is automated by the makefile:
+
+</p><div class="codeblock"><pre>make verify-source
+</pre></div>
+
+<p>
+Or on windows:
+
+</p><div class="codeblock"><pre>nmake /f Makefile.msc verify-source
+</pre></div>
+
+<p>
+Using the makefile to verify source integrity is good for detecting
+accidental changes to the source tree, but malicious changes could
+be hidden by also modifying the makefiles.
+
+<a name="clone"></a>
+
+</p><h1 id="cloning_the_complete_development_history"><span>5. </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>
+
diff --git a/www/hirely.html b/www/hirely.html
new file mode 100644
index 0000000..910c31f
--- /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=0d1c8f0b9a">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/howitworks.html b/www/howitworks.html
new file mode 100644
index 0000000..a313691
--- /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>
+
+
diff --git a/www/howtocompile.html b/www/howtocompile.html
new file mode 100644
index 0000000..ffc08af
--- /dev/null
+++ b/www/howtocompile.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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 principles 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</p>
+
+<ul>
+ <li><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,</li>
+ <li><a href="compile.html#enable_rtree">-DSQLITE_ENABLE_RTREE</a> for the R*Tree search engine extension,</li>
+ <li><a href="compile.html#enable_dbstat_vtab">-DSQLITE_ENABLE_DBSTAT_VTAB</a> for the <a href="dbstat.html">dbstat virtual table</a>, or</li>
+ <li><a href="compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> for extended math functions.</li>
+</ul>
+
+<p>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. 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_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="https://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="https://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>
+
+
diff --git a/www/howtocorrupt.html b/www/howtocorrupt.html
new file mode 100644
index 0000000..51a089d
--- /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_systems">8.6. Race condition in recovery on Windows systems</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_systems"><span>8.6. </span> Race condition in recovery on Windows systems</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>
+
diff --git a/www/hp1.html b/www/hp1.html
new file mode 100644
index 0000000..d1cb02a
--- /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=d6345b6736">2022-01-08 05:02:57</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/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..52c3b1d
--- /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..0a20b75
--- /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=219fd65ee2">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/index.html b/www/index.html
new file mode 100644
index 0000000..c9e892a
--- /dev/null
+++ b/www/index.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>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_45_1.html">Version 3.45.1</a> (2024-01-30).
+<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=d95fdbf2bb">2024-01-23 13:42:58</a> UTC </small></i></p>
+
diff --git a/www/inmemorydb.html b/www/inmemorydb.html
new file mode 100644
index 0000000..df4e732
--- /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=2e26d2c7a8">2022-04-18 02:55:50</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..d8e7fce
--- /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=1022bf7228">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/invalidutf.html b/www/invalidutf.html
new file mode 100644
index 0000000..0c6c2d3
--- /dev/null
+++ b/www/invalidutf.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>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><h1 id="invalid_utf_in_the_database_schema"><span>4. </span>Invalid UTF in the database schema</h1>
+
+<p>
+If a database schema contains names (table names, column names, index
+names, and so forth) that are invalid UTF, SQLite will continue to
+operate normally. As far as SQLite is concerned, those names are just
+byte sequences. SQLite does not care whether they are valid UTF or not.
+
+</p><p>
+When generating error messages (using, for example, <a href="c3ref/errcode.html">sqlite3_errmsg()</a>),
+sometimes SQLite will embedded parts of the database schema into the
+error message. If those embedded schema elements
+are invalid UTF, then the resulting error message might also be
+invalid UTF.
+Similarly, the output from the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and similar
+statements will sometimes embed the names of schema elements. If those
+schema element names are invalid UTF, then the output of the command
+will also be invalid UTF.
+</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=33df79fd55">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/isolation.html b/www/isolation.html
new file mode 100644
index 0000000..c45e37a
--- /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=aa8b8e3ef6">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/json1.html b/www/json1.html
new file mode 100644
index 0000000..a3f10da
--- /dev/null
+++ b/www/json1.html
@@ -0,0 +1,1620 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="#jsonb">3.2. JSONB</a></div>
+<div class="fancy-toc3"><a href="#the_jsonb_format">3.2.1. The JSONB format</a></div>
+<div class="fancy-toc3"><a href="#handling_of_malformed_jsonb">3.2.2. Handling of malformed JSONB</a></div>
+<div class="fancy-toc2"><a href="#path_arguments">3.3. PATH arguments</a></div>
+<div class="fancy-toc2"><a href="#value_arguments">3.4. VALUE arguments</a></div>
+<div class="fancy-toc2"><a href="#compatibility">3.5. Compatibility</a></div>
+<div class="fancy-toc2"><a href="#json5_extensions">3.6. JSON5 Extensions</a></div>
+<div class="fancy-toc2"><a href="#performance_considerations">3.7. Performance Considerations</a></div>
+<div class="fancy-toc2"><a href="#the_json_blob_input_bug">3.8. The JSON BLOB Input Bug</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_jsonb_function">4.2. The jsonb() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_array_function">4.3. The json_array() function</a></div>
+<div class="fancy-toc2"><a href="#the_jsonb_array_function">4.4. The jsonb_array() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_array_length_function">4.5. The json_array_length() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_error_position_function">4.6. The json_error_position() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_extract_function">4.7. The json_extract() function</a></div>
+<div class="fancy-toc2"><a href="#the_jsonb_extract_function">4.8. The jsonb_extract() function</a></div>
+<div class="fancy-toc2"><a href="#the_and_operators">4.9. The -> and ->> operators</a></div>
+<div class="fancy-toc2"><a href="#the_json_insert_json_replace_and_json_set_functions">4.10. The json_insert(), json_replace, and json_set() functions</a></div>
+<div class="fancy-toc2"><a href="#the_jsonb_insert_jsonb_replace_and_jsonb_set_functions">4.11. The jsonb_insert(), jsonb_replace, and jsonb_set() functions</a></div>
+<div class="fancy-toc2"><a href="#the_json_object_function">4.12. The json_object() function</a></div>
+<div class="fancy-toc2"><a href="#the_jsonb_object_function">4.13. The jsonb_object() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_patch_function">4.14. The json_patch() function</a></div>
+<div class="fancy-toc2"><a href="#the_jsonb_patch_function">4.15. The jsonb_patch() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_remove_function">4.16. The json_remove() function</a></div>
+<div class="fancy-toc2"><a href="#the_jsonb_remove_function">4.17. The jsonb_remove() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_type_function">4.18. The json_type() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_valid_function">4.19. The json_valid() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_quote_function">4.20. The json_quote() function</a></div>
+<div class="fancy-toc2"><a href="#array_and_object_aggregate_functions">4.21. Array and object aggregate functions</a></div>
+<div class="fancy-toc2"><a href="#the_json_each_and_json_tree_table_valued_functions">4.22. 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.22.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 twenty-nine 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 25 scalar functions and operators:
+
+</p><ol>
+<li value='1'>
+<a href='#jmini'>json</a>(<i>json</i>)
+</li>
+
+<li value='2'>
+<a href='#jminib'>jsonb</a>(<i>json</i>)
+</li>
+
+<li value='3'>
+<a href='#jarray'>json_array</a>(<i>value1</i>,<i>value2</i>,...)
+</li>
+
+<li value='4'>
+<a href='#jarrayb'>jsonb_array</a>(<i>value1</i>,<i>value2</i>,...)
+</li>
+
+<li value='5'>
+<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='6'>
+<a href='#jerr'>json_error_position</a>(<i>json</i>)
+</li>
+
+<li value='7'>
+<a href='#jex'>json_extract</a>(<i>json</i>,<i>path</i>,...)
+</li>
+
+<li value='8'>
+<a href='#jexb'>jsonb_extract</a>(<i>json</i>,<i>path</i>,...)
+</li>
+
+<li value='9'>
+<i>json</i> <a href='#jptr'>-></a> <i>path</i>
+</li>
+
+<li value='10'>
+<i>json</i> <a href='#jptr'>->></a> <i>path</i>
+</li>
+
+<li value='11'>
+<a href='#jins'>json_insert</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='12'>
+<a href='#jinsb'>jsonb_insert</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='13'>
+<a href='#jobj'>json_object</a>(<i>label1</i>,<i>value1</i>,...)
+</li>
+
+<li value='14'>
+<a href='#jobjb'>jsonb_object</a>(<i>label1</i>,<i>value1</i>,...)
+</li>
+
+<li value='15'>
+<a href='#jpatch'>json_patch</a>(<i>json</i>1,json2)
+</li>
+
+<li value='16'>
+<a href='#jpatchb'>jsonb_patch</a>(<i>json</i>1,json2)
+</li>
+
+<li value='17'>
+<a href='#jrm'>json_remove</a>(<i>json</i>,<i>path</i>,...)
+</li>
+
+<li value='18'>
+<a href='#jrmb'>jsonb_remove</a>(<i>json</i>,<i>path</i>,...)
+</li>
+
+<li value='19'>
+<a href='#jrepl'>json_replace</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='20'>
+<a href='#jreplb'>jsonb_replace</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='21'>
+<a href='#jset'>json_set</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='22'>
+<a href='#jsetb'>jsonb_set</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='23'>
+<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='24'>
+<a href='#jvalid'>json_valid</a>(<i>json</i>)<br><a href='#jvalid'>json_valid</a>(<i>json</i>,flags)
+</li>
+
+<li value='25'>
+<a href='#jquote'>json_quote</a>(<i>value</i>)
+</li>
+
+
+</ol>
+
+<p>There are four <a href="lang_aggfunc.html">aggregate SQL functions</a>:
+
+</p><ol>
+<li value='26'>
+<a href='#jgrouparray'>json_group_array</a>(<i>value</i>)
+</li>
+
+<li value='27'>
+<a href='#jgrouparrayb'>jsonb_group_array</a>(<i>value</i>)
+</li>
+
+<li value='28'>
+<a href='#jgroupobject'>json_group_object</a>(<i>label</i>,<i>value</i>)
+</li>
+
+<li value='29'>
+<a href='#jgroupobjectb'>jsonb_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='30'>
+<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='31'>
+<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 new "JSON" type.
+
+
+</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>,
+<a href="json1.html#jquote">json_quote()</a>, and <a href="json1.html#jerr">json_error_position()</a>.)
+
+</p><p>
+These routines understand all
+<a href="https://www.rfc-editor.org/rfc/rfc8259.txt">rfc-8259 JSON syntax</a>
+and also <a href="https://spec.json5.org/">JSON5 extensions</a>. JSON text
+generated by these routines always strictly conforms to the
+<a href="https://json.org">canonical JSON definition</a> and does not contain any JSON5
+or other extensions. The ability to read and understand JSON5 was added in
+version 3.42.0 (2023-05-16).
+Prior versions of SQLite would only read canonical JSON.
+
+<a name="jsonbx"></a>
+
+</p><h2 id="jsonb"><span>3.2. </span>JSONB</h2>
+
+<p>
+Beginning with version 3.45.0 (2024-01-15), SQLite allows its
+internal "parse tree" representation of JSON to be stored on disk,
+as a BLOB, in a format that we call "JSONB". By storing SQLite's internal
+binary representation of JSON directly in the database, applications
+can bypass the overhead of parsing and rendering JSON when reading and
+updating JSON values. The internal JSONB format is also uses slightly
+less disk space then text JSON.
+
+</p><p>
+Any SQL function parameter that accepts text JSON as an input will also
+accept a BLOB in the JSONB format. The function will operate the
+same in either case, except that it will run faster when
+the input is JSONB, since it does not need to run the JSON parser.
+
+</p><p>
+Most SQL functions that return JSON text have a corresponding function
+that returns the equivalent JSONB. The functions that return JSON
+in the text format begin with "<tt>json_</tt>" and functions that
+return the binary JSONB format begin with "<tt>jsonb_</tt>".
+
+</p><h3 id="the_jsonb_format"><span>3.2.1. </span>The JSONB format</h3>
+
+<p>
+JSONB is a binary representation of JSON used by SQLite and
+is intended for internal use by SQLite only. Applications
+should not use JSONB outside of SQLite nor try to reverse-engineer the
+JSONB format.
+
+</p><p>
+The "JSONB" name is inspired by <a href="https://postgresql.org">PostgreSQL</a>, but the
+on-disk format for SQLite's JSONB is not the same as PostgreSQL's.
+The two formats have the same name, but are not binary compatible.
+The PostgreSQL JSONB format claims to offer O(1)
+lookup of elements in objects and arrays. SQLite's JSONB format makes no
+such claim. SQLite's JSONB has O(N) time complexity for
+most operations in SQLite, just like text JSON. The advantage of JSONB in
+SQLite is that it is smaller and faster than text JSON - potentially several
+times faster. There is space in the
+on-disk JSONB format to add enhancements and future versions of SQLite might
+include options to provide O(1) lookup of elements in JSONB, but no such
+capability is currently available.
+
+</p><h3 id="handling_of_malformed_jsonb"><span>3.2.2. </span>Handling of malformed JSONB</h3>
+
+<p>
+The JSONB that is generated by SQLite will always be well-formed. If you
+follow recommended practice and
+treat JSONB as an opaque BLOB, then you will not have any problems. But
+JSONB is just a BLOB, so a mischievous programmer could devise BLOBs
+that are similar to JSONB but that are technically malformed. When
+misformatted JSONB is feed into JSON functions, any of the following
+might happen:
+
+</p><ul>
+<li><p>
+The SQL statement might abort with a "malformed JSON" error.
+
+</p></li><li><p>
+The correct answer might be returned, if the malformed parts of
+the JSONB blob do not impact the answer.
+
+</p></li><li><p>
+A goofy or nonsensical answer might be returned.
+</p></li></ul>
+
+<p>
+The way in which SQLite handles invalid JSONB might change
+from one version of SQLite to the next. The system follows
+the garbage-in/garbage-out rule: If you feed the JSON functions invalid
+JSONB, you get back an invalid answer. If you are in doubt about the
+validity of our JSONB, use the <a href="json1.html#jvalid">json_valid()</a> function to verify it.
+
+</p><p>
+We do make this one promise:
+Malformed JSONB will never cause a memory
+error or similar problem that might lead to a vulnerability.
+Invalid JSONB might lead to crazy answers,
+or it might cause queries to abort, but it won't cause a crash.
+
+<a name="jsonpath"></a>
+
+</p><h2 id="path_arguments"><span>3.3. </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.4. </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><p>
+Within JSON value arguments interpreted as JSON strings, Unicode escape
+sequences are not treated as equivalent to the characters or escaped
+control characters represented by the expressed Unicode code point.
+Such escape sequences are not translated or specially treated; they
+are treated as plain text by SQLite's JSON functions.
+
+</p><h2 id="compatibility"><span>3.5. </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 1000 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/rfc8259#section-9">RFC-8259 section 9</a>.
+
+<a name="json5"></a>
+
+</p><h2 id="json5_extensions"><span>3.6. </span>JSON5 Extensions</h2>
+
+<p>
+Beginning in version 3.42.0 (2023-05-16), these routines will
+read and interpret input JSON text that includes
+<a href="https://spec.json5.org/">JSON5</a> extensions. However, JSON text generated
+by these routines will always be strictly conforming to the
+<a href="https://json.org">canonical definition of JSON</a>.
+
+</p><p>
+Here is a synopsis of JSON5 extensions (adapted from the
+<a href="https://spec.json5.org/#introduction">JSON5 specification</a>):
+
+</p><ul>
+<li> Object keys may be unquoted identifiers.
+</li><li> Objects may have a single trailing comma.
+</li><li> Arrays may have a single trailing comma.
+</li><li> Strings may be single quoted.
+</li><li> Strings may span multiple lines by escaping new line characters.
+</li><li> Strings may include new character escapes.
+</li><li> Numbers may be hexadecimal.
+</li><li> Numbers may have a leading or trailing decimal point.
+</li><li> Numbers may be "Infinity", "-Infinity", and "NaN".
+</li><li> Numbers may begin with an explicit plus sign.
+</li><li> Single (//...) and multi-line (/*...*/) comments are allowed.
+</li><li> Additional white space characters are allowed.
+</li></ul>
+
+<p>
+To convert string X from JSON5 into canonical JSON, invoke
+"<a href="json1.html#jmini">json(X)</a>". The output of the "<a href="json1.html#jmini">json()</a>" function will be canonical
+JSON regardless of any JSON5 extensions that are present in the input.
+For backwards compatibility, the <a href="json1.html#jvalid">json_valid(X)</a> function without a
+"flags" argument continues
+to report false for inputs that are not canonical JSON, even if the
+input is JSON5 that the function is able to understand. To determine
+whether or not an input string is valid JSON5, include the 0x02 bit
+in the "flags" argument to json_valid: "<tt>json_valid(X,2)</tt>".
+
+</p><p>
+These routines understand all of JSON5, plus a little more.
+SQLite extends the JSON5 syntax in these two ways:
+
+</p><ol>
+<li><p>
+Strict JSON5 requires that
+unquoted object keys must be ECMAScript 5.1 IdentifierNames. But large
+unicode tables and lots of code is required in order to determine whether or
+not a key is an ECMAScript 5.1 IdentifierName. For this reason,
+SQLite allows object keys to include any unicode characters
+greater than U+007f that are not whitespace characters. This relaxed
+definition of "identifier" greatly simplifies the implementation and allows
+the JSON parser to be smaller and run faster.
+
+</p></li><li><p>
+JSON5 allows floating-point infinities to be expressed as
+"<tt>Infinity</tt>", "<tt>-Infinity</tt>", or "<tt>+Infinity</tt>"
+in exactly that case - the initial "I" is capitalized and all other
+characters are lower case. SQLite also allows the abbreviation "<tt>Inf</tt>"
+to be used in place of "<tt>Infinity</tt>" and it allows both keywords
+to appear in any combination of upper and lower case letters.
+Similarly,
+JSON5 allows "NaN" for not-a-number. SQLite extends this to also allow
+"QNaN" and "SNaN" in any combination of upper and lower case letters.
+Note that SQLite interprets NaN, QNaN, and SNaN as just an alternative
+spellings for "null".
+This extension has been added because (we are told) there exists a lot
+of JSON in the wild that includes these non-standard representations
+for infinity and not-a-number.
+</p></li></ol>
+
+
+<h2 id="performance_considerations"><span>3.7. </span>Performance Considerations</h2>
+
+<p>
+Most JSON functions do their internal processing using JSONB. So if the
+input is text, they first most translate the input text into JSONB.
+If the input is already in the JSONB format, no translation is needed,
+that step can be skipped, and performance is faster.
+
+</p><p>
+For that reason,
+when an argument to one JSON function is supplied by another
+JSON function, it is usually more efficient to use the "<tt>jsonb_</tt>"
+variant for the function used as the argument.
+
+</p><ul>
+<li>
+ <tt>... json_insert(A,'$.b',json(C)) ...</tt>
+ &nbsp; &larr; Less efficient.
+</li><li>
+ <tt>... json_insert(A,'$.b',jsonb(C)) ...</tt>
+ &nbsp; &larr; More efficient.
+</li></ul>
+
+
+<p>
+The <a href="json1.html#jgroupobjectb">aggregate JSON SQL functions</a> are an exception to this rule. Those
+functions all do their processing using text instead of JSONB. So for the
+aggregate JSON SQL functions, it is more efficient for the arguments
+to be supplied using "<tt>json_</tt>" functions than "<tt>jsonb_</tt>"
+functions.
+
+</p><ul>
+<li>
+ <tt>... json_group_array(json(A))) ...</tt>
+ &nbsp; &larr; More efficient.
+</li><li>
+ <tt>... json_group_array(jsonb(A))) ...</tt>
+ &nbsp; &larr; Less efficient.
+</li></ul>
+
+<a name="jblobbug"></a>
+
+<h2 id="the_json_blob_input_bug"><span>3.8. </span>The JSON BLOB Input Bug</h2>
+
+<p>If a JSON input is a BLOB that is not JSONB and that looks like
+text JSON when cast to text, then it is accepted as text JSON.
+This is actually a long-standing bug in the original implementation
+that the SQLite developers were unaware of. The documentation stated
+that a BLOB input to a JSON function should raise an error. But in the
+actually implementation, the input would be accepted as long
+as the BLOB content was a valid JSON string in the text encoding of
+the database.
+
+</p><p>This JSON BLOB input bug was accidentally fixed when the JSON routines
+were reimplemented for the 3.45.0 release (2024-01-15).
+That caused breakage in applications that had come to depend on the old
+behavior. (In defense of those applications: they were often lured into
+using BLOBs as JSON by the <a href="cli.html#fileio">readfile()</a> SQL function
+available in the <a href="cli.html">CLI</a>. Readfile() was used to read JSON from disk files,
+but readfile() returns a BLOB. And that worked for them, so why not just
+do it?)
+
+</p><p>For backwards compatibility,
+the (formerly incorrect) legacy behavior of interpreting BLOBs as text JSON
+if no other interpretation works
+is hereby documented and is be officially supported in
+version 3.45.1 (2024-01-30) and all subsequent releases.
+
+</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 or JSONB blob and returns a minified version of that JSON string
+with all unnecessary whitespace removed. If X is not a well-formed
+JSON string or JSONB blob, then this routine throws an error.
+
+</p><p>If the input is JSON5 text, then it is converted into canonical
+RFC-8259 text prior to being returned.
+
+</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="jminib"></a>
+
+</p><h2 id="the_jsonb_function"><span>4.2. </span>The jsonb() function</h2>
+
+<p>The jsonb(X) function returns the binary JSONB representation
+of the JSON provided as argument X. An error is raised if X is
+TEXT that does not have valid JSON syntax.
+
+</p><p>If X is a BLOB and appears to be JSONB,
+then this routine simply returns a copy of X.
+Only the outer-most element of the JSONB input is examined, however.
+The deep structure of the JSONB is not validated.
+
+<a name="jarray"></a>
+
+</p><h2 id="the_json_array_function"><span>4.3. </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="jarrayb"></a>
+
+</p><h2 id="the_jsonb_array_function"><span>4.4. </span>The jsonb_array() function</h2>
+
+<p>The jsonb_array() SQL function works just like the <a href="json1.html#jarray">json_array()</a>
+function except that it returns the constructed JSON array in the
+SQLite's private JSONB format rather than in the standard
+RFC 8259 text format.
+
+<a name="jarraylen"></a>
+
+</p><h2 id="the_json_array_length_function"><span>4.5. </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 in X that is not 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="jerr"></a>
+
+</p><h2 id="the_json_error_position_function"><span>4.6. </span>The json_error_position() function</h2>
+
+<p>The json_error_positionf(X) function returns 0 if the input X is a
+well-formed JSON or JSON5 string. If the input X contains one or more
+syntax errors, then this function returns the character position of the
+first syntax error. The left-most character is position 1.
+
+</p><p>If the input X is a BLOB, then this routine returns 0 if X is
+a well-formed JSONB blob. If the return value is positive, then it
+represents the <i>approximate</i> 1-based position in the BLOB of the
+first detected error.
+
+</p><p>
+The json_error_position() function was added with
+SQLite version 3.42.0 (2023-05-16).
+
+
+<a name="jex"></a>
+
+</p><h2 id="the_json_extract_function"><span>4.7. </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="jexb"></a>
+
+<h2 id="the_jsonb_extract_function"><span>4.8. </span>The jsonb_extract() function</h2>
+
+<p>
+The jsonb_extract() function works the same as the <a href="json1.html#jex">json_extract()</a> function,
+except in cases where json_extract() would normally return a text
+JSON array object, this routine returns the array or object in the
+JSONB format. For the common case where a text, numeric, null, or
+boolean JSON element is returned, this routine works exactly the same
+as json_extract().
+
+
+<a name="jptr"></a>
+
+</p><h2 id="the_and_operators"><span>4.9. </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 -> and ->> strives to be
+compatible with both MySQL and PostgreSQL.
+The -> and ->> operators take a JSON string or JSONB blob
+as their left operand and a PATH expression or object field
+label or array index as their right operand. The -> operator
+returns a text 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>When the -> operator returns JSON, it always returns the
+RFC 8565 text representation of that JSON, not JSONB. Use the
+<a href="json1.html#jexb">jsonb_extract()</a> function if you need a subcomponent in the
+JSONB format.
+
+</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 object label or
+integer array index 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[2].f'</span>
+<span class='jans'>&rarr; 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.10. </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
+json 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="jinsb"></a>
+
+<a name="jreplb"></a>
+
+<a name="jsetb"></a>
+
+</p><h2 id="the_jsonb_insert_jsonb_replace_and_jsonb_set_functions"><span>4.11. </span>The jsonb_insert(), jsonb_replace, and jsonb_set() functions</h2>
+
+<p>The jsonb_insert(), jsonb_replace(), and jsonb_set() functions work the
+same as <a href="json1.html#jins">json_insert()</a>, <a href="json1.html#jrepl">json_replace()</a>, and <a href="json1.html#jset">json_set()</a>, respectively,
+except that "<tt>jsonb_</tt>" versions return their result in the binary
+JSONB format.
+
+<a name="jobj"></a>
+
+</p><h2 id="the_json_object_function"><span>4.12. </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="jobjb"></a>
+
+</p><h2 id="the_jsonb_object_function"><span>4.13. </span>The jsonb_object() function</h2>
+
+<p>
+The jsonb_object() function works just like the <a href="json1.html#jobj">json_object()</a> function
+except that the generated object is returned in the binary JSONB format.
+
+<a name="jpatch"></a>
+
+</p><h2 id="the_json_patch_function"><span>4.14. </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="jpatchb"></a>
+
+</p><h2 id="the_jsonb_patch_function"><span>4.15. </span>The jsonb_patch() function</h2>
+
+<p>
+The jsonb_patch() function works just like the <a href="json1.html#jpatch">json_patch()</a> function
+except that the patched JSON is returned in the binary JSONB format.
+
+<a name="jrm"></a>
+
+</p><h2 id="the_json_remove_function"><span>4.16. </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.
+
+</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="jrmb"></a>
+
+</p><h2 id="the_jsonb_remove_function"><span>4.17. </span>The jsonb_remove() function</h2>
+<p>
+The jsonb_remove() function works just like the <a href="json1.html#jrm">json_remove()</a> function
+except that the edited JSON result is returned in the binary JSONB format.
+
+<a name="jtype"></a>
+
+</p><h2 id="the_json_type_function"><span>4.18. </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 its first argument is
+not well-formed JSON or JSONB or if its second argument is not a well-formed
+JSON path.
+
+</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.19. </span>The json_valid() function</h2>
+
+<p>The json_valid(X,Y) function return 1 if the argument X is well-formed
+JSON, or returns 0 if X is not well-formed. The Y parameter is an integer
+bitmask that defines what is meant by "well-formed". The following bits
+of Y are currently defined:
+
+</p><ul>
+<li> <b>0x01</b> &rarr;
+The input is text that strictly complies with canonical RFC-8259 JSON,
+without any extensions.
+</li><li> <b>0x02</b> &rarr;
+The input is text that is JSON with <a href="json1.html#json5">JSON5</a> extensions described above.
+</li><li> <b>0x04</b> &rarr;
+The input is a BLOB that superficially appears to be <a href="json1.html#jsonbx">JSONB</a>.
+</li><li> <b>0x08</b> &rarr;
+The input is a BLOB that strictly conforms to the internal <a href="json1.html#jsonbx">JSONB</a> format.
+</li></ul>
+
+<p>By combining bits, the following useful values of Y can be derived:
+
+</p><ul>
+<li> <b>1</b> &rarr; X is RFC-8259 JSON text
+</li><li> <b>2</b> &rarr; X is <a href="json1.html#json5">JSON5</a> text
+</li><li> <b>4</b> &rarr; X is probably <a href="json1.html#jsonbx">JSONB</a>
+</li><li> <b>5</b> &rarr; X is RFC-8259 JSON text or <a href="json1.html#jsonbx">JSONB</a>
+</li><li> <b>6</b> &rarr; X is <a href="json1.html#json5">JSON5</a> text or <a href="json1.html#jsonbx">JSONB</a>
+ &larr; <i>This is probably the value you want</i>
+</li><li> <b>8</b> &rarr; X is strictly conforming <a href="json1.html#jsonbx">JSONB</a>
+</li><li> <b>9</b> &rarr; X is RFC-8259 or strictly conforming <a href="json1.html#jsonbx">JSONB</a>
+</li><li> <b>10</b> &rarr; X is JSON5 or strictly conforming <a href="json1.html#jsonbx">JSONB</a>
+</li></ul>
+
+<p>The Y parameter is optional. If omitted, it defaults to 1, which means
+that the default behavior is to return true only if the input X is
+strictly conforming RFC-8259 JSON text without any extensions. This
+makes the one-argument version of json_valid() compatible with older
+versions of SQLite, prior to the addition of support for
+<a href="json1.html#json5">JSON5</a> and <a href="json1.html#jsonbx">JSONB</a>.
+
+</p><p>The difference between 0x04 and 0x08 bits in the Y parameter is that
+0x04 only examines the outer wrapper of the BLOB to see if it superficially
+looks like <a href="json1.html#jsonbx">JSONB</a>. This is sufficient for must purposes and is very fast.
+The 0x08 bit does a thorough examination of all internal details of the BLOB.
+The 0x08 bit takes time that is linear in the size of the X input and is much
+slower. The 0x04 bit is recommended for most purposes.
+
+</p><p>If you just want to know if a value is a plausible input to one of
+the other JSON functions, a Y value of 6 is probably what you want to use.
+
+</p><p>Any Y value less than 1 or greater than 15 raises an error, for the
+latest version of json_valid(). However, future versions of json_valid()
+might be enhanced to accept flag values outside of this range, having new
+meanings that we have not yet thought of.
+
+</p><p>If either X or Y inputs to json_valid() are NULL, then the function
+returns NULL.
+
+</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>
+
+<li><span class='jex'>json_valid('{x:35}',6)</span>
+<span class='jans'>&rarr; 1</span></li>
+
+<li><span class='jex'>json_valid('{"x":35')</span>
+<span class='jans'>&rarr; 0</span></li>
+
+<li><span class='jex'>json_valid(NULL)</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+</ul>
+
+
+<a name="jquote"></a>
+
+</p><h2 id="the_json_quote_function"><span>4.20. </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>
+<a name="jgrouparrayb"></a>
+<a name="jgroupobjectb"></a>
+
+</p><h2 id="array_and_object_aggregate_functions"><span>4.21. </span>Array and object aggregate 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.
+The "<tt>jsonb_</tt>" variants are the same except that they return their
+result in the binary <a href="json1.html#jsonbx">JSONB</a> format.
+
+<a name="jeach"></a>
+
+<a name="jtree"></a>
+
+</p><h2 id="the_json_each_and_json_tree_table_valued_functions"><span>4.22. </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.22.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>
+
+
diff --git a/www/keyword_index.html b/www/keyword_index.html
new file mode 100644
index 0000000..a32498e
--- /dev/null
+++ b/www/keyword_index.html
@@ -0,0 +1,3228 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="json1.html#jgroupobjectb">aggregate JSON SQL functions</a> </li>
+<li> <a href="lang_aggfunc.html">aggregate SQL 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="cli.html#base64">base64() SQL function</a> </li>
+<li> <a href="cli.html#base85">base85() SQL function</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="printf.html#comma">comma option</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="lang_corefunc.html#concat">concat() SQL function</a> </li>
+<li> <a href="lang_corefunc.html#concat_ws">concat_ws() SQL function</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="fts5.html#clssdeltab">contentless-delete</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#dttm">date()</a> </li>
+<li> <a href="lang_datefunc.html#dttm">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#dttm">datetime()</a> </li>
+<li> <a href="lang_datefunc.html#dttm">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="fts5.html#the_deletemerge_configuration_option">deletemerge</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#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="quirks.html#dblquote">double-quoted string misfeature</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#disable_pagecache_overflow_stats">-DSQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS</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_hidden_columns">-DSQLITE_ENABLE_HIDDEN_COLUMNS</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#json_max_depth">-DSQLITE_JSON_MAX_DEPTH</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#strict_subtype">-DSQLITE_STRICT_SUBTYPE</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_seh">-DSQLITE_USE_SEH</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#contentless_delete_tables">FTS5 contentless-delete 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_table_pitfalls">FTS5 external content pitfalls</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#the_secure_delete_configuration_option">FTS5 secure-delete 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#the_tokendata_option">FTS5 tokendata option</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="syntax/function-arguments.html">function-arguments</a> </li>
+<li> <a href="syntax/function-arguments.html">function-arguments syntax diagram</a> </li>
+<li> <a href="pragma.html#pragma_function_list">function_list pragma</a> </li>
+<li> <a href="lang_expr.html#*funcinexpr">functions within expressions</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#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#fpapprox">IEEE 754 floating point values are approximations</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="expridx.html">indexed expression</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="testing.html#dbsqlfuzz">jfuzz</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#jblobbug">JSON BLOB input bug</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#json5">JSON5</a> </li>
+<li> <a href="json1.html#json5">JSON5 extensions</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#jerr">json_error_position</a> </li>
+<li> <a href="json1.html#jerr">json_error_position SQL 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="json1.html#jsonbx">JSONB</a> </li>
+<li> <a href="json1.html#jminib">jsonb SQL function</a> </li>
+<li> <a href="json1.html#jarrayb">jsonb_array</a> </li>
+<li> <a href="json1.html#jarrayb">jsonb_array SQL function</a> </li>
+<li> <a href="json1.html#jexb">jsonb_extract</a> </li>
+<li> <a href="json1.html#jexb">jsonb_extract SQL function</a> </li>
+<li> <a href="json1.html#jgrouparrayb">jsonb_group_array</a> </li>
+<li> <a href="json1.html#jgrouparrayb">jsonb_group_array SQL function</a> </li>
+<li> <a href="json1.html#jgroupobjectb">jsonb_group_object</a> </li>
+<li> <a href="json1.html#jgroupobjectb">jsonb_group_object SQL function</a> </li>
+<li> <a href="json1.html#jinsb">jsonb_insert</a> </li>
+<li> <a href="json1.html#jinsb">jsonb_insert SQL function</a> </li>
+<li> <a href="json1.html#jobjb">jsonb_object</a> </li>
+<li> <a href="json1.html#jobjb">jsonb_object SQL function</a> </li>
+<li> <a href="json1.html#jpatchb">jsonb_patch</a> </li>
+<li> <a href="json1.html#jpatchb">jsonb_patch SQL function</a> </li>
+<li> <a href="json1.html#jrmb">jsonb_remove</a> </li>
+<li> <a href="json1.html#jrmb">jsonb_remove SQL function</a> </li>
+<li> <a href="json1.html#jreplb">jsonb_replace</a> </li>
+<li> <a href="json1.html#jreplb">jsonb_replace SQL function</a> </li>
+<li> <a href="json1.html#jsetb">jsonb_set</a> </li>
+<li> <a href="json1.html#jsetb">jsonb_set SQL function</a> </li>
+<li> <a href="lang_datefunc.html#jdmod">julianday modifier</a> </li>
+<li> <a href="lang_datefunc.html#jlndy">julianday()</a> </li>
+<li> <a href="lang_datefunc.html#jlndy">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_corefunc.html#octet_length">octet_length() SQL function</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="optoverview.html#omitnoopjoin">omit-outer-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="lang_aggfunc.html#aggorderby">ORDER BY clause in aggregate functions</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="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> </li>
+<li> <a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction optimization</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="amalgamation.html#amalgtarball">precompiled amalgamation tarballs</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="tclsqlite.html#preupdate">preupdate method</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="lang_corefunc.html">Scalar Functions</a> </li>
+<li> <a href="c3ref/c_scanstat_complex.html">scan status flags</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/get_clientdata.html">sqlite3_get_clientdata</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/interrupt.html">sqlite3_is_interrupted</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#xintegrity">sqlite3_module.xIntegrity</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/get_clientdata.html">sqlite3_set_clientdata</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_explain.html">sqlite3_stmt_explain</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_scanstatus.html">sqlite3_stmt_scanstatus_v2</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_encoding.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/sqlite3changegroup_schema.html">sqlite3changegroup_schema</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/sqlite3changeset_upgrade.html">sqlite3changeset_upgrade</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_object_config.html">sqlite3session_object_config</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_fknoaction.html">SQLITE_CHANGESETAPPLY_FKNOACTION</a> </li>
+<li> <a href="session/c_changesetapply_fknoaction.html">SQLITE_CHANGESETAPPLY_IGNORENOOP</a> </li>
+<li> <a href="session/c_changesetapply_fknoaction.html">SQLITE_CHANGESETAPPLY_INVERT</a> </li>
+<li> <a href="session/c_changesetapply_fknoaction.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#sqlitedbconfigreversescanorder">SQLITE_DBCONFIG_REVERSE_SCANORDER</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">SQLITE_DBCONFIG_STMT_SCANSTATUS</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="compile.html#disable_pagecache_overflow_stats">SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS</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_hidden_columns">SQLITE_ENABLE_HIDDEN_COLUMNS</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_IN_PAGE</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#json_max_depth">SQLITE_JSON_MAX_DEPTH</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_RBU</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="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</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_complex.html">SQLITE_SCANSTAT_COMPLEX</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#sqlitescanstatncycle">SQLITE_SCANSTAT_NCYCLE</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#sqlitescanstatparentid">SQLITE_SCANSTAT_PARENTID</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="session/c_session_objconfig_rowid.html">SQLITE_SESSION_OBJCONFIG_ROWID</a> </li>
+<li> <a href="session/c_session_objconfig_rowid.html">SQLITE_SESSION_OBJCONFIG_SIZE</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="compile.html#strict_subtype">SQLITE_STRICT_SUBTYPE</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_FK_NO_ACTION</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_JSON_SELFCHECK</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_USELONGDOUBLE</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_seh">SQLITE_USE_SEH</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_vtab_constraint_support.html#sqlitevtabusesallschemas">SQLITE_VTAB_USES_ALL_SCHEMAS</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="loadext.html#statext">statically linked extensions</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#strftm">strftime()</a> </li>
+<li> <a href="lang_datefunc.html#strftm">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="lang_aggfunc.html#group_concat">string_agg</a> </li>
+<li> <a href="lang_aggfunc.html#group_concat">string_agg() aggregate function</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_datefunc.html#subsec">subsec modifier</a> </li>
+<li> <a href="lang_datefunc.html#subsec">subsecond modifier</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#preupdate">TCL interface preupdate 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#tmshf">time shift modifiers</a> </li>
+<li> <a href="lang_datefunc.html#dttm">time()</a> </li>
+<li> <a href="lang_datefunc.html#dttm">time() SQL function</a> </li>
+<li> <a href="lang_datefunc.html#tmdif">timediff()</a> </li>
+<li> <a href="lang_datefunc.html#tmdif">timediff() 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#unhex">unhex() SQL function</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()</a> </li>
+<li> <a href="lang_datefunc.html#uepch">unixepoch() function</a> </li>
+<li> <a href="lang_datefunc.html#uepch">unixepoch() SQL 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="cli.html#testing_mode">unsafe-testing command-line option</a> </li>
+<li> <a href="cli.html#testing_mode">--unsafe-testing command-line option</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_41_0.html">Version 3.41.0</a> </li>
+<li> <a href="releaselog/3_41_1.html">Version 3.41.1</a> </li>
+<li> <a href="releaselog/3_41_2.html">Version 3.41.2</a> </li>
+<li> <a href="releaselog/3_42_0.html">Version 3.42.0</a> </li>
+<li> <a href="releaselog/3_43_0.html">Version 3.43.0</a> </li>
+<li> <a href="releaselog/3_43_0.html">Version 3.43.0.0</a> </li>
+<li> <a href="releaselog/3_43_1.html">Version 3.43.1</a> </li>
+<li> <a href="releaselog/3_43_1.html">Version 3.43.1.0</a> </li>
+<li> <a href="releaselog/3_43_2.html">Version 3.43.2</a> </li>
+<li> <a href="releaselog/3_43_2.html">Version 3.43.2.0</a> </li>
+<li> <a href="releaselog/3_44_0.html">Version 3.44.0</a> </li>
+<li> <a href="releaselog/3_44_1.html">Version 3.44.1</a> </li>
+<li> <a href="releaselog/3_44_2.html">Version 3.44.2</a> </li>
+<li> <a href="releaselog/3_45_0.html">Version 3.45.0</a> </li>
+<li> <a href="releaselog/3_45_1.html">Version 3.45.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#xintegrity">xIntegrity</a> </li>
+<li> <a href="vtab.html#xintegrity">xIntegrity method</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=79bbdcd550">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang.html b/www/lang.html
new file mode 100644
index 0000000..0011868
--- /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>
+
+
+
diff --git a/www/lang_aggfunc.html b/www/lang_aggfunc.html
new file mode 100644
index 0000000..51afffb
--- /dev/null
+++ b/www/lang_aggfunc.html
@@ -0,0 +1,2575 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x7c5141f9' onclick='hideorshow("x7c5141f9","xda5c185d")'>hide</button></p>
+ <div id='xda5c185d' class='imgcontainer'>
+ <div style="max-width:909px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 909.533 223.344">
+<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="657,56 646,60 646,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L652,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M672,71A15 15 0 0 0 688 56A15 15 0 0 0 672 41A15 15 0 0 0 657 56A15 15 0 0 0 672 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="734,86 722,91 722,82" style="fill:rgb(0,0,0)"/>
+<path d="M688,56 L 699,56 Q 711,56 711,71 L 711,71 Q 711,86 719,86 L 728,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,101L846,101L846,71L734,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="790" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M846,86 L 855,86 Q 864,86 864,71 L 864,71 Q 864,56 879,56 L 879,56 L 894,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="903" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="790,56 778,60 778,52" style="fill:rgb(0,0,0)"/>
+<path d="M688,56L784,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M790,56L894,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="M438,207A15 15 0 0 0 453 192A15 15 0 0 0 438 177A15 15 0 0 0 423 192A15 15 0 0 0 438 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="423,192 412,196 412,188" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,177 Q 254,192 269,192 L 402,192 L 417,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,192 477,196 477,188" style="fill:rgb(0,0,0)"/>
+<path d="M453,192L483,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,192 L 570,192 Q 585,192 600,192 L 605,192 Q 620,192 620,177 L 620,71 Q 620,56 626,56 L 631,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="438,216 427,221 427,212" style="fill:rgb(0,0,0)"/>
+<path d="M326,192 L 392,192 Q 407,192 407,204 Q 407,216 420,216 L 433,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,216 L 453,216 Q 467,216 467,204 Q 467,192 473,192 L 479,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="300,117 289,121 289,112" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 523,56 Q 533,56 533,71 L 533,71 Q 533,86 518,86 L 292,86 Q 277,86 277,101 L 277,102 Q 277,117 286,117 L 294,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M315,132L360,132A15 15 0 0 0 375 117A15 15 0 0 0 360 101L315,101A15 15 0 0 0 300 117A15 15 0 0 0 315 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="392,117 381,121 381,112" style="fill:rgb(0,0,0)"/>
+<path d="M375,117L386,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,132L411,132A15 15 0 0 0 426 117A15 15 0 0 0 411 101L407,101A15 15 0 0 0 392 117A15 15 0 0 0 407 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M426,117L449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,132L585,132L585,101L455,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M520,169A15 15 0 0 0 535 154A15 15 0 0 0 520 139A15 15 0 0 0 505 154A15 15 0 0 0 520 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="535,154 547,150 547,159" style="fill:rgb(0,0,0)"/>
+<path d="M585,117 L 591,117 Q 597,117 597,132 L 597,139 Q 597,154 582,154 L 556,154 L 541,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M505,154 L 470,154 Q 455,154 447,154 Q 438,154 438,139 L 438,132 Q 438,117 444,117 L 449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,117 L 594,117 Q 602,117 602,102 L 602,71 Q 602,56 617,56 L 623,56 L 638,56" 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='x487b760f' onclick='hideorshow("x487b760f","x2500495a")'>show</button></p>
+ <div id='x2500495a' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/function-arguments.html">function-arguments:</a></b>
+<button id='xaad56ed3' onclick='hideorshow("xaad56ed3","x730c0e61")'>show</button></p>
+ <div id='x730c0e61' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x92741163' onclick='hideorshow("x92741163","x293f6679")'>show</button></p>
+ <div id='x293f6679' 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='x7b332735' onclick='hideorshow("x7b332735","x478d28c9")'>show</button></p>
+ <div id='x478d28c9' 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='x1e9e901a' onclick='hideorshow("x1e9e901a","x42cf7683")'>show</button></p>
+ <div id='x42cf7683' 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='xa1692f3c' onclick='hideorshow("xa1692f3c","xccbe0ccf")'>show</button></p>
+ <div id='xccbe0ccf' 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='xf4b784cf' onclick='hideorshow("xf4b784cf","xa9d6735d")'>show</button></p>
+ <div id='xa9d6735d' 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='xcd9088ce' onclick='hideorshow("xcd9088ce","xd2c5f532")'>show</button></p>
+ <div id='xd2c5f532' 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='xa5907866' onclick='hideorshow("xa5907866","x81201da7")'>show</button></p>
+ <div id='x81201da7' 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='xff9b36a9' onclick='hideorshow("xff9b36a9","xb5edd772")'>show</button></p>
+ <div id='xb5edd772' 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='x1f81e7cd' onclick='hideorshow("x1f81e7cd","x8476dd6c")'>show</button></p>
+ <div id='x8476dd6c' 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='xced229b6' onclick='hideorshow("xced229b6","x30dbb771")'>show</button></p>
+ <div id='x30dbb771' 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='x827a6727' onclick='hideorshow("x827a6727","xbad4a055")'>show</button></p>
+ <div id='xbad4a055' 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='xacb70a9b' onclick='hideorshow("xacb70a9b","x3a137111")'>show</button></p>
+ <div id='x3a137111' 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='x46d7c5e7' onclick='hideorshow("x46d7c5e7","x97d62d7f")'>show</button></p>
+ <div id='x97d62d7f' 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='xd64db844' onclick='hideorshow("xd64db844","xa41c0b4d")'>show</button></p>
+ <div id='xa41c0b4d' 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='x4c2877cb' onclick='hideorshow("x4c2877cb","xf5972bbf")'>show</button></p>
+ <div id='xf5972bbf' 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='x497c2344' onclick='hideorshow("x497c2344","x25672f6a")'>show</button></p>
+ <div id='x25672f6a' 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='x8f5436e0' onclick='hideorshow("x8f5436e0","xc8494f58")'>show</button></p>
+ <div id='xc8494f58' 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/ordering-term.html">ordering-term:</a></b>
+<button id='xc6579a5b' onclick='hideorshow("xc6579a5b","x96a78de5")'>show</button></p>
+ <div id='x96a78de5' 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>
+The aggregate functions shown below are available by default.
+There are two more aggregates grouped with the <a href="json1.html">JSON SQL functions</a>.
+Applications can define custom aggregate functions using the
+<a href="c3ref/create_function.html">sqlite3_create_function()</a> interface.
+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="aggorderby"></a>
+
+<p>
+If an ORDER BY clause is provided, that clause determines the order in which
+the inputs to the aggregate are processed. For aggregate functions like max()
+and count(), the input order does not matter. But for things like
+<a href="lang_aggfunc.html#group_concat">string_agg()</a> and <a href="json1.html#jgroupobject">json_group_object()</a>, the ORDER BY clause will make a
+difference in the result. If no ORDER BY clause is specified, the inputs to the
+aggregate occur in an arbitrary order that might change from one invocation
+to the next.
+</p>
+
+<p>
+See also: <a href="lang_corefunc.html">scalar functions</a> and <a href="windowfunctions.html">window functions</a>.
+
+<a name="aggfunclist"></a>
+
+</p><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#group_concat'>string_agg(X,Y)</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
+ there are no non-NULL inputs. The result of avg() is computed
+ as <a href="lang_aggfunc.html#sumunc">total()</a>/<a href="lang_aggfunc.html#count">count()</a> so all of the constraints that apply to
+ <a href="lang_aggfunc.html#sumunc">total()</a> also apply to avg().
+</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>)<br />string_agg(<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.
+ <p>
+ The string_agg(X,Y) function is an alias
+ for group_concat(X,Y). String_agg() is compatible with PostgreSQL
+ and SQL-Server and group_concat() is compatible with MySQL.
+ <p>
+ The order of the concatenated elements is arbitrary unless an
+ ORDER BY argument is included immediately after the last parameter.
+</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.
+ No overflow error is ever raised if any prior input was a floating point
+ value.
+ Total() never throws an integer overflow.
+
+ <p>When summing floating-point values, if the magnitudes of the values
+ differ wildly then the resulting sum might be imprecise due to the fact that
+ <a href="floatingpoint.html#fpapprox">IEEE 754 floating point values are approximations</a>.
+ Use the decimal_sum(X) aggregate in the <a href="floatingpoint.html#decext">decimal extension</a> to obtain
+ an exact summation of floating point numbers. Consider this test case:
+
+<p><blockquote><pre>
+CREATE TABLE t1(x REAL);
+INSERT INTO t1 VALUES(1.55e+308),(1.23),(3.2e-16),(-1.23),(-1.55e308);
+SELECT sum(x), decimal_sum(x) FROM t1;
+</pre></blockquote></p>
+
+ <p>The large values &plusmn;1.55e+308 cancel each other out, but the
+ cancellation does not occur until the end of the sum and in the meantime
+ the large +1.55e+308 swamps the tiny 3.2e-16 value. The end result is
+ an imprecise result for the sum(). The decimal_sum() aggregate
+ generates an exact answer, at the cost of additional CPU and memory usage.
+ Note also that decimal_sum() is not built into the SQLite core; it is a
+ <a href="loadext.html">loadable extension</a>.
+
+ <p>If sum of inputs is too large to represent as a IEEE 754 floating
+ point value, then a +Infinity or -Infinity result may be returned.
+ If very large values with differing signs are used
+ such that the SUM() or TOTAL() function is
+ unable to determine if the correct result is +Infinity or -Infinity
+ or some other value in between, then the result is NULL. Hence, for
+ example, the following query returns NULL:
+
+<p><blockquote><pre>
+WITH t1(x) AS (VALUES(1.0),(-9e+999),(2.0),(+9e+999),(3.0))
+ SELECT sum(x) FROM t1;
+</pre></blockquote></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/lang_aggfunc.in?m=d872d05e39">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lang_altertable.html b/www/lang_altertable.html
new file mode 100644
index 0000000..6efb79f
--- /dev/null
+++ b/www/lang_altertable.html
@@ -0,0 +1,3430 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x991b9c08' onclick='hideorshow("x991b9c08","x568da75f")'>hide</button></p>
+ <div id='x568da75f' 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='xbab1d40e' onclick='hideorshow("xbab1d40e","x9242c9e5")'>show</button></p>
+ <div id='x9242c9e5' 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='x887f8a55' onclick='hideorshow("x887f8a55","xf69919cf")'>show</button></p>
+ <div id='xf69919cf' 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='x87405cdb' onclick='hideorshow("x87405cdb","xbe1eaa0c")'>show</button></p>
+ <div id='xbe1eaa0c' 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='x1b85ca15' onclick='hideorshow("x1b85ca15","x0b2c4b89")'>show</button></p>
+ <div id='x0b2c4b89' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x89f1f161' onclick='hideorshow("x89f1f161","x45d49345")'>show</button></p>
+ <div id='x45d49345' 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/function-arguments.html">function-arguments:</a></b>
+<button id='xa8394118' onclick='hideorshow("xa8394118","x88161a76")'>show</button></p>
+ <div id='x88161a76' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x7731129b' onclick='hideorshow("x7731129b","x2a4bc58b")'>show</button></p>
+ <div id='x2a4bc58b' 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/over-clause.html">over-clause:</a></b>
+<button id='x0ad86d10' onclick='hideorshow("x0ad86d10","x7b8fa3cb")'>show</button></p>
+ <div id='x7b8fa3cb' 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='xd618e37b' onclick='hideorshow("xd618e37b","x912f4d20")'>show</button></p>
+ <div id='x912f4d20' 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='xc758de75' onclick='hideorshow("xc758de75","x80011b25")'>show</button></p>
+ <div id='x80011b25' 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='x3d791b7e' onclick='hideorshow("x3d791b7e","x6cb8cd4a")'>show</button></p>
+ <div id='x6cb8cd4a' 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='x4ea3c336' onclick='hideorshow("x4ea3c336","xeda0b6a3")'>show</button></p>
+ <div id='xeda0b6a3' 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='x1dfb1a3c' onclick='hideorshow("x1dfb1a3c","x7408a298")'>show</button></p>
+ <div id='x7408a298' 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='xc855258b' onclick='hideorshow("xc855258b","x4cba43c7")'>show</button></p>
+ <div id='x4cba43c7' 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='x26d919fe' onclick='hideorshow("x26d919fe","x40a8c33b")'>show</button></p>
+ <div id='x40a8c33b' 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='x6dcd3d62' onclick='hideorshow("x6dcd3d62","x3186fc63")'>show</button></p>
+ <div id='x3186fc63' 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='x2f3e3894' onclick='hideorshow("x2f3e3894","x3ae2e43c")'>show</button></p>
+ <div id='x3ae2e43c' 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='x5703d930' onclick='hideorshow("x5703d930","xaba99b57")'>show</button></p>
+ <div id='xaba99b57' 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='xb13fc246' onclick='hideorshow("xb13fc246","x16adc8d5")'>show</button></p>
+ <div id='x16adc8d5' 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='x737a0d50' onclick='hideorshow("x737a0d50","xcd034acb")'>show</button></p>
+ <div id='xcd034acb' 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='x6324db76' onclick='hideorshow("x6324db76","x25fd4b21")'>show</button></p>
+ <div id='x25fd4b21' 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='x08fea184' onclick='hideorshow("x08fea184","x223cc12e")'>show</button></p>
+ <div id='x223cc12e' 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='xa1220d59' onclick='hideorshow("xa1220d59","xa88e81ad")'>show</button></p>
+ <div id='xa88e81ad' 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='x72160c36' onclick='hideorshow("x72160c36","xc177227a")'>show</button></p>
+ <div id='xc177227a' 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='x29c2e12a' onclick='hideorshow("x29c2e12a","x203ecbb3")'>show</button></p>
+ <div id='x203ecbb3' 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='x9fc0104d' onclick='hideorshow("x9fc0104d","x24c08160")'>show</button></p>
+ <div id='x24c08160' 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='xad4d1b3a' onclick='hideorshow("xad4d1b3a","x8f88f095")'>show</button></p>
+ <div id='x8f88f095' 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=7d2205713a">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..76b5d8a
--- /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='x9d08cb93' onclick='hideorshow("x9d08cb93","x6f8054a5")'>hide</button></p>
+ <div id='x6f8054a5' 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 are 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=fd98f6b67d">2024-01-09 20:59:08</a> UTC </small></i></p>
+
diff --git a/www/lang_attach.html b/www/lang_attach.html
new file mode 100644
index 0000000..beef4f2
--- /dev/null
+++ b/www/lang_attach.html
@@ -0,0 +1,2521 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xb544a08c' onclick='hideorshow("xb544a08c","x2b4169df")'>hide</button></p>
+ <div id='x2b4169df' 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='xec4b25bf' onclick='hideorshow("xec4b25bf","xb0f43903")'>show</button></p>
+ <div id='xb0f43903' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x3eb77f6e' onclick='hideorshow("x3eb77f6e","x84708d78")'>show</button></p>
+ <div id='x84708d78' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x3ef0e584' onclick='hideorshow("x3ef0e584","xb8d76283")'>show</button></p>
+ <div id='xb8d76283' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x839c70f0' onclick='hideorshow("x839c70f0","x5556915f")'>show</button></p>
+ <div id='x5556915f' 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/literal-value.html">literal-value:</a></b>
+<button id='x51a4a0b5' onclick='hideorshow("x51a4a0b5","xfeedacd3")'>show</button></p>
+ <div id='xfeedacd3' 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='xbcd10617' onclick='hideorshow("xbcd10617","x0e513e13")'>show</button></p>
+ <div id='x0e513e13' 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='x1423ace0' onclick='hideorshow("x1423ace0","x863662b8")'>show</button></p>
+ <div id='x863662b8' 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='xdc10fef1' onclick='hideorshow("xdc10fef1","xb92aebdc")'>show</button></p>
+ <div id='xb92aebdc' 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='x8c2b45f7' onclick='hideorshow("x8c2b45f7","xcaab6c29")'>show</button></p>
+ <div id='xcaab6c29' 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='x1b7e81aa' onclick='hideorshow("x1b7e81aa","x7afdd86a")'>show</button></p>
+ <div id='x7afdd86a' 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='x3055a27a' onclick='hideorshow("x3055a27a","x2a743a49")'>show</button></p>
+ <div id='x2a743a49' 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='x30020806' onclick='hideorshow("x30020806","xb2a18be7")'>show</button></p>
+ <div id='xb2a18be7' 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='xf829f824' onclick='hideorshow("xf829f824","xf84a519a")'>show</button></p>
+ <div id='xf84a519a' 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='x4881d6b8' onclick='hideorshow("x4881d6b8","x4b7fec90")'>show</button></p>
+ <div id='x4b7fec90' 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='xbb738dcd' onclick='hideorshow("xbb738dcd","x9dfbc64c")'>show</button></p>
+ <div id='x9dfbc64c' 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='x78540bea' onclick='hideorshow("x78540bea","x162b44d2")'>show</button></p>
+ <div id='x162b44d2' 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='x8821b440' onclick='hideorshow("x8821b440","xec0ade04")'>show</button></p>
+ <div id='xec0ade04' 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='x3e420bc3' onclick='hideorshow("x3e420bc3","xcf505623")'>show</button></p>
+ <div id='xcf505623' 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='x0986f444' onclick='hideorshow("x0986f444","xc79e7753")'>show</button></p>
+ <div id='xc79e7753' 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='x4228a623' onclick='hideorshow("x4228a623","x9ea7f0f2")'>show</button></p>
+ <div id='x9ea7f0f2' 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='xdcb5cf36' onclick='hideorshow("xdcb5cf36","xfb01182d")'>show</button></p>
+ <div id='xfb01182d' 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='xff729c29' onclick='hideorshow("xff729c29","x7a09cc63")'>show</button></p>
+ <div id='x7a09cc63' 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 enabled 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=ef45743b34">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lang_comment.html b/www/lang_comment.html
new file mode 100644
index 0000000..b2dfe46
--- /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='x49aaee40' onclick='hideorshow("x49aaee40","xf6f99226")'>hide</button></p>
+ <div id='xf6f99226' 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=3ef91cf3ff">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_conflict.html b/www/lang_conflict.html
new file mode 100644
index 0000000..2fea7d9
--- /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='x91fb97ac' onclick='hideorshow("x91fb97ac","xe68f90d9")'>hide</button></p>
+ <div id='xe68f90d9' 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=99e70e2643">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/lang_corefunc.html b/www/lang_corefunc.html
new file mode 100644
index 0000000..95f8927
--- /dev/null
+++ b/www/lang_corefunc.html
@@ -0,0 +1,737 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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">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><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>
+See the <a href="lang_expr.html#*funcinexpr">functions within expressions</a> documentation for
+more information about how SQL function invocations fit into the context
+of an SQL expression.
+
+</p><h1 id="list_of_core_functions"><span>2. </span>List Of Core Functions</h1>
+
+<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#concat'>concat(X,...)</a></li>
+<li><a href='lang_corefunc.html#concat_ws'>concat_ws(SEP,X,...)</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#octet_length'>octet_length(X)</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#unhex'>unhex(X)</a></li>
+<li><a href='lang_corefunc.html#unhex'>unhex(X,Y)</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>3. </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="concat"></a>
+<dt><p><b>concat(<i>X</i>,...)</b></dt><dd><p>
+ The concat(...) function returns a string which is the concatenation of the
+ string representation of all of its non-NULL arguments. If all arguments are
+ NULL, then concat() returns an empty string.
+</dd>
+<a name="concat_ws"></a>
+<dt><p><b>concat_ws(<i>SEP</i>,<i>X</i>,...)</b></dt><dd><p>
+ The concat_ws(SEP,...) function returns a string that is the concatenation of
+ all non-null arguments beyond the first argument, using the text value of the
+ first argument as a separator. If the first argument is NULL, then concat_ws()
+ returns NULL. If all arguments other than the first are NULL, then concat_ws()
+ returns an empty string.
+</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".
+ <p>
+ See also: <a href="lang_corefunc.html#unhex">unhex()</a>
+</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. Use the
+ <a href="lang_corefunc.html#octet_length">octet_length()</a> function to find the byte length of a string.
+ <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="octet_length"></a>
+<dt><p><b>octet_length(<i>X</i>)</b></dt><dd><p>
+ The octet_length(X) function returns the number of bytes in the encoding
+ of text string X. If X is NULL then octet_length(X) returns NULL. If X is
+ a BLOB value, then octet_length(X) is the same as <a href="lang_corefunc.html#length">length(X)</a>. If X is a
+ numeric value, then octet_length(X) returns the number of bytes in a text
+ rendering of that number.
+ <p>
+ Because octet_length(X) returns the number of bytes in X, not the number
+ of characters, the value returned depends on the database encoding. The
+ octet_length() function can return different answers for the same input string
+ if the database encoding is UTF16 instead of UTF8.
+ <p>
+ If argument X is a table column and the value is of type text or blob,
+ then octet_length(X) avoids reading the content of X from disk, as the byte
+ length can be computed from metadata. Thus, octet_length(X) is efficient
+ even if X is a column containing a multi-megabyte text or blob value.
+</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 originally named printf(). But the name was
+ later changed to format() for compatibility with other database engines.
+ The printf() name is retained as an alias so as not to break 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="unhex"></a>
+<dt><p><b>unhex(<i>X</i>)<br />unhex(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The unhex(X,Y) function returns a BLOB value which is the decoding of the
+ hexadecimal string X. If X contains any
+ characters that are not hexadecimal digits and which are not in Y,
+ then unhex(X,Y) returns NULL. If Y is omitted, it is
+ understood to be an empty string and hence X must be a pure hexadecimal string.
+ All hexadecimal digits in X must occur in pairs, with both digits of each
+ pair beginning immediately adjacent to one another, or else unhex(X,Y)
+ returns NULL.
+ If either parameter X or Y is NULL, then unhex(X,Y) returns NULL.
+ The X input may contain an arbitrary mix of upper and lower case hexadecimal
+ digits.
+ Hexadecimal digits in Y have no affect on the translation of X. Only
+ characters in Y that are not hexadecimal digits are ignored in X.
+ <p>
+ See also: <a href="lang_corefunc.html#hex">hex()</a>
+</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=a451f26240">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lang_createindex.html b/www/lang_createindex.html
new file mode 100644
index 0000000..c226502
--- /dev/null
+++ b/www/lang_createindex.html
@@ -0,0 +1,2667 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x80fb9fab' onclick='hideorshow("x80fb9fab","x7af438dd")'>hide</button></p>
+ <div id='x7af438dd' 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='x44a3393f' onclick='hideorshow("x44a3393f","x645a052f")'>show</button></p>
+ <div id='x645a052f' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xd5fe02c7' onclick='hideorshow("xd5fe02c7","x6692cc5c")'>show</button></p>
+ <div id='x6692cc5c' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x2584c6f5' onclick='hideorshow("x2584c6f5","x39b15686")'>show</button></p>
+ <div id='x39b15686' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x706336f5' onclick='hideorshow("x706336f5","x08c6314e")'>show</button></p>
+ <div id='x08c6314e' 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/literal-value.html">literal-value:</a></b>
+<button id='x04817aa1' onclick='hideorshow("x04817aa1","x3c552e94")'>show</button></p>
+ <div id='x3c552e94' 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='xe1e6b2b7' onclick='hideorshow("xe1e6b2b7","x5ec2d095")'>show</button></p>
+ <div id='x5ec2d095' 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='x5216d5a0' onclick='hideorshow("x5216d5a0","x528d82de")'>show</button></p>
+ <div id='x528d82de' 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='xbcd90d06' onclick='hideorshow("xbcd90d06","x86be806a")'>show</button></p>
+ <div id='x86be806a' 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='x83a3926b' onclick='hideorshow("x83a3926b","x2a7bcffc")'>show</button></p>
+ <div id='x2a7bcffc' 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='xc7dc0cc3' onclick='hideorshow("xc7dc0cc3","x02cfcd9e")'>show</button></p>
+ <div id='x02cfcd9e' 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='x47f8262d' onclick='hideorshow("x47f8262d","x42da6c07")'>show</button></p>
+ <div id='x42da6c07' 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='xe14b8bfa' onclick='hideorshow("xe14b8bfa","x0be73776")'>show</button></p>
+ <div id='x0be73776' 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='x393adf83' onclick='hideorshow("x393adf83","x996c0136")'>show</button></p>
+ <div id='x996c0136' 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='x26313914' onclick='hideorshow("x26313914","xa727299c")'>show</button></p>
+ <div id='xa727299c' 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='xefaa4509' onclick='hideorshow("xefaa4509","x1f33e76f")'>show</button></p>
+ <div id='x1f33e76f' 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='x3438c4b7' onclick='hideorshow("x3438c4b7","xb6e7c2b0")'>show</button></p>
+ <div id='xb6e7c2b0' 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='xdf40d5c9' onclick='hideorshow("xdf40d5c9","x36713650")'>show</button></p>
+ <div id='x36713650' 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='xcad87823' onclick='hideorshow("xcad87823","x9d630b97")'>show</button></p>
+ <div id='x9d630b97' 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='xb7e5466f' onclick='hideorshow("xb7e5466f","xc0d8e356")'>show</button></p>
+ <div id='xc0d8e356' 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='xedd59e65' onclick='hideorshow("xedd59e65","x9b21f785")'>show</button></p>
+ <div id='x9b21f785' 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='x366aa99b' onclick='hideorshow("x366aa99b","xc3bb3055")'>show</button></p>
+ <div id='xc3bb3055' 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='xfcf7431b' onclick='hideorshow("xfcf7431b","x5ff50f9e")'>show</button></p>
+ <div id='x5ff50f9e' 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='x1ed0bd01' onclick='hideorshow("x1ed0bd01","x12618201")'>show</button></p>
+ <div id='x12618201' 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=2c45540ea0">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/lang_createtable.html b/www/lang_createtable.html
new file mode 100644
index 0000000..74f1589
--- /dev/null
+++ b/www/lang_createtable.html
@@ -0,0 +1,6138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xcbf666ba' onclick='hideorshow("xcbf666ba","x420b1e16")'>hide</button></p>
+ <div id='x420b1e16' 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='xbb4fe898' onclick='hideorshow("xbb4fe898","x0000a043")'>show</button></p>
+ <div id='x0000a043' 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='xe68da4b3' onclick='hideorshow("xe68da4b3","xd27c5702")'>show</button></p>
+ <div id='xd27c5702' 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='xdfbf5050' onclick='hideorshow("xdfbf5050","x407418c7")'>show</button></p>
+ <div id='x407418c7' 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='x8e975e48' onclick='hideorshow("x8e975e48","x20428343")'>show</button></p>
+ <div id='x20428343' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xb960351e' onclick='hideorshow("xb960351e","x762f8559")'>show</button></p>
+ <div id='x762f8559' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x5dc0c536' onclick='hideorshow("x5dc0c536","x63388e3f")'>show</button></p>
+ <div id='x63388e3f' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xb9a3679d' onclick='hideorshow("xb9a3679d","xc3a841ed")'>show</button></p>
+ <div id='xc3a841ed' 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/over-clause.html">over-clause:</a></b>
+<button id='xef9fc78a' onclick='hideorshow("xef9fc78a","x638aaf3d")'>show</button></p>
+ <div id='x638aaf3d' 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='x5701290b' onclick='hideorshow("x5701290b","x8a7e02a3")'>show</button></p>
+ <div id='x8a7e02a3' 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='xbc518e46' onclick='hideorshow("xbc518e46","x50d35530")'>show</button></p>
+ <div id='x50d35530' 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='x9e237ff3' onclick='hideorshow("x9e237ff3","x5cd30db8")'>show</button></p>
+ <div id='x5cd30db8' 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='x210e2e56' onclick='hideorshow("x210e2e56","xc9497f25")'>show</button></p>
+ <div id='xc9497f25' 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='x6780000f' onclick='hideorshow("x6780000f","x79589d80")'>show</button></p>
+ <div id='x79589d80' 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='x57a7596c' onclick='hideorshow("x57a7596c","x4c62fc8c")'>show</button></p>
+ <div id='x4c62fc8c' 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='xc6867d4c' onclick='hideorshow("xc6867d4c","x7519f03c")'>show</button></p>
+ <div id='x7519f03c' 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='x5138530d' onclick='hideorshow("x5138530d","x024c317d")'>show</button></p>
+ <div id='x024c317d' 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='x3f1902b6' onclick='hideorshow("x3f1902b6","xf87bc594")'>show</button></p>
+ <div id='xf87bc594' 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='x16cf1e35' onclick='hideorshow("x16cf1e35","x124243a8")'>show</button></p>
+ <div id='x124243a8' 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='xe81acd73' onclick='hideorshow("xe81acd73","x9392760c")'>show</button></p>
+ <div id='x9392760c' 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='x4d7d83a9' onclick='hideorshow("x4d7d83a9","xe940f54e")'>show</button></p>
+ <div id='xe940f54e' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xc1a9d747' onclick='hideorshow("xc1a9d747","xfb84f039")'>show</button></p>
+ <div id='xfb84f039' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x5dadc732' onclick='hideorshow("x5dadc732","x6cc9b93e")'>show</button></p>
+ <div id='x6cc9b93e' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x8c78bcf2' onclick='hideorshow("x8c78bcf2","x3a83543d")'>show</button></p>
+ <div id='x3a83543d' 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='x4f3a1b82' onclick='hideorshow("x4f3a1b82","x4f1b25f6")'>show</button></p>
+ <div id='x4f1b25f6' 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='x091a770c' onclick='hideorshow("x091a770c","xa0b29580")'>show</button></p>
+ <div id='xa0b29580' 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='xe41e6c4a' onclick='hideorshow("xe41e6c4a","x9012f6bf")'>show</button></p>
+ <div id='x9012f6bf' 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='x86060bfd' onclick='hideorshow("x86060bfd","x80512457")'>show</button></p>
+ <div id='x80512457' 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='x8f442d75' onclick='hideorshow("x8f442d75","x528c9c16")'>show</button></p>
+ <div id='x528c9c16' 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='x09a315fc' onclick='hideorshow("x09a315fc","xe2508c7c")'>show</button></p>
+ <div id='xe2508c7c' 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='xef7e6d1a' onclick='hideorshow("xef7e6d1a","xb2dd602e")'>show</button></p>
+ <div id='xb2dd602e' 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='xe8d58aba' onclick='hideorshow("xe8d58aba","xecbea229")'>show</button></p>
+ <div id='xecbea229' 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='x7c0e37e3' onclick='hideorshow("x7c0e37e3","xf47be615")'>show</button></p>
+ <div id='xf47be615' 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='x7a43b726' onclick='hideorshow("x7a43b726","xc5e83824")'>show</button></p>
+ <div id='xc5e83824' 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='xfef8bbbf' onclick='hideorshow("xfef8bbbf","x2be3c08c")'>show</button></p>
+ <div id='x2be3c08c' 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='x8fdd1e91' onclick='hideorshow("x8fdd1e91","xec9d44d1")'>show</button></p>
+ <div id='xec9d44d1' 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='xc293e130' onclick='hideorshow("xc293e130","x7c782c20")'>show</button></p>
+ <div id='x7c782c20' 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='xe65e1b29' onclick='hideorshow("xe65e1b29","x71cc4e0d")'>show</button></p>
+ <div id='x71cc4e0d' 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='xc92a34bf' onclick='hideorshow("xc92a34bf","x0ccd9ab7")'>show</button></p>
+ <div id='x0ccd9ab7' 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='x0b931f29' onclick='hideorshow("x0b931f29","xe3c25a2b")'>show</button></p>
+ <div id='xe3c25a2b' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x12af2551' onclick='hideorshow("x12af2551","xc0fe8fb8")'>show</button></p>
+ <div id='xc0fe8fb8' 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/function-arguments.html">function-arguments:</a></b>
+<button id='xf5f0b1b8' onclick='hideorshow("xf5f0b1b8","x4d172088")'>show</button></p>
+ <div id='x4d172088' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xb6e0b1cb' onclick='hideorshow("xb6e0b1cb","x7e088d4b")'>show</button></p>
+ <div id='x7e088d4b' 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/literal-value.html">literal-value:</a></b>
+<button id='xdf755895' onclick='hideorshow("xdf755895","xed2bc12a")'>show</button></p>
+ <div id='xed2bc12a' 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='xed4cb734' onclick='hideorshow("xed4cb734","x36da50a4")'>show</button></p>
+ <div id='x36da50a4' 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='x0e7210ed' onclick='hideorshow("x0e7210ed","x00a3fe84")'>show</button></p>
+ <div id='x00a3fe84' 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='x92f2d92b' onclick='hideorshow("x92f2d92b","x1282b0e9")'>show</button></p>
+ <div id='x1282b0e9' 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='xed8e0ad8' onclick='hideorshow("xed8e0ad8","xb9154ac3")'>show</button></p>
+ <div id='xb9154ac3' 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='x540ffe19' onclick='hideorshow("x540ffe19","x0538c621")'>show</button></p>
+ <div id='x0538c621' 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='xf6b2ed8c' onclick='hideorshow("xf6b2ed8c","x6bf5101a")'>show</button></p>
+ <div id='x6bf5101a' 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='xb53f1579' onclick='hideorshow("xb53f1579","x823fcaf6")'>show</button></p>
+ <div id='x823fcaf6' 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='xbe0e5145' onclick='hideorshow("xbe0e5145","x43696a4e")'>show</button></p>
+ <div id='x43696a4e' 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='x8c53d577' onclick='hideorshow("x8c53d577","x9308c71a")'>show</button></p>
+ <div id='x9308c71a' 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 ALWAYS 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 another 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>,
+ the default conflict resolution algorithm is ABORT.
+ The conflict resolution algorithm for CHECK constraints is always ABORT.
+ (For historical compatibility only, table CHECK constraints are allowed
+ to have a conflict resolution clause, but that has no effect.)
+ 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=d5b0680939">2023-02-27 02:07:35</a> UTC </small></i></p>
+
diff --git a/www/lang_createtrigger.html b/www/lang_createtrigger.html
new file mode 100644
index 0000000..99b8205
--- /dev/null
+++ b/www/lang_createtrigger.html
@@ -0,0 +1,4455 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xba191060' onclick='hideorshow("xba191060","x88e4a33f")'>hide</button></p>
+ <div id='x88e4a33f' 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='x812692df' onclick='hideorshow("x812692df","x6320d9e0")'>show</button></p>
+ <div id='x6320d9e0' 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='x905898ed' onclick='hideorshow("x905898ed","xd07e3d2b")'>show</button></p>
+ <div id='xd07e3d2b' 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='x82ad9d51' onclick='hideorshow("x82ad9d51","x11b248a3")'>show</button></p>
+ <div id='x11b248a3' 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='xfb58ff4c' onclick='hideorshow("xfb58ff4c","x14e2a602")'>show</button></p>
+ <div id='x14e2a602' 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='x88e10a95' onclick='hideorshow("x88e10a95","xf5a0006b")'>show</button></p>
+ <div id='xf5a0006b' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x3e90bc0d' onclick='hideorshow("x3e90bc0d","x99100373")'>show</button></p>
+ <div id='x99100373' 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/function-arguments.html">function-arguments:</a></b>
+<button id='xf2ffda0e' onclick='hideorshow("xf2ffda0e","x71af0793")'>show</button></p>
+ <div id='x71af0793' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x851dfdd0' onclick='hideorshow("x851dfdd0","xeef58719")'>show</button></p>
+ <div id='xeef58719' 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/literal-value.html">literal-value:</a></b>
+<button id='x1dc7cac4' onclick='hideorshow("x1dc7cac4","xb1a3a1d8")'>show</button></p>
+ <div id='xb1a3a1d8' 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='x9a80825d' onclick='hideorshow("x9a80825d","x350aac9c")'>show</button></p>
+ <div id='x350aac9c' 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='x6bd0fe2e' onclick='hideorshow("x6bd0fe2e","xd84ea6fb")'>show</button></p>
+ <div id='xd84ea6fb' 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='xf07c7c2c' onclick='hideorshow("xf07c7c2c","xc38620e0")'>show</button></p>
+ <div id='xc38620e0' 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='x41a2a334' onclick='hideorshow("x41a2a334","x267e9298")'>show</button></p>
+ <div id='x267e9298' 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='x335322cb' onclick='hideorshow("x335322cb","x76f194df")'>show</button></p>
+ <div id='x76f194df' 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='x12befac6' onclick='hideorshow("x12befac6","x2e0f05c3")'>show</button></p>
+ <div id='x2e0f05c3' 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='x7c886be4' onclick='hideorshow("x7c886be4","xd4c58809")'>show</button></p>
+ <div id='xd4c58809' 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='x0b8afedd' onclick='hideorshow("x0b8afedd","x8c72fcf8")'>show</button></p>
+ <div id='x8c72fcf8' 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='x0fc8fe16' onclick='hideorshow("x0fc8fe16","xa985955b")'>show</button></p>
+ <div id='xa985955b' 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='xf95c1c66' onclick='hideorshow("xf95c1c66","x808950ea")'>show</button></p>
+ <div id='x808950ea' 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='x817d0507' onclick='hideorshow("x817d0507","xf0572837")'>show</button></p>
+ <div id='xf0572837' 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='xddf63227' onclick='hideorshow("xddf63227","x07f3bbb8")'>show</button></p>
+ <div id='x07f3bbb8' 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='xd23b8894' onclick='hideorshow("xd23b8894","xd9e2b6d4")'>show</button></p>
+ <div id='xd9e2b6d4' 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='x650cad20' onclick='hideorshow("x650cad20","x447f3cd6")'>show</button></p>
+ <div id='x447f3cd6' 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='xa2933f27' onclick='hideorshow("xa2933f27","xc38a5a5f")'>show</button></p>
+ <div id='xc38a5a5f' 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='xd9ad5eda' onclick='hideorshow("xd9ad5eda","xe6fb2a7e")'>show</button></p>
+ <div id='xe6fb2a7e' 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='xa725a1aa' onclick='hideorshow("xa725a1aa","xf824375c")'>show</button></p>
+ <div id='xf824375c' 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='xe8c65664' onclick='hideorshow("xe8c65664","x496864cf")'>show</button></p>
+ <div id='x496864cf' 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='x0cdf547d' onclick='hideorshow("x0cdf547d","x2d779721")'>show</button></p>
+ <div id='x2d779721' 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='xc405675a' onclick='hideorshow("xc405675a","xdce760ee")'>show</button></p>
+ <div id='xdce760ee' 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='x22fb4ca7' onclick='hideorshow("x22fb4ca7","x51e77512")'>show</button></p>
+ <div id='x51e77512' 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='x5dbb3074' onclick='hideorshow("x5dbb3074","x8ef519d0")'>show</button></p>
+ <div id='x8ef519d0' 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='xde1e0633' onclick='hideorshow("xde1e0633","x3d4d6677")'>show</button></p>
+ <div id='x3d4d6677' 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='xa29790bd' onclick='hideorshow("xa29790bd","x5bc02751")'>show</button></p>
+ <div id='x5bc02751' 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='x11decdf5' onclick='hideorshow("x11decdf5","x0045999b")'>show</button></p>
+ <div id='x0045999b' 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='xf5a0ad17' onclick='hideorshow("xf5a0ad17","x1fac562a")'>show</button></p>
+ <div id='x1fac562a' 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='x66b0c680' onclick='hideorshow("x66b0c680","x58236881")'>show</button></p>
+ <div id='x58236881' 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='x7881692e' onclick='hideorshow("x7881692e","x42f09fd9")'>show</button></p>
+ <div id='x42f09fd9' 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='x630c5475' onclick='hideorshow("x630c5475","xeb0ec1ba")'>show</button></p>
+ <div id='xeb0ec1ba' 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='x85ac1626' onclick='hideorshow("x85ac1626","x6031c141")'>show</button></p>
+ <div id='x6031c141' 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='x41627844' onclick='hideorshow("x41627844","xeb97bf53")'>show</button></p>
+ <div id='xeb97bf53' 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='x44d31537' onclick='hideorshow("x44d31537","xba0738ac")'>show</button></p>
+ <div id='xba0738ac' 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>
+
+
diff --git a/www/lang_createview.html b/www/lang_createview.html
new file mode 100644
index 0000000..622e491
--- /dev/null
+++ b/www/lang_createview.html
@@ -0,0 +1,2452 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x91a2919e' onclick='hideorshow("x91a2919e","xaa8b38f5")'>hide</button></p>
+ <div id='xaa8b38f5' 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='x552bae2f' onclick='hideorshow("x552bae2f","xe3097d9d")'>show</button></p>
+ <div id='xe3097d9d' 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='xa0621820' onclick='hideorshow("xa0621820","x24d3fb80")'>show</button></p>
+ <div id='x24d3fb80' 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='x4e719dcb' onclick='hideorshow("x4e719dcb","x1e93b93f")'>show</button></p>
+ <div id='x1e93b93f' 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='xe1d448a8' onclick='hideorshow("xe1d448a8","x36326c34")'>show</button></p>
+ <div id='x36326c34' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x8809c586' onclick='hideorshow("x8809c586","xd6f903e0")'>show</button></p>
+ <div id='xd6f903e0' 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/function-arguments.html">function-arguments:</a></b>
+<button id='xfb4db903' onclick='hideorshow("xfb4db903","x4b3ef30b")'>show</button></p>
+ <div id='x4b3ef30b' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xf1065170' onclick='hideorshow("xf1065170","x27e075fb")'>show</button></p>
+ <div id='x27e075fb' 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='x2c99624e' onclick='hideorshow("x2c99624e","xd0a17ffd")'>show</button></p>
+ <div id='xd0a17ffd' 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='x0002068f' onclick='hideorshow("x0002068f","x3191f2ca")'>show</button></p>
+ <div id='x3191f2ca' 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='x09faaa1c' onclick='hideorshow("x09faaa1c","x50a00d04")'>show</button></p>
+ <div id='x50a00d04' 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='xb7b9eb09' onclick='hideorshow("xb7b9eb09","x4c24d4a0")'>show</button></p>
+ <div id='x4c24d4a0' 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='x431b9d99' onclick='hideorshow("x431b9d99","xf2a5d587")'>show</button></p>
+ <div id='xf2a5d587' 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='x17741cf6' onclick='hideorshow("x17741cf6","xdb6fd010")'>show</button></p>
+ <div id='xdb6fd010' 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='xb3a242c3' onclick='hideorshow("xb3a242c3","xe5939a19")'>show</button></p>
+ <div id='xe5939a19' 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='xa1592b96' onclick='hideorshow("xa1592b96","xdce9a73b")'>show</button></p>
+ <div id='xdce9a73b' 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='xfd0bd8bc' onclick='hideorshow("xfd0bd8bc","x748f7329")'>show</button></p>
+ <div id='x748f7329' 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='x547ac753' onclick='hideorshow("x547ac753","x2ffebece")'>show</button></p>
+ <div id='x2ffebece' 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='xad2ef3ff' onclick='hideorshow("xad2ef3ff","xbb828947")'>show</button></p>
+ <div id='xbb828947' 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='xdf223100' onclick='hideorshow("xdf223100","x0956e45b")'>show</button></p>
+ <div id='x0956e45b' 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='x8603b65b' onclick='hideorshow("x8603b65b","xb045ccd0")'>show</button></p>
+ <div id='xb045ccd0' 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=8fb825fdb8">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_createvtab.html b/www/lang_createvtab.html
new file mode 100644
index 0000000..9c637ec
--- /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='xcb22bf27' onclick='hideorshow("xcb22bf27","xaec3630e")'>hide</button></p>
+ <div id='xaec3630e' 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=73c535b61b">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_datefunc.html b/www/lang_datefunc.html
new file mode 100644
index 0000000..51e4a68
--- /dev/null
+++ b/www/lang_datefunc.html
@@ -0,0 +1,678 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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-toc2"><a href="#timediff_">1.1. Timediff()</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 seven <a href="lang_corefunc.html">scalar</a> 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>
+<li> <b>timediff(</b><i>time-value, time-value</i><b>)</b> </li>
+</ol>
+
+<p>
+The first 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.
+The timediff() function takes exactly two arguments which are both time values.
+</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 as either ISO-8601 strings or
+Julian day numbers. They also access unix timestamps with optional arguments
+(the 'auto' and 'unixepoch' modifiers described below). Since the timediff()
+function does not accept any optional argument, it can only use ISO-8601 and
+Julian day number time values.
+
+<a name="dttm"></a>
+
+</p><p>
+The date() function returns the date as text in this format: YYYY-MM-DD.
+
+<a name="dttm"></a>
+
+</p><p>
+The time() function returns the time as text in this format: HH:MM:SS.
+
+<a name="dttm"></a>
+
+</p><p>
+The datetime() function returns the date and time as text in this formats: YYYY-MM-DD HH:MM:SS.
+
+<a name="jlndy"></a>
+
+</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() function normally returns
+an integer number of seconds, but with the optional <a href="lang_datefunc.html#subsec">subsec modifier</a> it
+will return a floating point number which is the fractional number of seconds.
+
+<a name="strftm"></a>
+
+</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-31
+</td></tr><tr><td> %e </td><td></td><td> day of month without leading zero: 0-31
+</td></tr><tr><td> %f </td><td></td><td> fractional seconds: SS.SSS
+</td></tr><tr><td> %F </td><td></td><td> ISO 8601 date: YYYY-MM-DD
+</td></tr><tr><td> %H </td><td></td><td> hour: 00-24
+</td></tr><tr><td> %I </td><td></td><td> hour for 12-hour clock: 01-12
+</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> %k </td><td></td><td> hour without leading zero: 0-24
+</td></tr><tr><td> %l </td><td></td><td> %I without leading zero: 1-12
+</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> %p </td><td></td><td> "AM" or "PM" depending on the hour
+</td></tr><tr><td> %P </td><td></td><td> "am" or "pm" depending on the hour
+</td></tr><tr><td> %R </td><td></td><td> ISO 8601 time: HH:MM
+</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> %T </td><td></td><td> ISO 8601 time: HH:MM:SS
+</td></tr><tr><td> %u </td><td></td><td> day of week 1-7 with Monday==1
+</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>
+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('%F', ...)
+</td></tr><tr><td> time(...) </td><td></td><td> strftime('%T', ...)
+</td></tr><tr><td> datetime(...) </td><td></td><td> strftime('%F %T', ...)
+</td></tr><tr><td> julianday(...) </td><td></td><td> <nobr>strftime('%J', ...) -- (numeric return)</nobr>
+</td></tr><tr><td> unixepoch(...) </td><td></td><td> <nobr>strftime('%s', ...) -- (numeric return)</nobr>
+</td></tr></table>
+</blockquote>
+
+<p>
+The date(), time(), and datetime() functions all return text, and so their
+strftime() equivalents are exact. However, the julianday()
+and unixepoch() functions return numeric values. Their strftime() equivalents
+return a string 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>
+
+<a name="tmdif"></a>
+
+<h2 id="timediff_"><span>1.1. </span>Timediff()</h2>
+
+<p>
+The timediff(A,B) routine returns a string that describes the amount
+of time that must be added to B in order to reach time A. The format of
+the timediff() result is designed to be human-readable. The format is:
+</p><blockquote>
+(+|-)YYYY-MM-DD HH:MM:SS.SSS
+</blockquote>
+<p>
+This time difference string is also an allowed modifier for the other
+date/time functions. The following invariant holds for time values A
+and B:
+</p><blockquote>
+datetime(A) = datetime(B, timediff(A,B))
+</blockquote>
+
+<p>
+The length of months and years vary. February is shorter than March.
+Leap years are longer than non-leap years. The output from timediff()
+takes this all into account. The timediff() function is intended to provide
+a human-friendly description of the time span. If you want to know the
+number of days or seconds between two dates, A and B, then you can always do
+one of these:
+</p><blockquote>
+SELECT julianday(B) - julianday(A);<br>
+SELECT unixepoch(B) - unixepoch(A);
+</blockquote>
+
+<p>
+The timediff(A,B) might return the same result even for values A and B
+that span a different number of days - depending on the starting date.
+For example, both of the following two timediff() calls return the
+same result ("-0000-01-00 00:00:00.000") even though the first timespan
+is 28 days and the seconds is 31 days:
+</p><blockquote>
+SELECT timediff('2023-02-15','2023-03-15');<br>
+SELECT timediff('2023-03-15','2023-04-15');
+</blockquote>
+<p>
+Summary: If you want a human-friendly time span, use timediff(). If you
+what a precise time difference (in days or seconds) use the difference
+between two julianday() or unixepoch() calls.
+</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>
+In all functions other than timediff(),
+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>For all date/time functions other than timediff(),
+the time value argument 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 value="1"> NNN days
+</li><li value="2"> NNN hours
+</li><li value="3"> NNN minutes
+</li><li value="4"> NNN seconds
+</li><li value="5"> NNN months
+</li><li value="6"> NNN years
+</li><li value="7"> &plusmn;HH:MM
+</li><li value="8"> &plusmn;HH:MM:SS
+</li><li value="9"> &plusmn;HH:MM:SS.SSS
+</li><li value="10"> &plusmn;YYYY-MM-DD
+</li><li value="11"> &plusmn;YYYY-MM-DD HH:MM
+</li><li value="12"> &plusmn;YYYY-MM-DD HH:MM:SS
+</li><li value="13"> &plusmn;YYYY-MM-DD HH:MM:SS.SSS
+</li><li value="14"> start of month
+</li><li value="15"> start of year
+</li><li value="16"> start of day
+</li><li value="17"> weekday N
+</li><li value="18"> unixepoch
+</li><li value="19"> julianday
+</li><li value="20"> auto
+</li><li value="21"> localtime
+</li><li value="22"> utc
+</li><li value="23"> subsec
+</li><li value="24"> subsecond
+</li></ol>
+
+<p>The first thirteen modifiers (1 through 13)
+add the specified amount of time to the date and time
+specified by the arguments to its left.
+The 's' character at the end of the modifier names in 1 through 6 is optional.
+The NNN value can be any floating point number, with an optional '+' or '-' prefix.
+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>
+
+<a name="tmshf"></a>
+
+<p>The time shift modifiers (7 through 13) move the time value by the
+number of years, months, days, hours, minutes, and/or seconds specified.
+An initial "+" or "-" is required for formats 10 through 13 but is optional
+for formats 7, 8, and 9. The changes are applies from left to right.
+First the year is shifted by YYYY, then the month by MM, and then day
+by DD, and so forth. The normalization and rounding due to differing month
+lengths and leap years is applied after each step. The
+timediff(A,B) function returns a time shift in format 13 that shifts
+the time value B into A.</p>
+
+<p>The "start of" modifiers (14 through 16) 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 (18) 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 (21) 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>
+
+<a name="subsec"></a>
+
+<p>
+The "subsecond" modifier (which may be abbreviated as just
+"subsec") increases the resolution of the output for
+<a href="lang_datefunc.html#dttm">datetime()</a>, <a href="lang_datefunc.html#dttm">time()</a>, and <a href="lang_datefunc.html#uepch">unixepoch()</a>, and for the "%s"
+format string in <a href="lang_datefunc.html#strftm">strftime()</a>. The "subsecond"
+modifier has no effect on other date/time functions.
+The current implemention increases the resolution from seconds
+to milliseconds, but this might increase to a higher resolution
+in future releases of SQLite. When "subsec" is used with
+<a href="lang_datefunc.html#dttm">datetime()</a> or <a href="lang_datefunc.html#dttm">time()</a>, the seconds field at the end is
+followed by a decimal point and one or more digits to show
+fractional seconds. When "subsec" is used with <a href="lang_datefunc.html#uepch">unixepoch()</a>,
+the result is a floating point value which is the number of
+seconds and fractional seconds since 1970-01-01.
+
+</p><p>
+The "subsecond" and "subsec" modifiers have the special property
+that they can occur as the first argument to date/time functions
+(or as the first argument after the format string for strftime()).
+When this happens, the time value that is normally in the first
+argument is understood to be "now". For example, a short cut to
+get the current time in seconds since 1970 with millisecond
+precision is to say:
+
+</p><blockquote>
+ SELECT unixepoch('subsec');
+</blockquote>
+
+<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;<br>
+ SELECT unixepoch('now','subsec');
+</blockquote>
+
+<p>Compute how old Abraham Lincoln would be if he were still alive today:</p>
+
+<blockquote>
+ SELECT timediff('now','1809-02-12');
+</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=eb291a29ad">2024-01-29 11:00:27</a> UTC </small></i></p>
+
diff --git a/www/lang_delete.html b/www/lang_delete.html
new file mode 100644
index 0000000..eecf2f4
--- /dev/null
+++ b/www/lang_delete.html
@@ -0,0 +1,3897 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x2aa8e682' onclick='hideorshow("x2aa8e682","x68795f56")'>hide</button></p>
+ <div id='x68795f56' 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='x5189ae7f' onclick='hideorshow("x5189ae7f","xbc35353d")'>show</button></p>
+ <div id='xbc35353d' 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='x4c078627' onclick='hideorshow("x4c078627","x84884756")'>show</button></p>
+ <div id='x84884756' 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='x6357660c' onclick='hideorshow("x6357660c","xe7468236")'>show</button></p>
+ <div id='xe7468236' 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='x140a19f1' onclick='hideorshow("x140a19f1","x5e6610aa")'>show</button></p>
+ <div id='x5e6610aa' 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='xfdf23e60' onclick='hideorshow("xfdf23e60","x36b6fc00")'>show</button></p>
+ <div id='x36b6fc00' 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='x3a440302' onclick='hideorshow("x3a440302","xe9fa2533")'>show</button></p>
+ <div id='xe9fa2533' 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='x42b2af9b' onclick='hideorshow("x42b2af9b","x853fc410")'>show</button></p>
+ <div id='x853fc410' 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='xb8a64bae' onclick='hideorshow("xb8a64bae","x2083fd45")'>show</button></p>
+ <div id='x2083fd45' 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='xb18cdeb4' onclick='hideorshow("xb18cdeb4","xddee31fc")'>show</button></p>
+ <div id='xddee31fc' 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='x6a361fbf' onclick='hideorshow("x6a361fbf","x6e454f99")'>show</button></p>
+ <div id='x6e454f99' 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='xb0ad75f5' onclick='hideorshow("xb0ad75f5","x2f741aa0")'>show</button></p>
+ <div id='x2f741aa0' 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='xc7c286db' onclick='hideorshow("xc7c286db","x419e39e6")'>show</button></p>
+ <div id='x419e39e6' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xe1b64b99' onclick='hideorshow("xe1b64b99","x04bf0984")'>show</button></p>
+ <div id='x04bf0984' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x862ddc68' onclick='hideorshow("x862ddc68","x31f141ae")'>show</button></p>
+ <div id='x31f141ae' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xd195bd3c' onclick='hideorshow("xd195bd3c","xc3e335d9")'>show</button></p>
+ <div id='xc3e335d9' 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/literal-value.html">literal-value:</a></b>
+<button id='x96e1ed97' onclick='hideorshow("x96e1ed97","x7df4b31e")'>show</button></p>
+ <div id='x7df4b31e' 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='x2edcf4f1' onclick='hideorshow("x2edcf4f1","x4a330e5f")'>show</button></p>
+ <div id='x4a330e5f' 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='x61167566' onclick='hideorshow("x61167566","x4a4e4905")'>show</button></p>
+ <div id='x4a4e4905' 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='xb9624f0e' onclick='hideorshow("xb9624f0e","x3857cfb7")'>show</button></p>
+ <div id='x3857cfb7' 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='x835f6078' onclick='hideorshow("x835f6078","x7eedc240")'>show</button></p>
+ <div id='x7eedc240' 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='x8ae201a9' onclick='hideorshow("x8ae201a9","x33ebdd71")'>show</button></p>
+ <div id='x33ebdd71' 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='x66454ab1' onclick='hideorshow("x66454ab1","x9125d024")'>show</button></p>
+ <div id='x9125d024' 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='x09c3a7a3' onclick='hideorshow("x09c3a7a3","x54e8f647")'>show</button></p>
+ <div id='x54e8f647' 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='xcf107c6a' onclick='hideorshow("xcf107c6a","xb3b46ef5")'>show</button></p>
+ <div id='xb3b46ef5' 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='x77b30be9' onclick='hideorshow("x77b30be9","x8a0fd302")'>show</button></p>
+ <div id='x8a0fd302' 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='x4a466074' onclick='hideorshow("x4a466074","x1400cf78")'>show</button></p>
+ <div id='x1400cf78' 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='x98cffd23' onclick='hideorshow("x98cffd23","x4d017398")'>show</button></p>
+ <div id='x4d017398' 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='x974ede38' onclick='hideorshow("x974ede38","x00ae9d3b")'>show</button></p>
+ <div id='x00ae9d3b' 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='xf96ee7f1' onclick='hideorshow("xf96ee7f1","x2f62a84e")'>show</button></p>
+ <div id='x2f62a84e' 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='x4c22ad53' onclick='hideorshow("x4c22ad53","x0cdda2d9")'>show</button></p>
+ <div id='x0cdda2d9' 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='xdbb0ae67' onclick='hideorshow("xdbb0ae67","xd5900761")'>show</button></p>
+ <div id='xd5900761' 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='x7f0e1d9b' onclick='hideorshow("x7f0e1d9b","x9d32abac")'>show</button></p>
+ <div id='x9d32abac' 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='xcdd8d594' onclick='hideorshow("xcdd8d594","x9a0c9086")'>show</button></p>
+ <div id='x9a0c9086' 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='x7a8105f3' onclick='hideorshow("x7a8105f3","x438cc719")'>show</button></p>
+ <div id='x438cc719' 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=9710a614b3">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_detach.html b/www/lang_detach.html
new file mode 100644
index 0000000..ca56f4e
--- /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='x814076d2' onclick='hideorshow("x814076d2","xd4692196")'>hide</button></p>
+ <div id='xd4692196' 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=0a2131785f">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_dropindex.html b/www/lang_dropindex.html
new file mode 100644
index 0000000..d5ebff4
--- /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='x4a75330c' onclick='hideorshow("x4a75330c","x74f5c19d")'>hide</button></p>
+ <div id='x74f5c19d' 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=fbaca78c23">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_droptable.html b/www/lang_droptable.html
new file mode 100644
index 0000000..6cb452f
--- /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='xa474c09d' onclick='hideorshow("xa474c09d","xbbb7e16d")'>hide</button></p>
+ <div id='xbbb7e16d' 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=0350dfc779">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_droptrigger.html b/www/lang_droptrigger.html
new file mode 100644
index 0000000..c899cfc
--- /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='x6447f782' onclick='hideorshow("x6447f782","x6658d618")'>hide</button></p>
+ <div id='x6658d618' 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=975cc05797">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_dropview.html b/www/lang_dropview.html
new file mode 100644
index 0000000..3516383
--- /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='xd0afa372' onclick='hideorshow("xd0afa372","x5a4cabde")'>hide</button></p>
+ <div id='x5a4cabde' 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=2b6e06f992">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_explain.html b/www/lang_explain.html
new file mode 100644
index 0000000..ccd1fc7
--- /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=7122ecf5f6">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_expr.html b/www/lang_expr.html
new file mode 100644
index 0000000..917de07
--- /dev/null
+++ b/www/lang_expr.html
@@ -0,0 +1,3499 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x0840e91f' onclick='hideorshow("x0840e91f","x93e29188")'>hide</button></p>
+ <div id='x93e29188' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xe791f458' onclick='hideorshow("xe791f458","x8260bcb6")'>show</button></p>
+ <div id='x8260bcb6' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x6b6311f3' onclick='hideorshow("x6b6311f3","x03054146")'>show</button></p>
+ <div id='x03054146' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x89085fed' onclick='hideorshow("x89085fed","x06a9994e")'>show</button></p>
+ <div id='x06a9994e' 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/literal-value.html">literal-value:</a></b>
+<button id='x3dcd39c0' onclick='hideorshow("x3dcd39c0","x4bef33ac")'>show</button></p>
+ <div id='x4bef33ac' 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='x65ac9340' onclick='hideorshow("x65ac9340","xff7cf9ba")'>show</button></p>
+ <div id='xff7cf9ba' 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='x5053fd03' onclick='hideorshow("x5053fd03","xc8cecb54")'>show</button></p>
+ <div id='xc8cecb54' 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='xbbbbd699' onclick='hideorshow("xbbbbd699","xe30fce1f")'>show</button></p>
+ <div id='xe30fce1f' 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='x98684bf2' onclick='hideorshow("x98684bf2","x0d0799ad")'>show</button></p>
+ <div id='x0d0799ad' 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='xb57a1b54' onclick='hideorshow("xb57a1b54","x03819efa")'>show</button></p>
+ <div id='x03819efa' 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='x54b507bb' onclick='hideorshow("x54b507bb","x8a122cb2")'>show</button></p>
+ <div id='x8a122cb2' 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='x002bdbec' onclick='hideorshow("x002bdbec","x02204fc1")'>show</button></p>
+ <div id='x02204fc1' 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='xdd7cac4b' onclick='hideorshow("xdd7cac4b","x97ef5c09")'>show</button></p>
+ <div id='x97ef5c09' 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='xbffbdb20' onclick='hideorshow("xbffbdb20","x223e9189")'>show</button></p>
+ <div id='x223e9189' 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='x642af74b' onclick='hideorshow("x642af74b","xc4ef5304")'>show</button></p>
+ <div id='xc4ef5304' 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='xbc696b27' onclick='hideorshow("xbc696b27","xfe90a62a")'>show</button></p>
+ <div id='xfe90a62a' 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='x9c404de4' onclick='hideorshow("x9c404de4","xdf33ac1c")'>show</button></p>
+ <div id='xdf33ac1c' 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='xfbf11dae' onclick='hideorshow("xfbf11dae","xf98cfb13")'>show</button></p>
+ <div id='xf98cfb13' 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='x4037a9c6' onclick='hideorshow("x4037a9c6","x5e8aef24")'>show</button></p>
+ <div id='x5e8aef24' 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='x4d23db6c' onclick='hideorshow("x4d23db6c","x2fb93f17")'>show</button></p>
+ <div id='x2fb93f17' 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='x562f33e9' onclick='hideorshow("x562f33e9","x65bea790")'>show</button></p>
+ <div id='x65bea790' 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='xa1933444' onclick='hideorshow("xa1933444","xa3236222")'>show</button></p>
+ <div id='xa3236222' 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 not-equal 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 an operand of a comparison operator or as
+the value in an UPDATE SET clause whose column name list has the same size.
+
+<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.
+
+<a name="*funcinexpr"></a>
+
+</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>,
+<a href="lang_mathfunc.html">math 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:909px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 909.533 223.344">
+<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="657,56 646,60 646,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L652,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M672,71A15 15 0 0 0 688 56A15 15 0 0 0 672 41A15 15 0 0 0 657 56A15 15 0 0 0 672 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="734,86 722,91 722,82" style="fill:rgb(0,0,0)"/>
+<path d="M688,56 L 699,56 Q 711,56 711,71 L 711,71 Q 711,86 719,86 L 728,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,101L846,101L846,71L734,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="790" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M846,86 L 855,86 Q 864,86 864,71 L 864,71 Q 864,56 879,56 L 879,56 L 894,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="903" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="790,56 778,60 778,52" style="fill:rgb(0,0,0)"/>
+<path d="M688,56L784,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M790,56L894,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="M438,207A15 15 0 0 0 453 192A15 15 0 0 0 438 177A15 15 0 0 0 423 192A15 15 0 0 0 438 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="423,192 412,196 412,188" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,177 Q 254,192 269,192 L 402,192 L 417,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,192 477,196 477,188" style="fill:rgb(0,0,0)"/>
+<path d="M453,192L483,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,192 L 570,192 Q 585,192 600,192 L 605,192 Q 620,192 620,177 L 620,71 Q 620,56 626,56 L 631,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="438,216 427,221 427,212" style="fill:rgb(0,0,0)"/>
+<path d="M326,192 L 392,192 Q 407,192 407,204 Q 407,216 420,216 L 433,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,216 L 453,216 Q 467,216 467,204 Q 467,192 473,192 L 479,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="300,117 289,121 289,112" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 523,56 Q 533,56 533,71 L 533,71 Q 533,86 518,86 L 292,86 Q 277,86 277,101 L 277,102 Q 277,117 286,117 L 294,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M315,132L360,132A15 15 0 0 0 375 117A15 15 0 0 0 360 101L315,101A15 15 0 0 0 300 117A15 15 0 0 0 315 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="392,117 381,121 381,112" style="fill:rgb(0,0,0)"/>
+<path d="M375,117L386,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,132L411,132A15 15 0 0 0 426 117A15 15 0 0 0 411 101L407,101A15 15 0 0 0 392 117A15 15 0 0 0 407 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M426,117L449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,132L585,132L585,101L455,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M520,169A15 15 0 0 0 535 154A15 15 0 0 0 520 139A15 15 0 0 0 505 154A15 15 0 0 0 520 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="535,154 547,150 547,159" style="fill:rgb(0,0,0)"/>
+<path d="M585,117 L 591,117 Q 597,117 597,132 L 597,139 Q 597,154 582,154 L 556,154 L 541,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M505,154 L 470,154 Q 455,154 447,154 Q 438,154 438,139 L 438,132 Q 438,117 444,117 L 449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,117 L 594,117 Q 602,117 602,102 L 602,71 Q 602,56 617,56 L 623,56 L 638,56" 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 and the ORDER BY clause 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=43df2de643">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lang_indexedby.html b/www/lang_indexedby.html
new file mode 100644
index 0000000..daa0495
--- /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='x5aa9a11d' onclick='hideorshow("x5aa9a11d","x7055a075")'>hide</button></p>
+ <div id='x7055a075' 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=f9785fa831">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_insert.html b/www/lang_insert.html
new file mode 100644
index 0000000..fe0d774
--- /dev/null
+++ b/www/lang_insert.html
@@ -0,0 +1,2964 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xcca1c3d7' onclick='hideorshow("xcca1c3d7","x5383aee8")'>hide</button></p>
+ <div id='x5383aee8' 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='xf0d3aaa6' onclick='hideorshow("xf0d3aaa6","x49e39602")'>show</button></p>
+ <div id='x49e39602' 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='xc1a2f708' onclick='hideorshow("xc1a2f708","xd4a63d86")'>show</button></p>
+ <div id='xd4a63d86' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xcf8a196a' onclick='hideorshow("xcf8a196a","x8420f23b")'>show</button></p>
+ <div id='x8420f23b' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x9aeabdcc' onclick='hideorshow("x9aeabdcc","xbdc24256")'>show</button></p>
+ <div id='xbdc24256' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xa95f5e40' onclick='hideorshow("xa95f5e40","x512204a0")'>show</button></p>
+ <div id='x512204a0' 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/literal-value.html">literal-value:</a></b>
+<button id='xe59784a2' onclick='hideorshow("xe59784a2","x9d21b8ae")'>show</button></p>
+ <div id='x9d21b8ae' 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='xce815a31' onclick='hideorshow("xce815a31","xf9fd8ef4")'>show</button></p>
+ <div id='xf9fd8ef4' 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='xa2e5d4af' onclick='hideorshow("xa2e5d4af","x2949bbd4")'>show</button></p>
+ <div id='x2949bbd4' 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='x18c38474' onclick='hideorshow("x18c38474","x7261bc46")'>show</button></p>
+ <div id='x7261bc46' 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='xfad557fa' onclick='hideorshow("xfad557fa","x8befb6f9")'>show</button></p>
+ <div id='x8befb6f9' 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='x9bb2f280' onclick='hideorshow("x9bb2f280","x1fa1f533")'>show</button></p>
+ <div id='x1fa1f533' 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='x5745d92e' onclick='hideorshow("x5745d92e","x09e1aed6")'>show</button></p>
+ <div id='x09e1aed6' 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='x723d5e8c' onclick='hideorshow("x723d5e8c","x19d72b60")'>show</button></p>
+ <div id='x19d72b60' 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='x5bdbec82' onclick='hideorshow("x5bdbec82","xbcbeef36")'>show</button></p>
+ <div id='xbcbeef36' 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='x0c180f05' onclick='hideorshow("x0c180f05","xb6f9388c")'>show</button></p>
+ <div id='xb6f9388c' 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='xf89de978' onclick='hideorshow("xf89de978","x6362a909")'>show</button></p>
+ <div id='x6362a909' 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='x7916ba6e' onclick='hideorshow("x7916ba6e","xb459fa3b")'>show</button></p>
+ <div id='xb459fa3b' 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='x91c5d22b' onclick='hideorshow("x91c5d22b","x0b55033d")'>show</button></p>
+ <div id='x0b55033d' 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='x5d580617' onclick='hideorshow("x5d580617","x0ec96a56")'>show</button></p>
+ <div id='x0ec96a56' 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='xd8ea8d26' onclick='hideorshow("xd8ea8d26","xf4bf1b36")'>show</button></p>
+ <div id='xf4bf1b36' 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='x3d3f20fb' onclick='hideorshow("x3d3f20fb","x7f1369f5")'>show</button></p>
+ <div id='x7f1369f5' 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='x0653bd0e' onclick='hideorshow("x0653bd0e","x2d6ce214")'>show</button></p>
+ <div id='x2d6ce214' 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='x0d4c6856' onclick='hideorshow("x0d4c6856","x0adeb44d")'>show</button></p>
+ <div id='x0adeb44d' 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='xd174bc8e' onclick='hideorshow("xd174bc8e","x1cadbaba")'>show</button></p>
+ <div id='x1cadbaba' 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='xc2ee04d5' onclick='hideorshow("xc2ee04d5","x111107fa")'>show</button></p>
+ <div id='x111107fa' 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='xbbc5f06e' onclick='hideorshow("xbbc5f06e","xfd27277a")'>show</button></p>
+ <div id='xfd27277a' 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=7f221e4bf5">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_keywords.html b/www/lang_keywords.html
new file mode 100644
index 0000000..4f6c1ba
--- /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=0e6afea91e">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..6379e34
--- /dev/null
+++ b/www/lang_mathfunc.html
@@ -0,0 +1,319 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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 a subgroup of
+<a href="lang_corefunc.html">scalar functions</a> that are built into 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=5307cdcb91">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lang_naming.html b/www/lang_naming.html
new file mode 100644
index 0000000..f60c0d6
--- /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=eec821ac86">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_reindex.html b/www/lang_reindex.html
new file mode 100644
index 0000000..60355da
--- /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='x2cf9baca' onclick='hideorshow("x2cf9baca","xb94d42e4")'>hide</button></p>
+ <div id='xb94d42e4' 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=a26831b152">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_replace.html b/www/lang_replace.html
new file mode 100644
index 0000000..771edef
--- /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=e432c86fb7">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_returning.html b/www/lang_returning.html
new file mode 100644
index 0000000..8989e27
--- /dev/null
+++ b/www/lang_returning.html
@@ -0,0 +1,2712 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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-toc2"><a href="#acid_changes">2.2. ACID Changes</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='x7976e0a4' onclick='hideorshow("x7976e0a4","xa416104f")'>hide</button></p>
+ <div id='xa416104f' 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='xe691e618' onclick='hideorshow("xe691e618","x63f05421")'>show</button></p>
+ <div id='x63f05421' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x87b9cf48' onclick='hideorshow("x87b9cf48","x711413a7")'>show</button></p>
+ <div id='x711413a7' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x697afbc6' onclick='hideorshow("x697afbc6","x1531016b")'>show</button></p>
+ <div id='x1531016b' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xea5af493' onclick='hideorshow("xea5af493","xd5c9781e")'>show</button></p>
+ <div id='xd5c9781e' 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/literal-value.html">literal-value:</a></b>
+<button id='x36c988c0' onclick='hideorshow("x36c988c0","x3488dc16")'>show</button></p>
+ <div id='x3488dc16' 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='x65b3ab14' onclick='hideorshow("x65b3ab14","x7bfe6f78")'>show</button></p>
+ <div id='x7bfe6f78' 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='x5e5db0c0' onclick='hideorshow("x5e5db0c0","xd67aa226")'>show</button></p>
+ <div id='xd67aa226' 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='x88289188' onclick='hideorshow("x88289188","x471ed888")'>show</button></p>
+ <div id='x471ed888' 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='x04e1e87f' onclick='hideorshow("x04e1e87f","x12e4cf29")'>show</button></p>
+ <div id='x12e4cf29' 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='x97c3dd79' onclick='hideorshow("x97c3dd79","xa0026cbe")'>show</button></p>
+ <div id='xa0026cbe' 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='xbd24aa66' onclick='hideorshow("xbd24aa66","xe4768ac0")'>show</button></p>
+ <div id='xe4768ac0' 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='x7945722c' onclick='hideorshow("x7945722c","xd5bf2b0b")'>show</button></p>
+ <div id='xd5bf2b0b' 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='x3c5dcc36' onclick='hideorshow("x3c5dcc36","x280534b9")'>show</button></p>
+ <div id='x280534b9' 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='xe3d931b0' onclick='hideorshow("xe3d931b0","x31f5087a")'>show</button></p>
+ <div id='x31f5087a' 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='xad8e0edd' onclick='hideorshow("xad8e0edd","x399d36e6")'>show</button></p>
+ <div id='x399d36e6' 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='x1cdd5f8d' onclick='hideorshow("x1cdd5f8d","xf44d8110")'>show</button></p>
+ <div id='xf44d8110' 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='xf0c5d5df' onclick='hideorshow("xf0c5d5df","x6951e04e")'>show</button></p>
+ <div id='x6951e04e' 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='xfdd4c15e' onclick='hideorshow("xfdd4c15e","x73e7549d")'>show</button></p>
+ <div id='x73e7549d' 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='x1d3a8086' onclick='hideorshow("x1d3a8086","x44ec2984")'>show</button></p>
+ <div id='x44ec2984' 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='x55b16cf1' onclick='hideorshow("x55b16cf1","x2dd27741")'>show</button></p>
+ <div id='x2dd27741' 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='xe23774a6' onclick='hideorshow("xe23774a6","xa28beb6b")'>show</button></p>
+ <div id='xa28beb6b' 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='xd35c20d0' onclick='hideorshow("xd35c20d0","x336c96ab")'>show</button></p>
+ <div id='x336c96ab' 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><h2 id="acid_changes"><span>2.2. </span>ACID Changes</h2>
+
+<p>
+When the previous "<i>Processing Order</i>" section says that
+"database changes occur during the first invocation of sqlite3_step()",
+that means that the changes are stored in the private page cache of
+the database connection that is running the statement. It does
+<i>not</i> mean that the changes are actually committed. The commit
+does not occur until the statement finishes, and maybe not even then
+if the statement is part of a larger transaction. Changes to the
+database are still atomic, consistent, isolated, and durable (ACID).
+When the previous section says "changes occur",
+this means that internal data structure are adjusted pending a transaction
+commit. Some of those changes may or may not spill into the
+<a href="wal.html">write-ahead log</a>, depending on how much pressure there is on the
+page cache. If the page cache is not under memory pressure, then
+probably nothing will be written to disk until after the transaction
+completes, which is after sqlite3_step() returns SQLITE_DONE.
+
+</p><p>
+In other words, when the previous section says "database changes
+occur", that means that the changes occur in the memory of the
+specific database connection that is running the statement, <i>not</i> that
+the changes are written to disk.
+
+</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>
+
+
diff --git a/www/lang_savepoint.html b/www/lang_savepoint.html
new file mode 100644
index 0000000..1645f84
--- /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='xb9721ecc' onclick='hideorshow("xb9721ecc","x4076c644")'>hide</button></p>
+ <div id='x4076c644' 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='xa254d5c5' onclick='hideorshow("xa254d5c5","x9bcd8b3e")'>hide</button></p>
+ <div id='x9bcd8b3e' 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='xca7d6da2' onclick='hideorshow("xca7d6da2","x9b810f3e")'>hide</button></p>
+ <div id='x9b810f3e' 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=60d80524de">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_select.html b/www/lang_select.html
new file mode 100644
index 0000000..8e34a69
--- /dev/null
+++ b/www/lang_select.html
@@ -0,0 +1,16229 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xf2381d42' onclick='hideorshow("xf2381d42","xf05ef6ce")'>hide</button></p>
+ <div id='xf05ef6ce' 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='xb3186489' onclick='hideorshow("xb3186489","x280d7205")'>show</button></p>
+ <div id='x280d7205' 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='xbc45df4d' onclick='hideorshow("xbc45df4d","x13dd8e0c")'>show</button></p>
+ <div id='x13dd8e0c' 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='xb5c926c8' onclick='hideorshow("xb5c926c8","x878b8407")'>show</button></p>
+ <div id='x878b8407' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x22ac5e9d' onclick='hideorshow("x22ac5e9d","xa2879e2c")'>show</button></p>
+ <div id='xa2879e2c' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x57d52cb6' onclick='hideorshow("x57d52cb6","x22c93439")'>show</button></p>
+ <div id='x22c93439' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x9ed64fc0' onclick='hideorshow("x9ed64fc0","x7b2f36e6")'>show</button></p>
+ <div id='x7b2f36e6' 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='x824bcb06' onclick='hideorshow("x824bcb06","x6ade2ba5")'>show</button></p>
+ <div id='x6ade2ba5' 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='xd8e79248' onclick='hideorshow("xd8e79248","x5ddb9706")'>show</button></p>
+ <div id='x5ddb9706' 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='xd9e25840' onclick='hideorshow("xd9e25840","x858831f7")'>show</button></p>
+ <div id='x858831f7' 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='x827f6b30' onclick='hideorshow("x827f6b30","xcd6f4330")'>show</button></p>
+ <div id='xcd6f4330' 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='x3317224a' onclick='hideorshow("x3317224a","x5f8e952c")'>show</button></p>
+ <div id='x5f8e952c' 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='x19cb2983' onclick='hideorshow("x19cb2983","xf1916896")'>show</button></p>
+ <div id='xf1916896' 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='x3d452e70' onclick='hideorshow("x3d452e70","x8012aaad")'>show</button></p>
+ <div id='x8012aaad' 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='x4ac18b9d' onclick='hideorshow("x4ac18b9d","x77661d39")'>show</button></p>
+ <div id='x77661d39' 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='x15c2e5f3' onclick='hideorshow("x15c2e5f3","x2035a2bd")'>show</button></p>
+ <div id='x2035a2bd' 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='xf79db399' onclick='hideorshow("xf79db399","xe0753924")'>show</button></p>
+ <div id='xe0753924' 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='x30756a23' onclick='hideorshow("x30756a23","x25aced32")'>show</button></p>
+ <div id='x25aced32' 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='xe24da894' onclick='hideorshow("xe24da894","x883d91aa")'>show</button></p>
+ <div id='x883d91aa' 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='x2acdfc23' onclick='hideorshow("x2acdfc23","x46136d83")'>show</button></p>
+ <div id='x46136d83' 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='x18fb4b68' onclick='hideorshow("x18fb4b68","x1f334094")'>show</button></p>
+ <div id='x1f334094' 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='xd14beeed' onclick='hideorshow("xd14beeed","x285547b6")'>show</button></p>
+ <div id='x285547b6' 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='x612291e7' onclick='hideorshow("x612291e7","x8d8a489b")'>show</button></p>
+ <div id='x8d8a489b' 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='x338b6388' onclick='hideorshow("x338b6388","x0b2e484c")'>show</button></p>
+ <div id='x0b2e484c' 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='x87114650' onclick='hideorshow("x87114650","x8f9809c2")'>show</button></p>
+ <div id='x8f9809c2' 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='xa3fd0a0d' onclick='hideorshow("xa3fd0a0d","xdff7089e")'>show</button></p>
+ <div id='xdff7089e' 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='xb3703585' onclick='hideorshow("xb3703585","xa1e522d4")'>show</button></p>
+ <div id='xa1e522d4' 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='xd5648fdd' onclick='hideorshow("xd5648fdd","x8ff2b0c6")'>show</button></p>
+ <div id='x8ff2b0c6' 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='x5a5d40ab' onclick='hideorshow("x5a5d40ab","x2ad0f471")'>show</button></p>
+ <div id='x2ad0f471' 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='xb79a64f3' onclick='hideorshow("xb79a64f3","x11c28187")'>show</button></p>
+ <div id='x11c28187' 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='x8b583cba' onclick='hideorshow("x8b583cba","xb5e903a6")'>show</button></p>
+ <div id='xb5e903a6' 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='xf450d44a' onclick='hideorshow("xf450d44a","x65d92beb")'>show</button></p>
+ <div id='x65d92beb' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x490bdf90' onclick='hideorshow("x490bdf90","xd15964f8")'>show</button></p>
+ <div id='xd15964f8' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x4f74be68' onclick='hideorshow("x4f74be68","x1c44911c")'>show</button></p>
+ <div id='x1c44911c' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xed1bfd0d' onclick='hideorshow("xed1bfd0d","xfd4bddef")'>show</button></p>
+ <div id='xfd4bddef' 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='xcbf1149d' onclick='hideorshow("xcbf1149d","x5185a371")'>show</button></p>
+ <div id='x5185a371' 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='x2701af05' onclick='hideorshow("x2701af05","x50514221")'>show</button></p>
+ <div id='x50514221' 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='xe89538f7' onclick='hideorshow("xe89538f7","x6dd0b61c")'>show</button></p>
+ <div id='x6dd0b61c' 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='xb169d67a' onclick='hideorshow("xb169d67a","x25688559")'>show</button></p>
+ <div id='x25688559' 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='xf9f9d5ae' onclick='hideorshow("xf9f9d5ae","x48ca088e")'>show</button></p>
+ <div id='x48ca088e' 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='xf4c54059' onclick='hideorshow("xf4c54059","x7ef5fecd")'>show</button></p>
+ <div id='x7ef5fecd' 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='xb4c7876b' onclick='hideorshow("xb4c7876b","xab7735c2")'>show</button></p>
+ <div id='xab7735c2' 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='xbada6a4f' onclick='hideorshow("xbada6a4f","x1093a306")'>show</button></p>
+ <div id='x1093a306' 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='xca6e6bcb' onclick='hideorshow("xca6e6bcb","x2d71c2ed")'>show</button></p>
+ <div id='x2d71c2ed' 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='xf1b82923' onclick='hideorshow("xf1b82923","x4462294d")'>show</button></p>
+ <div id='x4462294d' 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='xf25e022a' onclick='hideorshow("xf25e022a","x86c017df")'>show</button></p>
+ <div id='x86c017df' 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='xb0449a50' onclick='hideorshow("xb0449a50","x2b121701")'>show</button></p>
+ <div id='x2b121701' 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='x93a42f33' onclick='hideorshow("x93a42f33","x4983f8af")'>show</button></p>
+ <div id='x4983f8af' 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='xb6b8148e' onclick='hideorshow("xb6b8148e","x9f0de7af")'>show</button></p>
+ <div id='x9f0de7af' 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='xcb42dcab' onclick='hideorshow("xcb42dcab","x6e5c7a43")'>show</button></p>
+ <div id='x6e5c7a43' 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='xf2ed18ef' onclick='hideorshow("xf2ed18ef","xb560e673")'>show</button></p>
+ <div id='xb560e673' 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='x31719a7d' onclick='hideorshow("x31719a7d","xadb4a00d")'>show</button></p>
+ <div id='xadb4a00d' 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='x6f659b63' onclick='hideorshow("x6f659b63","xae1a9ab1")'>show</button></p>
+ <div id='xae1a9ab1' 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='x5c1f3322' onclick='hideorshow("x5c1f3322","x8abaa843")'>show</button></p>
+ <div id='x8abaa843' 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='x0367bd25' onclick='hideorshow("x0367bd25","x40f45b85")'>show</button></p>
+ <div id='x40f45b85' 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='x33471d11' onclick='hideorshow("x33471d11","xc9752374")'>show</button></p>
+ <div id='xc9752374' 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='x6c771130' onclick='hideorshow("x6c771130","x90d90faf")'>show</button></p>
+ <div id='x90d90faf' 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='xebf078d1' onclick='hideorshow("xebf078d1","xbeaaefa2")'>show</button></p>
+ <div id='xbeaaefa2' 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='xf4d39422' onclick='hideorshow("xf4d39422","x793d5c47")'>hide</button></p>
+ <div id='x793d5c47' 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='xe303724e' onclick='hideorshow("xe303724e","x1304d3be")'>show</button></p>
+ <div id='x1304d3be' 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='x002dc602' onclick='hideorshow("x002dc602","x0b27af7d")'>show</button></p>
+ <div id='x0b27af7d' 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='xb40860b7' onclick='hideorshow("xb40860b7","x21aa2d8c")'>show</button></p>
+ <div id='x21aa2d8c' 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='xb73d032c' onclick='hideorshow("xb73d032c","xc894a2b3")'>show</button></p>
+ <div id='xc894a2b3' 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='x037100cf' onclick='hideorshow("x037100cf","x509cdbdb")'>show</button></p>
+ <div id='x509cdbdb' 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='xb0ae2d6e' onclick='hideorshow("xb0ae2d6e","x29126674")'>show</button></p>
+ <div id='x29126674' 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='x197ecf2e' onclick='hideorshow("x197ecf2e","x5567adb3")'>show</button></p>
+ <div id='x5567adb3' 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='xb21a4197' onclick='hideorshow("xb21a4197","xec95716d")'>show</button></p>
+ <div id='xec95716d' 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='x56f314bd' onclick='hideorshow("x56f314bd","xdb58841c")'>show</button></p>
+ <div id='xdb58841c' 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='x7135de03' onclick='hideorshow("x7135de03","x54367b61")'>show</button></p>
+ <div id='x54367b61' 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='xdb85b9d6' onclick='hideorshow("xdb85b9d6","xde8f239b")'>show</button></p>
+ <div id='xde8f239b' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x33d80a14' onclick='hideorshow("x33d80a14","x6f94100e")'>show</button></p>
+ <div id='x6f94100e' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x060984e5' onclick='hideorshow("x060984e5","xee7f8fc0")'>show</button></p>
+ <div id='xee7f8fc0' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x283d8f59' onclick='hideorshow("x283d8f59","x2eea733a")'>show</button></p>
+ <div id='x2eea733a' 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='x4d3f1c2b' onclick='hideorshow("x4d3f1c2b","xecba4e98")'>show</button></p>
+ <div id='xecba4e98' 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='xbf16314b' onclick='hideorshow("xbf16314b","x6f0e6653")'>show</button></p>
+ <div id='x6f0e6653' 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='xb489060c' onclick='hideorshow("xb489060c","x85779a10")'>show</button></p>
+ <div id='x85779a10' 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='xc1a3c356' onclick='hideorshow("xc1a3c356","xeaffe9c4")'>show</button></p>
+ <div id='xeaffe9c4' 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='x5eefbfd0' onclick='hideorshow("x5eefbfd0","x18a116dd")'>show</button></p>
+ <div id='x18a116dd' 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='x3b732021' onclick='hideorshow("x3b732021","x0bc880df")'>show</button></p>
+ <div id='x0bc880df' 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='xb205fe1a' onclick='hideorshow("xb205fe1a","x443d8054")'>show</button></p>
+ <div id='x443d8054' 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='xa3f08acc' onclick='hideorshow("xa3f08acc","xcb4d76ea")'>show</button></p>
+ <div id='xcb4d76ea' 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='x8ea66a31' onclick='hideorshow("x8ea66a31","x1b65ccd9")'>show</button></p>
+ <div id='x1b65ccd9' 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='x41cc3cd1' onclick='hideorshow("x41cc3cd1","xbef26e88")'>show</button></p>
+ <div id='xbef26e88' 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='x468c49ac' onclick='hideorshow("x468c49ac","xbbef8e34")'>show</button></p>
+ <div id='xbbef8e34' 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='xea5ec156' onclick='hideorshow("xea5ec156","x2df1eaa9")'>show</button></p>
+ <div id='x2df1eaa9' 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='x9f9bb566' onclick='hideorshow("x9f9bb566","x0be7e6ca")'>show</button></p>
+ <div id='x0be7e6ca' 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='x5ca2d540' onclick='hideorshow("x5ca2d540","x42d87c3a")'>show</button></p>
+ <div id='x42d87c3a' 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='x6d034886' onclick='hideorshow("x6d034886","x320e6273")'>show</button></p>
+ <div id='x320e6273' 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='x046254b2' onclick='hideorshow("x046254b2","x81614949")'>hide</button></p>
+ <div id='x81614949' 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='x28ecd5fe' onclick='hideorshow("x28ecd5fe","xee5ebb83")'>show</button></p>
+ <div id='xee5ebb83' 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='xc47fdc79' onclick='hideorshow("xc47fdc79","xa72bfe9b")'>show</button></p>
+ <div id='xa72bfe9b' 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='x3d0be55d' onclick='hideorshow("x3d0be55d","x5e3f1679")'>show</button></p>
+ <div id='x5e3f1679' 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='x0bfc21e5' onclick='hideorshow("x0bfc21e5","xc884f577")'>show</button></p>
+ <div id='xc884f577' 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='xbff34af5' onclick='hideorshow("xbff34af5","x36cb15fd")'>show</button></p>
+ <div id='x36cb15fd' 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='x9767e441' onclick='hideorshow("x9767e441","xa0bfe660")'>show</button></p>
+ <div id='xa0bfe660' 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='x8eb79397' onclick='hideorshow("x8eb79397","x84912f48")'>show</button></p>
+ <div id='x84912f48' 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='x4a49b898' onclick='hideorshow("x4a49b898","x14b7e517")'>show</button></p>
+ <div id='x14b7e517' 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='x84df1f0c' onclick='hideorshow("x84df1f0c","x82b1389c")'>show</button></p>
+ <div id='x82b1389c' 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.
+This is considered a feature, not a bug. See the discussion on
+<a href="https://sqlite.org/forum/forumpost/7481d2a6df8980ff">SQLite Forum thread 7481d2a6df8980ff</a>
+for additional information.</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='x79298984' onclick='hideorshow("x79298984","x25876c55")'>hide</button></p>
+ <div id='x25876c55' 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='x297fc842' onclick='hideorshow("x297fc842","x0b16f6e4")'>show</button></p>
+ <div id='x0b16f6e4' 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='xe44cb4ee' onclick='hideorshow("xe44cb4ee","x5163e62f")'>show</button></p>
+ <div id='x5163e62f' 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='xd96fe8d9' onclick='hideorshow("xd96fe8d9","x456b1eae")'>show</button></p>
+ <div id='x456b1eae' 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='xe1a9e7fb' onclick='hideorshow("xe1a9e7fb","x63d62ab9")'>show</button></p>
+ <div id='x63d62ab9' 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='xcd9909f5' onclick='hideorshow("xcd9909f5","x8a186c96")'>show</button></p>
+ <div id='x8a186c96' 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='x98275cc3' onclick='hideorshow("x98275cc3","xced84a8c")'>show</button></p>
+ <div id='xced84a8c' 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='x31e27d3e' onclick='hideorshow("x31e27d3e","x670d2a67")'>show</button></p>
+ <div id='x670d2a67' 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='xfc280618' onclick='hideorshow("xfc280618","x3c6348f4")'>show</button></p>
+ <div id='x3c6348f4' 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='xce1ae0b0' onclick='hideorshow("xce1ae0b0","xe3df3276")'>show</button></p>
+ <div id='xe3df3276' 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='x0b6da2cb' onclick='hideorshow("x0b6da2cb","xa55ff156")'>show</button></p>
+ <div id='xa55ff156' 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='xb0110d17' onclick='hideorshow("xb0110d17","xa58b7a65")'>show</button></p>
+ <div id='xa58b7a65' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xceda306e' onclick='hideorshow("xceda306e","xea62fd58")'>show</button></p>
+ <div id='xea62fd58' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x3b1c4694' onclick='hideorshow("x3b1c4694","x05ebb606")'>show</button></p>
+ <div id='x05ebb606' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xe3bbd990' onclick='hideorshow("xe3bbd990","x6fe52e16")'>show</button></p>
+ <div id='x6fe52e16' 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='xa8bb4111' onclick='hideorshow("xa8bb4111","xaafd812c")'>show</button></p>
+ <div id='xaafd812c' 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='xac187afd' onclick='hideorshow("xac187afd","x7446f303")'>show</button></p>
+ <div id='x7446f303' 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='xaf0ab36f' onclick='hideorshow("xaf0ab36f","x5a9d9547")'>show</button></p>
+ <div id='x5a9d9547' 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='x6462122b' onclick='hideorshow("x6462122b","x5f77c13d")'>show</button></p>
+ <div id='x5f77c13d' 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='xf14d4425' onclick='hideorshow("xf14d4425","x1a6c3ae2")'>show</button></p>
+ <div id='x1a6c3ae2' 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='x1a2d29a6' onclick='hideorshow("x1a2d29a6","x2d706d77")'>show</button></p>
+ <div id='x2d706d77' 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='x67e595a0' onclick='hideorshow("x67e595a0","xad556e60")'>show</button></p>
+ <div id='xad556e60' 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='x6e06bdd2' onclick='hideorshow("x6e06bdd2","x566b7594")'>show</button></p>
+ <div id='x566b7594' 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='x97092db7' onclick='hideorshow("x97092db7","x940219b8")'>show</button></p>
+ <div id='x940219b8' 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='xd5bf60d0' onclick='hideorshow("xd5bf60d0","xd94f9210")'>show</button></p>
+ <div id='xd94f9210' 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='x1fd092e6' onclick='hideorshow("x1fd092e6","xb8787981")'>show</button></p>
+ <div id='xb8787981' 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='x27b5b481' onclick='hideorshow("x27b5b481","xedf30102")'>show</button></p>
+ <div id='xedf30102' 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='xcc909163' onclick='hideorshow("xcc909163","xcaf85157")'>show</button></p>
+ <div id='xcaf85157' 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='x788a6107' onclick='hideorshow("x788a6107","x1b3d4145")'>show</button></p>
+ <div id='x1b3d4145' 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='x44708a7c' onclick='hideorshow("x44708a7c","x0cdb687a")'>show</button></p>
+ <div id='x0cdb687a' 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='x10e80211' onclick='hideorshow("x10e80211","xba3ee58c")'>show</button></p>
+ <div id='xba3ee58c' 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='xc3747ad1' onclick='hideorshow("xc3747ad1","xd5279444")'>show</button></p>
+ <div id='xd5279444' 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='x8fe4926f' onclick='hideorshow("x8fe4926f","x6a2007d5")'>show</button></p>
+ <div id='x6a2007d5' 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='xcab301ef' onclick='hideorshow("xcab301ef","x3df9ba0e")'>show</button></p>
+ <div id='x3df9ba0e' 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='x61f42f9c' onclick='hideorshow("x61f42f9c","xe09b6df9")'>show</button></p>
+ <div id='xe09b6df9' 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='xea7208de' onclick='hideorshow("xea7208de","xac9b420d")'>show</button></p>
+ <div id='xac9b420d' 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='x90ffb670' onclick='hideorshow("x90ffb670","xd685fecf")'>show</button></p>
+ <div id='xd685fecf' 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='x62aba7dc' onclick='hideorshow("x62aba7dc","xf7375003")'>show</button></p>
+ <div id='xf7375003' 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='x165ac4e6' onclick='hideorshow("x165ac4e6","xcd8a346f")'>show</button></p>
+ <div id='xcd8a346f' 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='xd7ba7ea2' onclick='hideorshow("xd7ba7ea2","xd97ae810")'>show</button></p>
+ <div id='xd97ae810' 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='xcd7cc9da' onclick='hideorshow("xcd7cc9da","x075b2cf8")'>hide</button></p>
+ <div id='x075b2cf8' 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=22906d1d5a">2023-06-13 13:23:44</a> UTC </small></i></p>
+
diff --git a/www/lang_transaction.html b/www/lang_transaction.html
new file mode 100644
index 0000000..8c12682
--- /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='xb1701bb4' onclick='hideorshow("xb1701bb4","x4999ba07")'>hide</button></p>
+ <div id='x4999ba07' 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='x4ef3720b' onclick='hideorshow("x4ef3720b","x9d6c8324")'>hide</button></p>
+ <div id='x9d6c8324' 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='x82e26188' onclick='hideorshow("x82e26188","xbfddd6c6")'>hide</button></p>
+ <div id='xbfddd6c6' 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 causes 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=9c5adbec23">2023-03-14 14:31:07</a> UTC </small></i></p>
+
diff --git a/www/lang_update.html b/www/lang_update.html
new file mode 100644
index 0000000..2b0f63e
--- /dev/null
+++ b/www/lang_update.html
@@ -0,0 +1,4636 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xa4fdb076' onclick='hideorshow("xa4fdb076","x56a8d4eb")'>hide</button></p>
+ <div id='x56a8d4eb' 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='x91909bd0' onclick='hideorshow("x91909bd0","x519ae0f5")'>show</button></p>
+ <div id='x519ae0f5' 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='xfb073f3b' onclick='hideorshow("xfb073f3b","xc6e79e93")'>show</button></p>
+ <div id='xc6e79e93' 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='x383880f8' onclick='hideorshow("x383880f8","x4e8566d3")'>show</button></p>
+ <div id='x4e8566d3' 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='x2013f253' onclick='hideorshow("x2013f253","x49b48af1")'>show</button></p>
+ <div id='x49b48af1' 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='x6c296279' onclick='hideorshow("x6c296279","xe12b3623")'>show</button></p>
+ <div id='xe12b3623' 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='x218f21db' onclick='hideorshow("x218f21db","x2ca05a8b")'>show</button></p>
+ <div id='x2ca05a8b' 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='x333b713e' onclick='hideorshow("x333b713e","x500fc386")'>show</button></p>
+ <div id='x500fc386' 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='x5b3bbb96' onclick='hideorshow("x5b3bbb96","x0dce040a")'>show</button></p>
+ <div id='x0dce040a' 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='x4d20e7f0' onclick='hideorshow("x4d20e7f0","x872c5069")'>show</button></p>
+ <div id='x872c5069' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xf1bef27f' onclick='hideorshow("xf1bef27f","xa1dbb23b")'>show</button></p>
+ <div id='xa1dbb23b' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x9d9c427c' onclick='hideorshow("x9d9c427c","xe00c659d")'>show</button></p>
+ <div id='xe00c659d' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x5c1dffbd' onclick='hideorshow("x5c1dffbd","xf2b552fe")'>show</button></p>
+ <div id='xf2b552fe' 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/literal-value.html">literal-value:</a></b>
+<button id='x204dbb84' onclick='hideorshow("x204dbb84","x8867dd3b")'>show</button></p>
+ <div id='x8867dd3b' 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='x00ba315e' onclick='hideorshow("x00ba315e","x4cb19a10")'>show</button></p>
+ <div id='x4cb19a10' 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='xc3944d07' onclick='hideorshow("xc3944d07","x56395ae1")'>show</button></p>
+ <div id='x56395ae1' 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='x7cd76301' onclick='hideorshow("x7cd76301","xa55d11b9")'>show</button></p>
+ <div id='xa55d11b9' 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='xc614b2d9' onclick='hideorshow("xc614b2d9","xb258f8da")'>show</button></p>
+ <div id='xb258f8da' 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='x82a14aeb' onclick='hideorshow("x82a14aeb","x59e17648")'>show</button></p>
+ <div id='x59e17648' 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='xd11f97af' onclick='hideorshow("xd11f97af","xf840201f")'>show</button></p>
+ <div id='xf840201f' 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='x5e50c922' onclick='hideorshow("x5e50c922","x1802720d")'>show</button></p>
+ <div id='x1802720d' 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='x7add1aab' onclick='hideorshow("x7add1aab","x1685eb80")'>show</button></p>
+ <div id='x1685eb80' 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='x11941d38' onclick='hideorshow("x11941d38","x2486d9b4")'>show</button></p>
+ <div id='x2486d9b4' 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='x9d8ac2fd' onclick='hideorshow("x9d8ac2fd","x3c5946d8")'>show</button></p>
+ <div id='x3c5946d8' 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='x75b380b1' onclick='hideorshow("x75b380b1","xcb50eec8")'>show</button></p>
+ <div id='xcb50eec8' 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='x75e4c731' onclick='hideorshow("x75e4c731","xe64a9fca")'>show</button></p>
+ <div id='xe64a9fca' 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='xf8004302' onclick='hideorshow("xf8004302","xecfb5c42")'>show</button></p>
+ <div id='xecfb5c42' 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='xf0ed8917' onclick='hideorshow("xf0ed8917","xc67a961d")'>show</button></p>
+ <div id='xc67a961d' 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='x247403c9' onclick='hideorshow("x247403c9","xd476eb65")'>show</button></p>
+ <div id='xd476eb65' 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='x8f3c27d2' onclick='hideorshow("x8f3c27d2","x72daa5e5")'>show</button></p>
+ <div id='x72daa5e5' 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='x59df7a02' onclick='hideorshow("x59df7a02","x48f24b2b")'>show</button></p>
+ <div id='x48f24b2b' 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='xdd15e5f2' onclick='hideorshow("xdd15e5f2","x4f86d709")'>show</button></p>
+ <div id='x4f86d709' 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='xb6aa4ab1' onclick='hideorshow("xb6aa4ab1","xcc4de110")'>show</button></p>
+ <div id='xcc4de110' 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='x916c04af' onclick='hideorshow("x916c04af","xbf45b794")'>show</button></p>
+ <div id='xbf45b794' 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='xb67d3bd6' onclick='hideorshow("xb67d3bd6","xceb475f6")'>show</button></p>
+ <div id='xceb475f6' 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='x71702358' onclick='hideorshow("x71702358","xb7f0c51f")'>show</button></p>
+ <div id='xb7f0c51f' 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='xdd1185b4' onclick='hideorshow("xdd1185b4","xae79c4ec")'>show</button></p>
+ <div id='xae79c4ec' 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='x86967644' onclick='hideorshow("x86967644","x5a9fa18e")'>show</button></p>
+ <div id='x5a9fa18e' 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 1047.01">
+<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="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,726 L 24,738" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,753 39,757 39,748" style="fill:rgb(0,0,0)"/>
+<path d="M24,738 L 24,745 Q 24,753 34,753 L 45,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,768L201,768L201,738L50,738Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="126,791 137,786 137,795" style="fill:rgb(0,0,0)"/>
+<path d="M201,753 L 211,753 Q 220,753 220,768 L 220,776 Q 220,791 205,791 L 147,791 L 132,791" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,828 39,833 39,824" style="fill:rgb(0,0,0)"/>
+<path d="M126,791 L 39,791 Q 24,791 24,806 L 24,813 Q 24,828 34,828 L 45,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,843L110,843A15 15 0 0 0 125 828A15 15 0 0 0 110 813L66,813A15 15 0 0 0 50 828A15 15 0 0 0 66 843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="148,828 137,833 137,824" style="fill:rgb(0,0,0)"/>
+<path d="M125,828L142,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,843L167,843A15 15 0 0 0 183 828A15 15 0 0 0 167 813L163,813A15 15 0 0 0 148 828A15 15 0 0 0 163 843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="165" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="219,828 207,833 207,824" style="fill:rgb(0,0,0)"/>
+<path d="M183,828L213,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,843L348,843L348,813L219,813Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M283,881L283,881A15 15 0 0 0 299 866A15 15 0 0 0 283 851L283,851A15 15 0 0 0 268 866A15 15 0 0 0 283 881Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="866" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,949L93,949A15 15 0 0 0 109 934A15 15 0 0 0 93 919L60,919A15 15 0 0 0 45 934A15 15 0 0 0 60 949Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="934" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,934 120,939 120,930" style="fill:rgb(0,0,0)"/>
+<path d="M109,934L126,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,949L181,949L181,919L132,919Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="934" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,964 207,969 207,960" style="fill:rgb(0,0,0)"/>
+<path d="M181,934 L 188,934 Q 196,934 196,949 L 196,949 Q 196,964 204,964 L 213,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,980L285,980A15 15 0 0 0 300 964A15 15 0 0 0 285 949L234,949A15 15 0 0 0 219 964A15 15 0 0 0 234 980Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="964" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,964 312,969 312,960" style="fill:rgb(0,0,0)"/>
+<path d="M300,964L318,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,980L373,980L373,949L323,949Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="964" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,1017A15 15 0 0 0 249 1002A15 15 0 0 0 234 987A15 15 0 0 0 219 1002A15 15 0 0 0 234 1017Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="1002" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,1002 261,1007 261,998" style="fill:rgb(0,0,0)"/>
+<path d="M249,1002L266,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,1017L321,1017L321,987L272,987Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="1002" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,1002 207,1007 207,998" style="fill:rgb(0,0,0)"/>
+<path d="M181,934 L 188,934 Q 196,934 196,949 L 196,987 Q 196,1002 204,1002 L 213,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,866 310,862 310,870" style="fill:rgb(0,0,0)"/>
+<path d="M348,828 L 356,828 Q 363,828 363,843 L 363,851 Q 363,866 348,866 L 319,866 L 304,866" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,866 L 210,866 Q 195,866 195,851 L 195,843 Q 195,828 203,828 L 210,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,934 33,939 33,930" style="fill:rgb(0,0,0)"/>
+<path d="M24,511 L 24,919 Q 24,934 31,934 L 39,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,896 177,892 177,901" style="fill:rgb(0,0,0)"/>
+<path d="M348,828 L 356,828 Q 363,828 363,843 L 363,881 Q 363,896 348,896 L 186,896 L 171,896" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,896 L 39,896 Q 24,896 24,904 L 24,911" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="178,1040 166,1044 166,1036" style="fill:rgb(0,0,0)"/>
+<path d="M24,919 L 24,1025 Q 24,1040 39,1040 L 157,1040 L 172,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,1040 602,1044 602,1036" style="fill:rgb(0,0,0)"/>
+<path d="M178,1040L608,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="1040" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,964 384,969 384,960" style="fill:rgb(0,0,0)"/>
+<path d="M373,964L390,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,1040 435,1044 435,1036" style="fill:rgb(0,0,0)"/>
+<path d="M396,964 L 403,964 Q 411,964 411,979 L 411,1025 Q 411,1040 426,1040 L 426,1040 L 441,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,1002 384,1007 384,998" style="fill:rgb(0,0,0)"/>
+<path d="M321,1002L390,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,1002 L 403,1002 Q 411,1002 411,1010 L 411,1017" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,934 384,939 384,930" style="fill:rgb(0,0,0)"/>
+<path d="M181,934L390,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,934 L 403,934 Q 411,934 411,949 L 411,965 L 411,980" 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=9cde642bd8">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_upsert.html b/www/lang_upsert.html
new file mode 100644
index 0000000..bd9646f
--- /dev/null
+++ b/www/lang_upsert.html
@@ -0,0 +1,2780 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xe9450c39' onclick='hideorshow("xe9450c39","xfa378d66")'>hide</button></p>
+ <div id='xfa378d66' 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='x7e1c0400' onclick='hideorshow("x7e1c0400","x17e6472a")'>show</button></p>
+ <div id='x17e6472a' 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='x3acee1f5' onclick='hideorshow("x3acee1f5","xb67bad41")'>show</button></p>
+ <div id='xb67bad41' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x934e65bd' onclick='hideorshow("x934e65bd","xc434a902")'>show</button></p>
+ <div id='xc434a902' 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/function-arguments.html">function-arguments:</a></b>
+<button id='xc7e77f62' onclick='hideorshow("xc7e77f62","xc9d81d54")'>show</button></p>
+ <div id='xc9d81d54' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xb5e96a9d' onclick='hideorshow("xb5e96a9d","x08350c53")'>show</button></p>
+ <div id='x08350c53' 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/literal-value.html">literal-value:</a></b>
+<button id='x4e1566f2' onclick='hideorshow("x4e1566f2","x2952d545")'>show</button></p>
+ <div id='x2952d545' 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='xa4f0cbf5' onclick='hideorshow("xa4f0cbf5","x25a8664b")'>show</button></p>
+ <div id='x25a8664b' 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='x63c5b6ad' onclick='hideorshow("x63c5b6ad","xa670611a")'>show</button></p>
+ <div id='xa670611a' 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='xc6ca0cfc' onclick='hideorshow("xc6ca0cfc","xf6ea198b")'>show</button></p>
+ <div id='xf6ea198b' 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='xe8250198' onclick='hideorshow("xe8250198","xb1a9a161")'>show</button></p>
+ <div id='xb1a9a161' 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='xef4390f8' onclick='hideorshow("xef4390f8","xd32437ff")'>show</button></p>
+ <div id='xd32437ff' 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='xd5f8ca5b' onclick='hideorshow("xd5f8ca5b","x0116d3e2")'>show</button></p>
+ <div id='x0116d3e2' 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='x57a8aae3' onclick='hideorshow("x57a8aae3","x7a5d86ca")'>show</button></p>
+ <div id='x7a5d86ca' 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='xf500aaa5' onclick='hideorshow("xf500aaa5","x2d8f1a68")'>show</button></p>
+ <div id='x2d8f1a68' 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='x6229a7cc' onclick='hideorshow("x6229a7cc","x6e07e380")'>show</button></p>
+ <div id='x6e07e380' 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='x5b581b92' onclick='hideorshow("x5b581b92","xf135f136")'>show</button></p>
+ <div id='xf135f136' 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='x93623079' onclick='hideorshow("x93623079","xb79f383f")'>show</button></p>
+ <div id='xb79f383f' 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='xbf879514' onclick='hideorshow("xbf879514","x9a2239ac")'>show</button></p>
+ <div id='x9a2239ac' 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='x20fa6ded' onclick='hideorshow("x20fa6ded","xa7541184")'>show</button></p>
+ <div id='xa7541184' 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='xb8827789' onclick='hideorshow("xb8827789","xf25061d1")'>show</button></p>
+ <div id='xf25061d1' 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='x325fc512' onclick='hideorshow("x325fc512","xa80ac639")'>show</button></p>
+ <div id='xa80ac639' 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='x652ef7d2' onclick='hideorshow("x652ef7d2","xe03fe1dd")'>show</button></p>
+ <div id='xe03fe1dd' 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='x605c2f46' onclick='hideorshow("x605c2f46","x6e27de8e")'>show</button></p>
+ <div id='x6e27de8e' 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='x23f9d137' onclick='hideorshow("x23f9d137","x9e579f63")'>show</button></p>
+ <div id='x9e579f63' 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=e0df5cdd65">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lang_vacuum.html b/www/lang_vacuum.html
new file mode 100644
index 0000000..539402f
--- /dev/null
+++ b/www/lang_vacuum.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x0fc49388' onclick='hideorshow("x0fc49388","x74e14988")'>hide</button></p>
+ <div id='x74e14988' 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 argument is a scalar <a href="lang_expr.html">expression</a>, such as a text literal.
+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 loss, 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=d66fef5b60">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lang_with.html b/www/lang_with.html
new file mode 100644
index 0000000..002dc8e
--- /dev/null
+++ b/www/lang_with.html
@@ -0,0 +1,3226 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xb0146d13' onclick='hideorshow("xb0146d13","x19290fa5")'>hide</button></p>
+ <div id='x19290fa5' 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='xf8d0fe71' onclick='hideorshow("xf8d0fe71","x81284945")'>show</button></p>
+ <div id='x81284945' 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='xfbcf7562' onclick='hideorshow("xfbcf7562","x1d4a4e7f")'>show</button></p>
+ <div id='x1d4a4e7f' 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='x31edf8ec' onclick='hideorshow("x31edf8ec","x8fbe4aa7")'>show</button></p>
+ <div id='x8fbe4aa7' 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='xc8eb0ddc' onclick='hideorshow("xc8eb0ddc","x208f29ed")'>show</button></p>
+ <div id='x208f29ed' 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='x04772ea3' onclick='hideorshow("x04772ea3","x22d17afd")'>show</button></p>
+ <div id='x22d17afd' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='xafb7f84d' onclick='hideorshow("xafb7f84d","xf78e9fad")'>show</button></p>
+ <div id='xf78e9fad' 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/function-arguments.html">function-arguments:</a></b>
+<button id='xcc46fa89' onclick='hideorshow("xcc46fa89","x419739ec")'>show</button></p>
+ <div id='x419739ec' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x53287638' onclick='hideorshow("x53287638","xb1a79978")'>show</button></p>
+ <div id='xb1a79978' 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='x942a7106' onclick='hideorshow("x942a7106","x98da4c6f")'>show</button></p>
+ <div id='x98da4c6f' 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='xa3243f1a' onclick='hideorshow("xa3243f1a","x8b6adc93")'>show</button></p>
+ <div id='x8b6adc93' 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='x932fbfda' onclick='hideorshow("x932fbfda","xdc31af0f")'>show</button></p>
+ <div id='xdc31af0f' 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='x8841f35f' onclick='hideorshow("x8841f35f","xe4dc3da4")'>show</button></p>
+ <div id='xe4dc3da4' 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='x45e73fee' onclick='hideorshow("x45e73fee","x008ff276")'>show</button></p>
+ <div id='x008ff276' 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='x559ff0a9' onclick='hideorshow("x559ff0a9","x9f3f4fcb")'>show</button></p>
+ <div id='x9f3f4fcb' 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='xe7e73347' onclick='hideorshow("xe7e73347","x50ce50e4")'>show</button></p>
+ <div id='x50ce50e4' 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='x925e3dfe' onclick='hideorshow("x925e3dfe","x320b37a7")'>show</button></p>
+ <div id='x320b37a7' 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='x4bde7278' onclick='hideorshow("x4bde7278","xdda0d1b0")'>show</button></p>
+ <div id='xdda0d1b0' 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='x08849e4b' onclick='hideorshow("x08849e4b","xda1e0f7a")'>show</button></p>
+ <div id='xda1e0f7a' 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='x4372f9d0' onclick='hideorshow("x4372f9d0","x5aa8153f")'>show</button></p>
+ <div id='x5aa8153f' 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='x66a85192' onclick='hideorshow("x66a85192","x465522d8")'>show</button></p>
+ <div id='x465522d8' 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='xac5baad5' onclick='hideorshow("xac5baad5","x49ec54dd")'>show</button></p>
+ <div id='x49ec54dd' 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 recursive if
+ its FROM clause contains exactly one reference to
+ 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='x10228e7e' onclick='hideorshow("x10228e7e","x653c1dbe")'>hide</button></p>
+ <div id='x653c1dbe' 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='x3b5b3f09' onclick='hideorshow("x3b5b3f09","xe0753fea")'>show</button></p>
+ <div id='xe0753fea' 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="https://www.sqlite.org/src/timeline?p=trunk&n=30">https://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> will
+be materialized into an ephemeral table that is held in memory or in a
+temporary disk file. That ephemeral table will then be used in place of the
+CTE table name whenever the CTE 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.
+This loss of optimization is a feature, not a bug. Developers are able
+to use the MATERIALIZED keyword as an "optimization fence" to more tightly
+control the behavior of the SQLite query planner. SQLite copied the idea of
+using MATERIALIZED as an optimization fence from PostgreSQL.
+
+</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 is free to choose whatever
+implementation strategy it thinks will work best. This is the recommended
+approach. <i>Do not use the MATERIALIZED or NOT MATERIALIZED keywords on
+a common table expression unless you have a compelling reason to do so.</i>
+
+</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=5365d4ff94">2024-01-29 11:00:27</a> UTC </small></i></p>
+
diff --git a/www/lemon.html b/www/lemon.html
new file mode 100644
index 0000000..0b01bdd
--- /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=b11f8f15fd">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/limits.html b/www/limits.html
new file mode 100644
index 0000000..cd5db0a
--- /dev/null
+++ b/www/limits.html
@@ -0,0 +1,540 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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
+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
+(2<sup><small>32</small></sup>-2).
+Since version 3.45.0 (2024-01-15), 4294967294 is
+also the default value for SQLITE_MAX_PAGE_COUNT.
+When used with the default page size of 4096 bytes, this gives a
+maximum database size of about 17.5 terabytes.
+If the page size is increased to the maximum of 65536 bytes, then the
+database file can grow to be as large as 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=8837dabd25">2024-01-03 11:05:13</a> UTC </small></i></p>
+
diff --git a/www/loadext.html b/www/loadext.html
new file mode 100644
index 0000000..20f1a15
--- /dev/null
+++ b/www/loadext.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>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.
+
+<a name="statext"></a>
+
+</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=7248fc35ca">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/lockingv3.html b/www/lockingv3.html
new file mode 100644
index 0000000..b68b9ef
--- /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="https://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="https://www.sqlite.org/src/finfo?name=src/os_unix.c">
+os_unix.c</a>,
+<a href="https://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>
+
+
diff --git a/www/locrsf.html b/www/locrsf.html
new file mode 100644
index 0000000..d981828
--- /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=19d9ca287f">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/lts.html b/www/lts.html
new file mode 100644
index 0000000..07e3206
--- /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=c7fb3381bb">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/malloc.html b/www/malloc.html
new file mode 100644
index 0000000..2aa73fa
--- /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=fc088f2b1c">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/memstat.html b/www/memstat.html
new file mode 100644
index 0000000..e209961
--- /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=4d88e885eb">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/mingw.html b/www/mingw.html
new file mode 100644
index 0000000..310d546
--- /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=a96ea79f7a">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/mmap.html b/www/mmap.html
new file mode 100644
index 0000000..b3031c4
--- /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=d9fc0c2243">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/mostdeployed.html b/www/mostdeployed.html
new file mode 100644
index 0000000..a3d2acf
--- /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=e39f595cab">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/news.html b/www/news.html
new file mode 100644
index 0000000..b01454b
--- /dev/null
+++ b/www/news.html
@@ -0,0 +1,835 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="2024_01_30"></a><h3>2024-01-30 - <a href="releaselog/3_45_1.html">Version 3.45.1</a></h3><blockquote>
+Version 3.45.1 is a patch against SQLite version 3.45.0.
+<p>
+The main focus of this patch release is to restore certain
+undocumented legacy behavior in the <a href="json1.html">JSON SQL functions</a> that
+the developers were unaware of but which some applications
+had come to depend on. This undocumented behavior was "fixed"
+in the 3.45.0, resulting in breakage for applications that were
+using it. So it has now been restored and documented.
+<p>
+Other obscure issues that have come up since the 3.45.0 release,
+some related to the release itself and some going back years,
+are also fixed.
+</blockquote><hr width="50%"><a name="2024_01_15"></a><h3>2024-01-15 - <a href="releaselog/3_45_0.html">Version 3.45.0</a></h3><blockquote>
+Version 3.45.0 is an enhancement release of SQLite.
+<p>
+The most impactful change is likely enhancements to
+the <a href="json1.html">JSON SQL functions</a> such that they are now able to
+store their internal JSON parse trees in the database
+as BLOB values. This can significantly increase the
+performance of applications that process large JSON
+strings as it omits the need to translate JSON text
+to and from the internal binary format used by SQLite.
+<p>
+A second noteworthy change is that any
+<a href="appfunc.html">application-defined SQL functions</a> that make use of
+the <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface must now include
+the <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> attribute when the function
+is registered using <a href="c3ref/create_function.html">sqlite3_create_function()</a> or similar.
+Failure to include the SQLITE_RESULT_SUBTYPE attribute on
+functions that use <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> might result
+in incorrect answers.
+<p>
+See the <a href="releaselog/3_45_0.html">change log</a>
+for additional enhancements that are part of the 3.45.0 release.
+</blockquote><hr width="50%"><a name="2023_11_24"></a><h3>2023-11-24 - <a href="releaselog/3_44_2.html">Version 3.44.2</a></h3><blockquote>
+The <a href="cli.html">CLI</a> fix in version 3.44.1 introduced a new bug, which is
+fixed by patch release 3.44.2. Version 3.44.2 also fixes an
+FTS5 problem that was found by a fuzzer just minutes after the
+3.44.1 release.
+</blockquote><hr width="50%"><a name="2023_11_22"></a><h3>2023-11-22 - <a href="releaselog/3_44_1.html">Version 3.44.1</a></h3><blockquote>
+Version 3.44.1 is a patch release that fixes various obscure
+bugs. There is no need to upgrade, unless you are having
+problems with a prior release.
+</blockquote><hr width="50%"><a name="2023_11_01"></a><h3>2023-11-01 - <a href="releaselog/3_44_0.html">Version 3.44.0</a></h3><blockquote>
+Version 3.44.0 is new enhancement release of SQLite.
+<p>
+It has only been 69 days since the previous major
+release (3.43.0). The original plan was for version 3.44.0
+to occur at a spacing of approximately 120 days from the
+prior release. However, the code accumulated so many important
+enhancements that is seemed better to accelerate the release
+of 3.44.0, thus getting those enhancements into circulation.
+This means that some enhancements that where originally
+planned to be in 3.44.0 have been deferred until subsequent
+releases.
+</blockquote><hr width="50%"><a name="2023_10_10"></a><h3>2023-10-10 - <a href="releaselog/3_43_2.html">Version 3.43.2</a></h3><blockquote>
+Version 3.43.2 is a patch release that fixes a few small inaccuracies in
+version 3.43.0 and 3.43.1.
+</blockquote><hr width="50%"><a name="2023_09_11"></a><h3>2023-09-11 - <a href="releaselog/3_43_1.html">Version 3.43.1</a></h3><blockquote>
+Version 3.43.1 is a patch release that fixes a few small inaccuracies that were
+discovered in the the 3.43.0 and/or 3.42.0 releases after the 3.43.0 release was
+published.
+</blockquote><hr width="50%"><a name="2023_08_24"></a><h3>2023-08-24 - <a href="releaselog/3_43_0.html">Version 3.43.0</a></h3><blockquote>
+Version 3.43.0 is a routine enhancement release of SQLite.
+Key enhancements in this release include added support for
+<a href="fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>,
+and performance improvements in <a href="json1.html">JSON processing</a>.
+See the <a href="releaselog/3_43_0.html">change log</a> for
+details.
+</blockquote><hr width="50%"><a name="2023_05_16"></a><h3>2023-05-16 - <a href="releaselog/3_42_0.html">Version 3.42.0</a></h3><blockquote>
+Version 3.42.0 is a routine enhancement release of SQLite.
+Key enhancements in this release are added support for
+<a href="json1.html#json5">JSON5</a> and the <a href="fts5.html#the_secure_delete_configuration_option">FTS5 secure-delete command</a>. See the
+<a href="releaselog/3_42_0.html">change log</a> for a
+summary of all enhancements in this release.
+</blockquote><hr width="50%"><a name="2023_03_22"></a><h3>2023-03-22 - <a href="releaselog/3_41_2.html">Version 3.41.2</a></h3><blockquote>
+Version 3.41.2 is a patch release that fixes multiple
+fuzzer-found problems in prior releases. The worst problems
+include reads (not writes) past the end of a buffer. Upgrading
+is recommended.
+</blockquote><hr width="50%"><a name="2023_03_10"></a><h3>2023-03-10 - <a href="releaselog/3_41_1.html">Version 3.41.1</a></h3><blockquote>
+Version 3.41.1 is a patch release that fixes various obscure
+problems found in 3.41.0 and reported by users. Upgrading
+is optional.
+</blockquote><hr width="50%"><a name="2023_02_21"></a><h3>2023-02-21 - <a href="releaselog/3_41_0.html">Version 3.41.0</a></h3><blockquote>
+Version 3.41.0 is a routine enhancement release.
+</blockquote><hr width="50%"><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 an incorrect
+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>
+
+
diff --git a/www/np1queryprob.html b/www/np1queryprob.html
new file mode 100644
index 0000000..6d88ff3
--- /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=930ff1b898">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/nulinstr.html b/www/nulinstr.html
new file mode 100644
index 0000000..9b201d5
--- /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=b99fab59ed">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..1d980dc
--- /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=fb46653cda">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/oldnews.html b/www/oldnews.html
new file mode 100644
index 0000000..72ab66c
--- /dev/null
+++ b/www/oldnews.html
@@ -0,0 +1,1854 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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="https://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="https://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="https://www.sqlite.org/src/info/98825a79ce145686392d8074032ae54863aa21a3">ticket 98825a79ce145</a>
+ for details.
+ This release adds a
+ <a href="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/7ff3120e4f">https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://link.springer.com/book/10.1007/978-1-4302-3226-1">The Definitive Guide to SQLite</a></i>,
+ a 2nd edition book by Mike Owens and Grant Allen,
+ 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="https://developers.google.com/open-source/osa#2005-google-oreilly-open-source-award-winners">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="releaselog/3_1_0.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="releaselog/3_1_1.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="releaselog/3_1_0.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.<br>
+ Obsolete URL: https://www.sqlite.org/php2004/page-001.html <br>
+ Slides 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.<br>
+ Obsolete URL: https://www.sqlite.org/tclconf2004/page-001.html <br>
+ Slides 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=8f0737bda1">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/omitted.html b/www/omitted.html
new file mode 100644
index 0000000..0ae95b9
--- /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=f9ca306d71">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/onefile.html b/www/onefile.html
new file mode 100644
index 0000000..cbc3e61
--- /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=ff3408d859">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/opcode.html b/www/opcode.html
new file mode 100644
index 0000000..2f4993d
--- /dev/null
+++ b/www/opcode.html
@@ -0,0 +1,2655 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="https://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.45.1 check-in
+<a href='https://www.sqlite.org/src/timeline?c=e876e51a0ed5c'>e876e51a0ed5c</a> dated 2024-01-30.
+
+
+
+
+</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 a 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 string
+<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 189
+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="https://www.sqlite.org/src/artifact/96ac876e57f480bd35ec8d74ed992bca6ae9deebe8b527a3a718e7b4714d6c2e">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.45.1 check-in
+<a href='https://www.sqlite.org/src/timeline?c=e876e51a0ed5c'>e876e51a0ed5c</a> dated 2024-01-30.
+
+<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 cleared is in the main database file if P2==0. If
+P2==1 then the table to be cleared 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 is 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 (0x01) flag of P2 (NB: P2 not P5) is set, then
+the row change count is incremented (otherwise not).</p>
+
+<p>If the OPFLAG_ISNOOP (0x40) flag of P2 (not P5!) is set, then the
+pre-update-hook for deletes is run, but the btree is otherwise unchanged.
+This happens when the <a href="opcode.html#Delete">Delete</a> is to be shortly followed by an <a href="opcode.html#Insert">Insert</a>
+with the same key, causing the btree entry to be overwritten.</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 destroyed 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 the 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="GetSubtype"></a>GetSubtype
+<td>Extract the subtype value from register P1 and write that subtype
+into register P2. If P1 has no subtype, then P1 gets a NULL.</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 constraint 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 work
+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 skip 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>WARNING: This opcode does not reliably distinguish between NULL and REAL
+when P1&gt;=0. If the database contains a NaN value, this opcode will think
+that the datatype is REAL when it should be NULL. When P1&lt;0 and the value
+is already stored in register P3, then this opcode does reliably
+distinguish between NULL and REAL. The problem only arises then P1&gt;=0.</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 deterministic 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>If P2 is zero, that is an assertion that the P1 table is never
+empty and hence the jump will never be taken.</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 constraint. 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 initially 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="SetSubtype"></a>SetSubtype
+<td>Set the subtype value of register P2 to the integer from register P1.
+If P1 is NULL, clear the subtype from p2.</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 used 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.
+Disable Auth and <a href="opcode.html#Trace">Trace</a> callbacks while those statements are running if
+P1 is true.</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="VCheck"></a>VCheck
+<td>P4 is a pointer to a Table object that is a virtual table in schema P1
+that supports the xIntegrity() method. This opcode runs the xIntegrity()
+method for that virtual table, using P3 as the integer argument. If
+an error is reported back, the table name is prepended to the error
+message and that message is stored in P2. If no errors are seen,
+register P2 is set to NULL.</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 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>
+
diff --git a/www/optoverview.html b/www/optoverview.html
new file mode 100644
index 0000000..3dee3f1
--- /dev/null
+++ b/www/optoverview.html
@@ -0,0 +1,1633 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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_outer_join_strength_reduction_optimization">16. The OUTER JOIN Strength Reduction Optimization</a></div>
+<div class="fancy-toc1"><a href="#the_omit_outer_join_optimization">17. The Omit OUTER 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. Even 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 abandoned before it has finished, 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 a 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_outer_join_strength_reduction_optimization"><span>16. </span>The OUTER JOIN Strength Reduction Optimization</h1>
+
+<p>
+ An OUTER JOIN (either a LEFT JOIN, a RIGHT JOIN, or a FULL JOIN)
+ can sometimes be simplified. A LEFT or RIGHT JOIN can be converted
+ into an ordinary (INNER) JOIN, or a FULL JOIN might be converted into
+ either a LEFT or a RIGHT JOIN. This can happen if there are terms
+ in the WHERE clause that guarantee the same result after simplification.
+ For example, 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 theorem prover that determines whether a join can be simplified is
+ imperfect. It sometimes returns a false negative. In other words,
+ it sometimes fails to prove that reducing the strength of an OUTER JOIN
+ is safe when in fact it is safe.
+ For example, the prover does not know
+ the <a href="lang_datefunc.html#dttm">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_outer_join_optimization"><span>17. </span>The Omit OUTER JOIN Optimization</h1>
+
+<p>
+ Sometimes a LEFT or RIGHT 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 OUTER JOIN constrains the join such that it matches
+ only a single row
+ </li><li> The right-hand table of the LEFT JOIN or the left-hand table of
+ a RIGHT JOIN is not be used anywhere
+ in the query outside of its own USING or ON clause.
+ </li></ol>
+
+<p>
+ OUTER JOIN elimination often comes up when OUTER JOINs are used
+ inside of views, and then the view is used in such as way that
+ none of the columns on the right-hand table of the LEFT JOIN or
+ on the left-hand table of a RIGHT 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>
+
+<p>
+ As of this writing, only LEFT JOINs are eliminated. This optimize
+ has not yet been generalized to work with RIGHT JOINs as RIGHT JOIN
+ is a relatively new addition to SQLite. That asymmetry will probably
+ be corrected in a future release.
+
+
+<a name="constprop"></a>
+
+</p><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=be9cc8690c">2024-01-13 19:04:50</a> UTC </small></i></p>
+
diff --git a/www/partialindex.html b/www/partialindex.html
new file mode 100644
index 0000000..5c62461
--- /dev/null
+++ b/www/partialindex.html
@@ -0,0 +1,2794 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='x0e673a8f' onclick='hideorshow("x0e673a8f","x0411d097")'>hide</button></p>
+ <div id='x0411d097' 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='xfe09f3f7' onclick='hideorshow("xfe09f3f7","xd404748b")'>show</button></p>
+ <div id='xd404748b' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x3a1da0cd' onclick='hideorshow("x3a1da0cd","xdf32691d")'>show</button></p>
+ <div id='xdf32691d' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x81bc41cb' onclick='hideorshow("x81bc41cb","xb8f1f387")'>show</button></p>
+ <div id='xb8f1f387' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x7e898534' onclick='hideorshow("x7e898534","x2900a610")'>show</button></p>
+ <div id='x2900a610' 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/literal-value.html">literal-value:</a></b>
+<button id='x781ba2a4' onclick='hideorshow("x781ba2a4","x2e5abe94")'>show</button></p>
+ <div id='x2e5abe94' 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='xd50df63c' onclick='hideorshow("xd50df63c","xced2d847")'>show</button></p>
+ <div id='xced2d847' 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='xf1020491' onclick='hideorshow("xf1020491","xbabf6575")'>show</button></p>
+ <div id='xbabf6575' 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='xc2e9080f' onclick='hideorshow("xc2e9080f","x4f81d2a8")'>show</button></p>
+ <div id='x4f81d2a8' 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='x77ca29b0' onclick='hideorshow("x77ca29b0","x86bce0fe")'>show</button></p>
+ <div id='x86bce0fe' 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='x614bf0e4' onclick='hideorshow("x614bf0e4","x19fe07e3")'>show</button></p>
+ <div id='x19fe07e3' 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='xed020248' onclick='hideorshow("xed020248","x8d186611")'>show</button></p>
+ <div id='x8d186611' 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='x6044a522' onclick='hideorshow("x6044a522","xba1eac29")'>show</button></p>
+ <div id='xba1eac29' 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='x1c466371' onclick='hideorshow("x1c466371","x61037950")'>show</button></p>
+ <div id='x61037950' 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='x3e63c270' onclick='hideorshow("x3e63c270","x9cd71951")'>show</button></p>
+ <div id='x9cd71951' 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='x14e27900' onclick='hideorshow("x14e27900","x0cbe210c")'>show</button></p>
+ <div id='x0cbe210c' 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='xc5f45ea3' onclick='hideorshow("xc5f45ea3","x5b638037")'>show</button></p>
+ <div id='x5b638037' 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='xd5843fee' onclick='hideorshow("xd5843fee","x831507a2")'>show</button></p>
+ <div id='x831507a2' 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='xb502127b' onclick='hideorshow("xb502127b","x42ffd7c5")'>show</button></p>
+ <div id='x42ffd7c5' 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='xac75a194' onclick='hideorshow("xac75a194","xa479813b")'>show</button></p>
+ <div id='xa479813b' 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='x5cb10e73' onclick='hideorshow("x5cb10e73","x7d2e41eb")'>show</button></p>
+ <div id='x7d2e41eb' 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='xee0d67b2' onclick='hideorshow("xee0d67b2","x23e5ea96")'>show</button></p>
+ <div id='x23e5ea96' 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='xc1e3cae5' onclick='hideorshow("xc1e3cae5","x667596d2")'>show</button></p>
+ <div id='x667596d2' 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='x9ed4dfe8' onclick='hideorshow("x9ed4dfe8","xb7592bdd")'>show</button></p>
+ <div id='xb7592bdd' 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=ffe857a745">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/pgszchng2016.html b/www/pgszchng2016.html
new file mode 100644
index 0000000..f5d6d2a
--- /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=174c2a23e2">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/pragma.html b/www/pragma.html
new file mode 100644
index 0000000..8f4545c
--- /dev/null
+++ b/www/pragma.html
@@ -0,0 +1,2282 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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='xd117fae3' onclick='hideorshow("xd117fae3","xa21fab4a")'>hide</button></p>
+ <div id='xa21fab4a' 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='xc2c54c29' onclick='hideorshow("xc2c54c29","xdbeedbf8")'>hide</button></p>
+ <div id='xdbeedbf8' 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='x8e288662' onclick='hideorshow("x8e288662","x58b8c58c")'>show</button></p>
+ <div id='x58b8c58c' 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>
+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'><s>case_sensitive_like&sup1;</s></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="https://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>
+
+ <p><b>WARNING:</b> If a database uses the LIKE operator anywhere in
+ the schema, such as in a <a href="lang_createtable.html#ckconst">CHECK constraint</a> or in an
+ <a href="expridx.html">expression index</a> or in the WHERE clause of a <a href="partialindex.html">partial index</a>, then
+ changing the definition of the LIKE operator using this PRAGMA can
+ cause the database to appear to be corrupt. <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
+ will report errors. The database is not really corrupt in that
+ changing the behavior of LIKE back to the way
+ it was when the schema was defined and the database was populated
+ will clear the problem. If the use of LIKE occurs only in indexes,
+ then the problem can be cleared by running <a href="lang_reindex.html">REINDEX</a>. Nevertheless,
+ the use of the case_sensitive_like pragma is discouraged.</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_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>
+
+ <p><b>Limitation:</b>
+ The secure_delete pragma only causes deleted content to be scrubbed
+ from ordinary tables. If <a href="vtab.html">virtual tables</a> store content in
+ <a href="vtab.html#xshadowname">shadow tables</a>, then deleting content from the virtual table does
+ not necessarily remove forensic traces from the shadow tables.
+ In particular, the <a href="fts3.html">FTS3</a> and <a href="fts5.html">FTS5</a> virtual tables that come
+ bundled with SQLite might leave forensic traces in their shadow tables
+ even if the secure_delete pragma is enabled.
+ </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=402bc96491">2023-12-05 14:43:20</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..f5f8802
--- /dev/null
+++ b/www/printf.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>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 <i>exactly</i> as a decimal
+value, but for many doubles the exact decimal representation requires
+more than 16 or 26 significant digits.
+The SQLite printf() function only renders the first 16 or 26 significant digits
+because that can be done efficient and because 16 decimal digits it is sufficient
+to distinguish every possible double value. Use the <a href="floatingpoint.html#decext">decimal extension</a> to get
+the exact decimal equivalent of double value for the rare cases where that is
+required.
+
+</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>(The zero-padding option)
+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.
+Infinity and NaN (Not-A-Number) floating point values are normally rendered
+as "Inf" and "NaN", respectively, but with the zero-padding option enabled
+they are rendered as "9.0e+999" and "null". In other words, with the zero-padding
+option, floating-point Infinity and NaN are rendered as valid SQL and JSON literals.
+</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>
+<a name="comma"></a>
+
+<td><b>,</b>
+</td><td>The comma option causes comma separators to be added to the output of numeric
+substitutions (%d, %f, and similar) before every 3rd digits to the left of
+the decimal point. No commas are added for digits to the right of the decimal point.
+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=4880d4e1ee">2023-06-29 23:18:37</a> UTC </small></i></p>
+
diff --git a/www/privatebranch.html b/www/privatebranch.html
new file mode 100644
index 0000000..d2a2bf8
--- /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="https://www.sqlite.org/src">https://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 https://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>
+
+
diff --git a/www/profile.html b/www/profile.html
new file mode 100644
index 0000000..25864e2
--- /dev/null
+++ b/www/profile.html
@@ -0,0 +1,450 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Profiling SQL 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>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Profiling SQL Queries
+</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_cases_rows_loops_and_cycles">2. Simple Cases - Rows, Loops and Cycles</a></div>
+<div class="fancy-toc1"><a href="#complex_cases_rows_loops_and_cycles">3. Complex Cases - Rows, Loops and Cycles</a></div>
+<div class="fancy-toc1"><a href="#planner_estimates">4. Planner Estimates</a></div>
+<div class="fancy-toc1"><a href="#low_level_profiling_data">5. Low-Level Profiling Data</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 built-in support for profiling SQL queries, but it is not
+enabled by default. In order to enable support for query profiling, SQLite must
+be compiled with the <a href="compile.html#enable_stmt_scanstatus">following option</a>:
+
+</p><div class="codeblock"><pre>-DSQLITE_ENABLE_STMT_SCANSTATUS
+</pre></div>
+
+<p>Building SQLite with this option enables the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a>
+API, which provides access to the various profiling metrics. The remainder of
+this page discusses the profiling reports generated by the SQLite
+<a href="cli.html">command-line shell</a> using these metrics, rather than the API directly.
+
+</p><p>The profiling reports generated by the shell are very similar to the query
+plan reports generated by the <a href="eqp.html">EXPLAIN QUERY PLAN</a> command. This page assumes
+that the reader is familiar with this format.
+
+</p><p>Within a command-line shell compiled with the option above, query profiling
+is enabled using the ".scanstats on" command:
+
+</p><div class="codeblock"><pre>sqlite> .scanstats on
+</pre></div>
+
+<p>Once enabled, the shell automatically outputs a query profile after each
+SQL query executed. Query profiling can be disabled using ".scanstats off".
+For example:
+
+</p><div class="codeblock"><pre>sqlite> .scanstats on
+sqlite> SELECT a FROM t1, t2 WHERE a IN (1,2,3) AND a=d+e;
+QUERY PLAN (cycles=255831538 &#91;100%&#93;)
+|--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?) (cycles=60048488 &#91;23%&#93; loops=1 rows=3)
+`--SCAN t2 (cycles=133558052 &#91;52%&#93; loops=3 rows=150000)
+</pre></div>
+
+<h1 id="simple_cases_rows_loops_and_cycles"><span>2. </span>Simple Cases - Rows, Loops and Cycles</h1>
+
+<p>Consider a database with the following schema:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE ft USING fts5(text);
+CREATE TABLE t1(a, b);
+CREATE TABLE t2(c INTEGER PRIMARY KEY, d);
+</pre></div>
+
+<p>Then, after first executing ".scanstats on":
+
+</p><div class="codeblock"><pre>sqlite3> SELECT * FROM t1, t2 WHERE t2.c=t1.a;
+&lt;...query results...&gt;
+QUERY PLAN (cycles=1140768 &#91;100%&#93;)
+|--SCAN t1 (cycles=455974 &#91;40%&#93; loops=1 rows=500)
+`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) (cycles=619820 &#91;54%&#93; loops=500 rows=250)
+</pre></div>
+
+<p>The text in the example above following the snipped
+"&lt;...query results...&gt;" is the profile report for the join query just
+executed. The parts of the profile report that are similar to the
+<a href="eqp.html">EXPLAIN QUERY PLAN</a> output indicate that the query is implemented by doing a
+full table-scan of table "t1", with a lookup by INTEGER PRIMARY KEY on table
+"t2" for each row visited.
+
+</p><p>The "loops=1" notation on the "SCAN t1" line indicates that this loop - the
+full-table scan of table "t1" - ran exactly once. "rows=500" indicates that
+that single scan visited 500 rows.
+
+</p><p>The "SEARCH t2 USING ..." line contains the annotation "loops=500" to indicate
+that this "loop" (really a lookup by INTEGER PRIMARY KEY) ran 500 times.
+Which makes sense - it ran once for each row visited by the full-table scan
+of "t1". "rows=250" means that, altogether, those 500 loops visited 250 rows.
+In other words, only half of the INTEGER PRIMARY KEY lookups on table t2 were
+successful, for the other half of the lookups there was no row to find.
+
+</p><p>The loop-count for a SEARCH or SCAN entry is not necessarily the same as the
+number of rows output by the outer loop. For example, if the query above
+were modified as follows:
+
+</p><div class="codeblock"><pre>sqlite3> SELECT * FROM t1, t2 WHERE t1.b&lt;=100 AND t2.c=t1.a;
+&lt;...query results...&gt;
+QUERY PLAN (cycles=561002 &#91;100%&#93;)
+|--SCAN t1 (cycles=345950 &#91;62%&#93; loops=1 rows=500)
+`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) (cycles=128690 &#91;23%&#93; loops=100 rows=50)
+</pre></div>
+
+<p>This time, even though the "SCAN t1" loop still visits 500 rows, the
+"SEARCH t2" lookup is only performed 100 times. This is because SQLite
+was able to discard rows from t1 that did not match the "t1.b&lt;=100"
+constraint.
+
+</p><p>The "cycles" measurements are based on the
+<a href="https://en.wikipedia.org/wiki/Time_Stamp_Counter">CPU time-stamp counter
+</a>, and so are a good proxy for wall-clock time. For the query above, the
+total number of cycles was 561002. For each of the two loops ("SCAN t1..." and
+"SEARCH t2..."), the cycles count represents the time spent in operations that
+can be directly attributed to that loop only. Specifically, this is the time
+spent navigating and extracting data from the database b-trees for that loop.
+These values never quite add up to the total cycles for the query, as there are
+other internal operations performed by SQLite that are not directly
+attributable to either loop.
+
+</p><p>The cycles count for the "SCAN t1" loop was 345950 - 62% of the total for the
+query. The 100 lookups peformed by the "SEARCH t1" loop took 128690 cycles, 23%
+of the total.
+
+</p><p>When a virtual table is used, the "rows" and "loops" metrics have the same
+meaning as for loops on regular SQLite tables. The "cycles" meaurement is the
+total cycles consumed within virtual table methods associated with the loop.
+For example:
+
+</p><div class="codeblock"><pre>sqlite3> SELECT * FROM ft('sqlite'), t2 WHERE t2.c=ft.rowid;
+&lt;...query results...&gt;
+QUERY PLAN (cycles=836434 &#91;100%&#93;
+|--SCAN ft VIRTUAL TABLE INDEX 0:M1 (cycles=739602 &#91;88%&#93; loops=1 rows=48)
+`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) (cycles=62866 &#91;8%&#93; loops=48 rows=25)
+</pre></div>
+
+<p>In this case the single query (loops=1) on fts5 table "ft" returned 48 rows
+(rows=48) and consumed 739602 cycles (cycles=739602), which was roughly 88% of
+the total query time.
+
+</p><h1 id="complex_cases_rows_loops_and_cycles"><span>3. </span>Complex Cases - Rows, Loops and Cycles</h1>
+
+<p>Using the same schema as in the previous section, consider this more
+complicated example:
+
+</p><div class="codeblock"><pre>sqlite3&gt; WITH cnt(i) AS (
+ SELECT 1 UNION SELECT i+1 FROM cnt WHERE i&lt;100
+)
+SELECT
+ *, (SELECT d FROM t2 WHERE c=ft.rowid)
+FROM
+ (SELECT count(*), a FROM t1 GROUP BY a) AS v1 CROSS JOIN
+ ft('sqlite'),
+ cnt
+WHERE cnt.i=ft.rowid AND v1.a=ft.rowid;
+&lt;...query results...&gt;
+QUERY PLAN (cycles=177665334 &#91;100%&#93;)
+|--CO-ROUTINE v1 (cycles=4500444 &#91;3%&#93;)
+| |--SCAN t1 (cycles=397052 &#91;0%&#93; loops=1 rows=500)
+| `--USE TEMP B-TREE FOR GROUP BY
+|--MATERIALIZE cnt (cycles=1275068 &#91;1%&#93;)
+| |--SETUP
+| | `--SCAN CONSTANT ROW
+| `--RECURSIVE STEP
+| `--SCAN cnt (cycles=129166 &#91;0%&#93; loops=100 rows=100)
+|--SCAN v1 (loops=1 rows=500)
+|--SCAN ft VIRTUAL TABLE INDEX 0:M1= (cycles=161874340 &#91;91%&#93; loops=500 rows=271)
+|--SCAN cnt (cycles=7336350 &#91;4%&#93; loops=95 rows=9500)
+`--CORRELATED SCALAR SUBQUERY 3 (cycles=168538 &#91;0%&#93; loops=37)
+ `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) (cycles=94724 &#91;0%&#93; loops=37 rows=21)
+</pre></div>
+
+<p>The most complicated part of the example above is understanding the query
+plan - the portion of the report that would also be generated by an
+<a href="eqp.html">EXPLAIN QUERY PLAN</a> command. Other points of interest are:
+
+</p><ul>
+ <li><p> Sub-query "v1" is implemented as a <a href="optoverview.html#coroutines">co-routine</a>.
+ In this case the sub-query is reported on separately, and a "cycles"
+ count is available for the entire sub-query. There is also a "SCAN v1"
+ line - this represents the invocation of the sub-query co-routine
+ from the main query. This entry has no cycles associated with it, as
+ the entire cost of the sub-query is attributed to the co-routine.
+ It does have "loops" and "rows" values - the sub-query is scanned
+ once and returns 500 rows.
+
+ </p></li><li><p>Recursive sub-query "cnt" is materialized (cached in a temp
+ table) before the main query is run. The entire cost of the materialization
+ is attributed to the "MATERIALIZE cnt" element. There is also a
+ "SCAN cnt" item representing the scans of the materialized sub-query.
+ The cycles value associated with this item represents the time taken
+ to scan the temp-table containing the materialized sub-query, which is
+ separate from the cycles used to populate it.
+
+ </p></li><li><p>There are cycles and loops measurements for the scalar sub-query
+ as well. These represent the total cycles consumed while executing the
+ sub-query and the number of times it was executed, respectively.
+
+ </p></li><li><p>Where one item is a parent of another, as in "CORRELATED SCALAR
+ SUBQUERY 3" and "SEARCH t2 USING...", then the cycles value associated
+ with the parent includes those cycles associated with all child elements.
+ In all cases, the percentage values relate to the total cycles used by
+ the query, not the cycles used by the parent.
+</p></li></ul>
+
+<p>The following query uses an <a href="optoverview.html#autoindex">automatic index</a> and
+an external sort:
+
+</p><div class="codeblock"><pre>sqlite> SELECT * FROM
+ t2,
+ (SELECT count(*) AS cnt, d FROM t2 GROUP BY d) AS v2
+WHERE v2.d=t2.d AND t2.d>100
+ORDER BY v2.cnt;
+&lt;...query results...&gt;
+QUERY PLAN (cycles=6234376 &#91;100%&#93;)
+|--MATERIALIZE v2 (cycles=2351916 &#91;38%&#93;)
+| |--SCAN t2 (cycles=188428 &#91;3%&#93; loops=1 rows=250)
+| `--USE TEMP B-TREE FOR GROUP BY
+|--SCAN t2 (cycles=455736 &#91;7%&#93; loops=1 rows=250)
+|--CREATE AUTOMATIC INDEX ON v2(d, cnt) (cycles=1668380 &#91;27%&#93; loops=1 rows=250)
+|--SEARCH v2 USING AUTOMATIC COVERING INDEX (d=?) (cycles=932824 &#91;15%&#93; loops=200 rows=200)
+`--USE TEMP B-TREE FOR ORDER BY (cycles=662456 &#91;11%&#93; loops=1 rows=200)
+</pre></div>
+
+<p>Points of interest are:
+
+</p><ul>
+ <li><p> This query materializes the sub-query into a temp table, then creates
+ an automatic (i.e. transient) index on it, then uses that index to optimize
+ the join. All three of these steps - "MATERIALIZE v2", "CREATE AUTOMATIC
+ INDEX" and "SEARCH ... USING AUTOMATIC INDEX" have separate cycle counts.
+ The "rows" associated with the "CREATE AUTOMATIC INDEX" line represents the
+ total number of rows included in the index. The "loops" and "rows" associated
+ with the "SEARCH ... USING AUTOMATIC INDEX" line represent the number of
+ lookups the index was used for and the total number of rows found by those
+ lookups.
+
+ </p></li><li><p> The external sort "USE TEMP B-TREE FOR ORDER BY" is also accounted
+ for separately. The cycles count represents the extra cycles consumed by
+ sorting the returned rows, above those that would have been used if the rows
+ were returned in arbitrary order. The rows count represents the number of
+ rows sorted.
+</p></li></ul>
+
+<h1 id="planner_estimates"><span>4. </span>Planner Estimates</h1>
+
+<p>As well as ".scanstats on" to enable profiling and ".scanstats off" to
+disable it, the shell also accepts ".scanstats est":
+
+</p><div class="codeblock"><pre>sqlite> .scanstats est
+</pre></div>
+
+<p>This enables a special kind of profiling report that includes two extra
+values associated with each "SCAN..." and "SEARCH..." element of a query
+profile:
+
+</p><ul>
+ <li> <b>rpl</b> (rows per loop): This is the value of the "rows" metric
+ divided by that of the "loops" metric.
+ </li><li> <b>est</b> (estimate): This is the number of rows per loop that the
+ query planner estimated would be returned by the current query
+ element. If this value is radically different from the actual
+ rows per loop value and query performance is unsatisfactory,
+ the quality of this estimate may be improved by running ANALYZE.
+</li></ul>
+
+<div class="codeblock"><pre>sqlite> SELECT a FROM t1, t2 WHERE a IN (1,2,3) AND a=d+e ORDER BY a;
+&lt;query results...&gt;
+QUERY PLAN (cycles=264725190 &#91;100%&#93;
+|--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?) (cycles=60511568 &#91;23%&#93; loops=1 rows=3 rpl=3.0 est=3.0)
+`--SCAN t2 (cycles=139461608 &#91;53%&#93; loops=3 rows=150000 rpl=50000.0 est=1048576.0)
+</pre></div>
+
+<h1 id="low_level_profiling_data"><span>5. </span>Low-Level Profiling Data</h1>
+
+
+
+<p> Also supported is the ".scanstats vm" command. This enables a lower-level
+profiling report showing the number of times each VM instruction was executed
+and the percentage of clock-cycles that passed while it was executing:
+
+</p><div class="codeblock"><pre>sqlite> .scanstats vm
+</pre></div>
+
+<p>Then:
+
+</p><div class="codeblock"><pre>sqlite> SELECT count(*) FROM t2 WHERE (d % 5) = 0;
+&lt;query results...&gt;
+addr cycles nexec opcode p1 p2 p3 p4 p5 comment
+---- ------ ------ ------------- ---- ---- ---- ------------- -- -------------
+0 0.0% 1 Init 1 18 0 0 Start at 18
+1 0.0% 1 Null 0 1 1 0 r&#91;1..1]=NULL
+2 0.0% 1 OpenRead 0 2 0 2 0 root=2 iDb=0; t2
+3 0.0% 1 ColumnsUsed 0 0 0 2 0
+4 0.0% 1 Explain 4 0 0 SCAN t2 0
+5 0.0% 1 CursorHint 0 0 0 EQ(REM(c1,5),0) 0
+6 0.0% 1 Rewind 0 14 0 0
+7 46.86% 150000 Column 0 1 3 0 r&#91;3]= cursor 0 column 1
+8 18.94% 150000 Remainder 4 3 2 0 r&#91;2]=r&#91;3]%r&#91;4]
+9 5.41% 150000 ReleaseReg 3 1 0 0 release r&#91;3] mask 0
+10 12.09% 150000 Ne 5 13 2 80 if r&#91;2]!=r&#91;5] goto 13
+11 1.02% 30000 ReleaseReg 2 1 0 0 release r&#91;2] mask 0
+12 2.95% 30000 AggStep1 0 0 1 count(0) 0 accum=r&#91;1] step(r&#91;0])
+13 12.72% 150000 Next 0 7 0 1
+14 0.0% 1 AggFinal 1 0 0 count(0) 0 accum=r&#91;1] N=0
+15 0.0% 1 Copy 1 6 0 0 r&#91;6]=r&#91;1]
+16 0.0% 1 ResultRow 6 1 0 0 output=r&#91;6]
+17 0.01% 1 Halt 0 0 0 0
+18 0.0% 1 Transaction 0 0 1 0 1 usesStmtJournal=0
+19 0.0% 1 Integer 5 4 0 0 r&#91;4]=5
+20 0.0% 1 Integer 0 5 0 0 r&#91;5]=0
+21 0.0% 1 Goto 0 1 0 0
+</pre></div>
+
+
+
+
+
+
+
diff --git a/www/prosupport.html b/www/prosupport.html
new file mode 100644
index 0000000..3e47ffb
--- /dev/null
+++ b/www/prosupport.html
@@ -0,0 +1,461 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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) source code.</b>
+ A drop-in replacement for public-domain SQLite C 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>SQLite Encryption Extension (SEE) for System.Data.SQLite.</b>
+ A license certificate file for use with the public System.Data.SQLite
+ NuGet packages that permits use of the SQLite Encryption Extension.
+</td>
+<td valign=top width=165>$2500/year</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/see/doc/release/www/sds-nuget.wiki'>More Info</a><br>
+<a class='button' href='https://sqlite.org/purchase/sds'>Purchase</a></td>
+</tr>
+<tr><td valign=top><b>8.</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>9.</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) source code.</b>
+ A drop-in replacement for public-domain SQLite C 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>SQLite Encryption Extension (SEE) for System.Data.SQLite.</b>
+ A license certificate file for use with the public System.Data.SQLite
+ NuGet packages that permits use of the SQLite Encryption Extension.
+
+<p>Cost: $2500/year
+<p><a class='button' href='https://sqlite.org/see/doc/release/www/sds-nuget.wiki'>More Info</a>
+<a class='button' href='https://sqlite.org/purchase/sds'>Purchase</a>
+</li>
+<li value=8><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=9><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>10.</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=10><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="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>
+
+
diff --git a/www/psow.html b/www/psow.html
new file mode 100644
index 0000000..8062135
--- /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=7c9c05107b">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/qmplan.html b/www/qmplan.html
new file mode 100644
index 0000000..9c03c7b
--- /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=601675a989">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/queryplanner-ng.html b/www/queryplanner-ng.html
new file mode 100644
index 0000000..b9d7593
--- /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="https://www.sqlite.org/src/timeline?nd&n=200&r=trunk">https://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>
+
+
diff --git a/www/queryplanner.html b/www/queryplanner.html
new file mode 100644
index 0000000..84dbbc0
--- /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=baee8e6b0d">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..4d7d337
--- /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=314fee0021">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/quirks.html b/www/quirks.html
new file mode 100644
index 0000000..a52745b
--- /dev/null
+++ b/www/quirks.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>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 class="fancy-toc1"><a href="#sqlite_distinguishes_between_integer_and_text_literals">13. SQLite Distinguishes Between Integer And Text Literals</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="https://icu.unicode.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><p>
+As of SQLite 3.41.0 (2023-02-21) SQLITE_DBCONFIG_DQS_DDL and
+SQLTIE_DBCONFIG_DQS_DML are disabled by default in the <a href="cli.html">CLI</a>. Use
+the ".dbconfig" dot-command to reenable the legacy behavior if
+desired.
+
+</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><h1 id="sqlite_distinguishes_between_integer_and_text_literals"><span>13. </span>SQLite Distinguishes Between Integer And Text Literals</h1>
+
+<p>SQLite says that the following query returns false:
+</p><div class="codeblock"><pre>SELECT 1='1';
+</pre></div>
+<p>It does this because an integer is not a string.
+Every other major SQL database engine says this is true, for reasons
+that the creator of SQLite does not understand.
+</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=52efdab3cb">2023-04-16 12:53:27</a> UTC </small></i></p>
+
diff --git a/www/rbu.html b/www/rbu.html
new file mode 100644
index 0000000..4ba42d7
--- /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=0f520f8581">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/recovery.html b/www/recovery.html
new file mode 100644
index 0000000..51e7885
--- /dev/null
+++ b/www/recovery.html
@@ -0,0 +1,391 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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><p>
+Additionally, the application, or more specifically the sqlite3.c linked
+into the application, must be compiled with the following option:
+</p><pre>
+ -DSQLITE_ENABLE_DBPAGE_VTAB
+</pre>
+
+<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=846399393d">2023-02-28 11:22:37</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..01db454
--- /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="https://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..a9f079e
--- /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="https://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..b823e98
--- /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="https://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..e9d7de6
--- /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="https://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..a5b9083
--- /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="https://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..e174289
--- /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="https://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..0044cc8
--- /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="https://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..2288603
--- /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="https://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..9fe2f26
--- /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="https://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..fdefcfd
--- /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="https://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..08bbce1
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..28e673a
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..2b911a9
--- /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="https://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..f14d1eb
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..df8f435
--- /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="https://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..8b74f15
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..8a1768a
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..5490946
--- /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="https://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..a07f2ac
--- /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="https://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..2b2c2cd
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..f2f6160
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..4ae78b3
--- /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="https://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..e3cef83
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..453e005
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..45658a0
--- /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="https://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..ede565f
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..53243b7
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..d5648c7
--- /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="https://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..1b6cf39
--- /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="https://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..4c795c4
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..6d4bda3
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..e1ac6ab
--- /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="https://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..40f4e1c
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..a5591f3
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..a2ab218
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..fd2d23f
--- /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="https://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..2c895c6
--- /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="https://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..2853026
--- /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="https://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..a520540
--- /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="https://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..8eda0ec
--- /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="https://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..b2a897e
--- /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="https://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..5bf9ab2
--- /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="https://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..0e85f35
--- /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="https://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..966b416
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..bcb8548
--- /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="https://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..efd2e32
--- /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="https://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..6cf8a3e
--- /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="https://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..965a159
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..b5b7a22
--- /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="https://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..859dc27
--- /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="https://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..e1fbe4d
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..6e90115
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..f94eb16
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..f11e81e
--- /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_fknoaction.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="https://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..9f71c78
--- /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="https://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..ac144a4
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..fded173
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..3e65a56
--- /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="https://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..a409334
--- /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="https://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..0f00d53
--- /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="https://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..9fb5947
--- /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="https://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..b3f0ca9
--- /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="https://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..3ac1c8c
--- /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="https://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..219d02e
--- /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="https://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..0ce0d97
--- /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="https://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..be28108
--- /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="https://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..ea97bee
--- /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="https://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..b6ec7ed
--- /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="https://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..2777e90
--- /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="https://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..f2bb52e
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..bcef221
--- /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="https://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..244ec31
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..6cb884b
--- /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="https://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..1eae856
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..a9b826c
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..4f5c3f8
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..73efcb3
--- /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="https://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..9e6a61c
--- /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="https://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..0208b81
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..5594d83
--- /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="https://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..3445e4f
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..4ebab73
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="https://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="https://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..0b34548
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="https://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>Changes in this specific patch release, 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="https://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..033fd59
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="https://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>Prior changes from 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>Changes in this specific patch release, 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="https://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..84285e4
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="https://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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..422d4e1
--- /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="https://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..77c0fef
--- /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="https://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..7d6744b
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..a85484e
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..e333ba1
--- /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="https://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..fafda78
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..fc5e2ca
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..7154c64
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..da7bea1
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..a991e23
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..60974d7
--- /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="https://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..588486b
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..c0ccc4e
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..366c5ab
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..5a1e887
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..fd772ce
--- /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="https://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..d746da5
--- /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="https://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..9d1d838
--- /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="https://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..47674b1
--- /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="https://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..98c9019
--- /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="https://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..dc2a483
--- /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_corefunc.html#randomblob">randomblob()</a> and
+<a href="../lang_corefunc.html#hex">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="https://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..0a79dbc
--- /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="https://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..5ef3c51
--- /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="https://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..5dd701c
--- /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="https://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..9e49c92
--- /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="https://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..eea730c
--- /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="https://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..942a0e5
--- /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="https://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..6699dd4
--- /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="https://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..e0b287b
--- /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="https://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..dc6030f
--- /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="https://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..5a43d10
--- /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="https://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..2a838d3
--- /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="https://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..1dc6f90
--- /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="https://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..a529bf3
--- /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_encoding.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="https://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..8eb50fe
--- /dev/null
+++ b/www/releaselog/3_40_1.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.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>Prior changes from 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_encoding.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>Changes in this specific patch release, 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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_41_0.html b/www/releaselog/3_41_0.html
new file mode 100644
index 0000000..b2474bc
--- /dev/null
+++ b/www/releaselog/3_41_0.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 Release 3.41.0 On 2023-02-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.41.0 On 2023-02-21</h2><p><ol class='lessindent'>
+<li>Query planner improvements:
+ <ol type="a">
+ <li> Make use of <a href="../expridx.html">indexed expressions</a> within an aggregate query that
+ includes a GROUP BY clause.
+ <li> The query planner has improved awareness of when an index is
+ a <a href="../queryplanner.html#covidx">covering index</a> and adjusts predicted runtimes accordingly.
+ <li> The query planner is more aggressive about using <a href="../optoverview.html#coroutines">co-routines</a> rather
+ than materializing subqueries and views.
+ <li> Queries against the built-in table-valued functions <a href="../json1.html#jtree">json_tree()</a> and
+ <a href="../json1.html#jeach">json_each()</a> will now usually treat "ORDER BY rowid" as a no-op.
+ <li> Enhance the ability of the query planner to use <a href="../expridx.html">indexed expressions</a>
+ even if the expression has been modified by the
+ <a href="../optoverview.html#constprop">constant-propagation optimization</a>.
+ (See <a href="https://sqlite.org/forum/forumpost/0a539c76db3b9e29">forum thread 0a539c7</a>.)
+ </ol>
+<li>Add the built-in <a href="../lang_corefunc.html#unhex">unhex()</a> SQL function.
+<li>Add the base64 and base85 application-defined functions as an extension and
+ include that extension in the <a href="../cli.html">CLI</a>.
+<li>Add the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interface. (This interface is only
+ available if SQLite is compiled using <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.)
+<li>In-memory databases created using <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> now report their
+ filename as an empty string, not as 'x'.
+<li>Changes to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add the new base64() and base85() SQL functions
+ <li> Enhanced <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output using the new <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a>
+ interface when compiled using <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+ <li> The "<tt>.scanstats est</tt>" command provides query planner estimates in profiles.
+ <li> The continuation prompt indicates if the input is currently inside of a
+ string literal, identifier literal, comment, trigger definition, etc.
+ <li> Enhance the --safe command-line option to disallow dangerous SQL functions.
+ <li> The <a href="../quirks.html#dblquote">double-quoted string misfeature</a> is now disabled by default for CLI
+ builds. Legacy use cases can reenable the misfeature at run-time using
+ the "<tt>.dbconfig dqs_dml on</tt>" and "<tt>.dbconfig dqs_ddl on</tt>"
+ commands.
+ </ol>
+<li>Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it detects when text strings in
+ a table are equivalent to but not byte-for-byte identical to the same strings in the index.
+<li>Enhance the <a href="../carray.html">carray table-valued function</a> so that it is able to bind an array of
+ BLOB objects.
+<li>Added the <a href="../c3ref/interrupt.html">sqlite3_is_interrupted()</a> interface.
+<li>Long-running calls to <a href="../c3ref/prepare.html">sqlite3_prepare()</a> and similar now invoke the
+ <a href="../c3ref/progress_handler.html">progress handler callback</a> and react to <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>The <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> functions are enhanced so that
+ they reliably detect if they are invoked on a parameter that was not selected for
+ multi-value IN processing using <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a>.
+ They return SQLITE_ERROR instead of SQLITE_MISUSE in this case.
+<li>The parser now ignores excess parentheses around a subquery on the right-hand side
+ of an IN operator, so that SQLite now works the same as PostgreSQL in this regard.
+ Formerly, SQLite treated the subquery as an expression with an implied "LIMIT 1".
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> option to the <a href="../c3ref/file_control.html">sqlite3_file_control()</a> API.
+<li>Makefile improvements:
+ <ol type="a">
+ <li>The new makefile target "sqlite3r.c" builds an <a href="../amalgamation.html">amalgamation</a> that includes
+ the <a href="../recovery.html">recovery extension</a>.
+ <li>New makefile targets "devtest" and "releasetest" for running a
+ quick developmental test prior to doing a check-in and for doing a full
+ release test, respectively.
+ </ol>
+<li>Miscellaneous performance enhancements.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-02-21 18:09:37 05941c2a04037fc3ed2ffae11f5d2260706f89431f463518740f72ada350866d
+<li>SHA3-256 for sqlite3.c: 02bd9e678460946810801565667fdb8f0c29c78e51240512d2e5bb3dbdee7464
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_41_1.html b/www/releaselog/3_41_1.html
new file mode 100644
index 0000000..1ca87de
--- /dev/null
+++ b/www/releaselog/3_41_1.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.41.1 On 2023-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.41.1 On 2023-03-10</h2><p><b>Prior changes from version 3.41.0 (2023-02-21):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Query planner improvements:
+ <ol type="a">
+ <li> Make use of <a href="../expridx.html">indexed expressions</a> within an aggregate query that
+ includes a GROUP BY clause.
+ <li> The query planner has improved awareness of when an index is
+ a <a href="../queryplanner.html#covidx">covering index</a> and adjusts predicted runtimes accordingly.
+ <li> The query planner is more aggressive about using <a href="../optoverview.html#coroutines">co-routines</a> rather
+ than materializing subqueries and views.
+ <li> Queries against the built-in table-valued functions <a href="../json1.html#jtree">json_tree()</a> and
+ <a href="../json1.html#jeach">json_each()</a> will now usually treat "ORDER BY rowid" as a no-op.
+ <li> Enhance the ability of the query planner to use <a href="../expridx.html">indexed expressions</a>
+ even if the expression has been modified by the
+ <a href="../optoverview.html#constprop">constant-propagation optimization</a>.
+ (See <a href="https://sqlite.org/forum/forumpost/0a539c76db3b9e29">forum thread 0a539c7</a>.)
+ </ol>
+<li>Add the built-in <a href="../lang_corefunc.html#unhex">unhex()</a> SQL function.
+<li>Add the base64 and base85 application-defined functions as an extension and
+ include that extension in the <a href="../cli.html">CLI</a>.
+<li>Add the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interface. (This interface is only
+ available if SQLite is compiled using <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.)
+<li>In-memory databases created using <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> now report their
+ filename as an empty string, not as 'x'.
+<li>Changes to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add the new base64() and base85() SQL functions
+ <li> Enhanced <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output using the new <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a>
+ interface when compiled using <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+ <li> The "<tt>.scanstats est</tt>" command provides query planner estimates in profiles.
+ <li> The continuation prompt indicates if the input is currently inside of a
+ string literal, identifier literal, comment, trigger definition, etc.
+ <li> Enhance the --safe command-line option to disallow dangerous SQL functions.
+ <li> The <a href="../quirks.html#dblquote">double-quoted string misfeature</a> is now disabled by default for CLI
+ builds. Legacy use cases can reenable the misfeature at run-time using
+ the "<tt>.dbconfig dqs_dml on</tt>" and "<tt>.dbconfig dqs_ddl on</tt>"
+ commands.
+ </ol>
+<li>Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it detects when text strings in
+ a table are equivalent to but not byte-for-byte identical to the same strings in the index.
+<li>Enhance the <a href="../carray.html">carray table-valued function</a> so that it is able to bind an array of
+ BLOB objects.
+<li>Added the <a href="../c3ref/interrupt.html">sqlite3_is_interrupted()</a> interface.
+<li>Long-running calls to <a href="../c3ref/prepare.html">sqlite3_prepare()</a> and similar now invoke the
+ <a href="../c3ref/progress_handler.html">progress handler callback</a> and react to <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>The <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> functions are enhanced so that
+ they reliably detect if they are invoked on a parameter that was not selected for
+ multi-value IN processing using <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a>.
+ They return SQLITE_ERROR instead of SQLITE_MISUSE in this case.
+<li>The parser now ignores excess parentheses around a subquery on the right-hand side
+ of an IN operator, so that SQLite now works the same as PostgreSQL in this regard.
+ Formerly, SQLite treated the subquery as an expression with an implied "LIMIT 1".
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> option to the <a href="../c3ref/file_control.html">sqlite3_file_control()</a> API.
+<li>Makefile improvements:
+ <ol type="a">
+ <li>The new makefile target "sqlite3r.c" builds an <a href="../amalgamation.html">amalgamation</a> that includes
+ the <a href="../recovery.html">recovery extension</a>.
+ <li>New makefile targets "devtest" and "releasetest" for running a
+ quick developmental test prior to doing a check-in and for doing a full
+ release test, respectively.
+ </ol>
+<li>Miscellaneous performance enhancements.
+</ol>
+<p><b>Changes in this specific patch release, version 3.41.1 (2023-03-10):</b></p>
+<p><ol class='lessindent'>
+<li value='16'> Provide compile-time options -DHAVE_LOG2=0 and -DHAVE_LOG10=0 to enable SQLite to be
+ compiled on systems that omit the standard library functions log2() and log10(), repectively.
+<li> Ensure that the datatype for column t1.x in
+ "<tt>CREATE TABLE t1 AS SELECT CAST(7 AS INT) AS x;</tt>" continues to be INT and is not NUM,
+ for historical compatibility.
+<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to detect when extra bytes appear at the end of an
+ index record.
+<li> Fix various obscure bugs reported by the user community. See the
+ <a href="https://sqlite.org/src/timeline?from=version-3.41.0&to=version-3.41.1">timeline of changes</a>
+ for details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-03-10 12:13:52 20399f3eda5ec249d147ba9e48da6e87f969d7966a9a896764ca437ff7e737ff
+<li>SHA3-256 for sqlite3.c: d0d9db8425570f4a57def04fb8f4ac84f5c3e4e71d3d4d10472e3639c5fdf09f
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_41_2.html b/www/releaselog/3_41_2.html
new file mode 100644
index 0000000..3e18192
--- /dev/null
+++ b/www/releaselog/3_41_2.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>SQLite Release 3.41.2 On 2023-03-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.41.2 On 2023-03-22</h2><p><b>Prior changes from version 3.41.0 (2023-02-21):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Query planner improvements:
+ <ol type="a">
+ <li> Make use of <a href="../expridx.html">indexed expressions</a> within an aggregate query that
+ includes a GROUP BY clause.
+ <li> The query planner has improved awareness of when an index is
+ a <a href="../queryplanner.html#covidx">covering index</a> and adjusts predicted runtimes accordingly.
+ <li> The query planner is more aggressive about using <a href="../optoverview.html#coroutines">co-routines</a> rather
+ than materializing subqueries and views.
+ <li> Queries against the built-in table-valued functions <a href="../json1.html#jtree">json_tree()</a> and
+ <a href="../json1.html#jeach">json_each()</a> will now usually treat "ORDER BY rowid" as a no-op.
+ <li> Enhance the ability of the query planner to use <a href="../expridx.html">indexed expressions</a>
+ even if the expression has been modified by the
+ <a href="../optoverview.html#constprop">constant-propagation optimization</a>.
+ (See <a href="https://sqlite.org/forum/forumpost/0a539c76db3b9e29">forum thread 0a539c7</a>.)
+ </ol>
+<li>Add the built-in <a href="../lang_corefunc.html#unhex">unhex()</a> SQL function.
+<li>Add the base64 and base85 application-defined functions as an extension and
+ include that extension in the <a href="../cli.html">CLI</a>.
+<li>Add the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interface. (This interface is only
+ available if SQLite is compiled using <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.)
+<li>In-memory databases created using <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> now report their
+ filename as an empty string, not as 'x'.
+<li>Changes to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add the new base64() and base85() SQL functions
+ <li> Enhanced <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output using the new <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a>
+ interface when compiled using <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+ <li> The "<tt>.scanstats est</tt>" command provides query planner estimates in profiles.
+ <li> The continuation prompt indicates if the input is currently inside of a
+ string literal, identifier literal, comment, trigger definition, etc.
+ <li> Enhance the --safe command-line option to disallow dangerous SQL functions.
+ <li> The <a href="../quirks.html#dblquote">double-quoted string misfeature</a> is now disabled by default for CLI
+ builds. Legacy use cases can reenable the misfeature at run-time using
+ the "<tt>.dbconfig dqs_dml on</tt>" and "<tt>.dbconfig dqs_ddl on</tt>"
+ commands.
+ </ol>
+<li>Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it detects when text strings in
+ a table are equivalent to but not byte-for-byte identical to the same strings in the index.
+<li>Enhance the <a href="../carray.html">carray table-valued function</a> so that it is able to bind an array of
+ BLOB objects.
+<li>Added the <a href="../c3ref/interrupt.html">sqlite3_is_interrupted()</a> interface.
+<li>Long-running calls to <a href="../c3ref/prepare.html">sqlite3_prepare()</a> and similar now invoke the
+ <a href="../c3ref/progress_handler.html">progress handler callback</a> and react to <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>The <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> functions are enhanced so that
+ they reliably detect if they are invoked on a parameter that was not selected for
+ multi-value IN processing using <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a>.
+ They return SQLITE_ERROR instead of SQLITE_MISUSE in this case.
+<li>The parser now ignores excess parentheses around a subquery on the right-hand side
+ of an IN operator, so that SQLite now works the same as PostgreSQL in this regard.
+ Formerly, SQLite treated the subquery as an expression with an implied "LIMIT 1".
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> option to the <a href="../c3ref/file_control.html">sqlite3_file_control()</a> API.
+<li>Makefile improvements:
+ <ol type="a">
+ <li>The new makefile target "sqlite3r.c" builds an <a href="../amalgamation.html">amalgamation</a> that includes
+ the <a href="../recovery.html">recovery extension</a>.
+ <li>New makefile targets "devtest" and "releasetest" for running a
+ quick developmental test prior to doing a check-in and for doing a full
+ release test, respectively.
+ </ol>
+<li>Miscellaneous performance enhancements.
+</ol>
+<p><b>Prior changes from version 3.41.1 (2023-03-10):</b></p>
+<p><ol class='lessindent'>
+<li value='16'> Provide compile-time options -DHAVE_LOG2=0 and -DHAVE_LOG10=0 to enable SQLite to be
+ compiled on systems that omit the standard library functions log2() and log10(), repectively.
+<li> Ensure that the datatype for column t1.x in
+ "<tt>CREATE TABLE t1 AS SELECT CAST(7 AS INT) AS x;</tt>" continues to be INT and is not NUM,
+ for historical compatibility.
+<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to detect when extra bytes appear at the end of an
+ index record.
+<li> Fix various obscure bugs reported by the user community. See the
+ <a href="https://sqlite.org/src/timeline?from=version-3.41.0&to=version-3.41.1">timeline of changes</a>
+ for details.
+
+</ol>
+<p><b>Changes in this specific patch release, version 3.41.2 (2023-03-22):</b></p>
+<p><ol class='lessindent'>
+<li value='20'> Multiple fixes for reads past the end of memory buffers
+ (NB: <i>reads</i> not <i>writes</i>) in the following circumstances:
+ <ol type="a">
+ <li> When processing a corrupt database file using the non-standard
+ <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option.
+ <li> In the <a href="../cli.html">CLI</a> when the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> routine returns an out-of-range value
+ (see also the fix to sqlite3_error_offset() below).
+ <li> In the <a href="../recovery.html">recovery extension</a>.
+ <li> In <a href="../fts3.html">FTS3</a> when processing a corrupt database file.
+ </ol>
+<li> Fix the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> so that it does not return out-of-range values when
+ reporting errors associated with <a href="../gencol.html">generated columns</a>.
+<li> Multiple fixes in the query optimizer for problems that cause incorrect
+ results for bizarre, fuzzer-generated queries.
+<li> Increase the size of the reference counter in the page cache object to 64 bits to
+ ensure that the counter never overflows.
+<li> Fix a performance regression caused by a bug fix in patch release 3.41.1.
+<li> Fix a few incorrect assert() statements.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da
+<li>SHA3-256 for sqlite3.c: c83f68b7aac1e7d3ed0fcdb9857742f024449e1300bfb3375131a6180b36cf7c
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_42_0.html b/www/releaselog/3_42_0.html
new file mode 100644
index 0000000..e5f5543
--- /dev/null
+++ b/www/releaselog/3_42_0.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.42.0 On 2023-05-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.42.0 On 2023-05-16</h2><p><ol class='lessindent'>
+<li> Add the <a href="../fts5.html#the_secure_delete_configuration_option">FTS5 secure-delete command</a>. This option causes all forensic traces
+ to be removed from the FTS5 inverted index when content is deleted.
+<li> Enhance the <a href="../json1.html">JSON SQL functions</a> to support <a href="../json1.html#json5">JSON5 extensions</a>.
+<li> The <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> calls to <a href="../c3ref/config.html">sqlite3_config()</a>
+ are now allowed to occur <i>after</i> <a href="../c3ref/initialize.html">sqlite3_initialize()</a>.
+<li> New <a href="../c3ref/db_config.html">sqlite3_db_config()</a> options: <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">SQLITE_DBCONFIG_STMT_SCANSTATUS</a> and
+ <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder">SQLITE_DBCONFIG_REVERSE_SCANORDER</a>.
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Enable the "count-of-view" optimization by default.
+ <li> Avoid computing unused columns in subqueries.
+ <li> Improvements to the <a href="../optoverview.html#pushdown">push-down optimization</a>.
+ </ol>
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add the --unsafe-testing command-line option. Without this option, some
+ dot-commands (ex: ".testctrl") are now disabled because those commands
+ that are intended for testing only and can cause malfunctions if misused.
+ <li> Allow commands ".log on" and ".log off", even in --safe mode.
+ <li> "--" as a command-line argument means all subsequent arguments that
+ start with "-" are interpreted as normal non-option argument.
+ <li> Magic parameters ":inf" and ":nan" bind to floating point literals
+ Infinity and NaN, respectively.
+ <li> The --utf8 command-line option omits all translation to or from
+ MBCS on the Windows console for interactive sessions, and sets
+ the console code page for UTF-8 I/O during such sessions.
+ The --utf8 option is a no-op on all other platforms.
+ </ol>
+<li> Add the ability for <a href="../appfunc.html">application-defined SQL functions</a> to have the same name
+ as join keywords: CROSS, FULL, INNER, LEFT, NATURAL, OUTER, or RIGHT.
+<li> Enhancements to <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>:
+ <ol type="a">
+ <li> Detect and raise an error when a NaN value is stored in a NOT NULL column.
+ <li> Improved error message output identifies the root page of a b-tree when
+ an error is found within a b-tree.
+ </ol>
+<li> Allow the <a href="../sessionintro.html">session extension</a> to be configured to capture changes from
+ tables that lack an explicit ROWID.
+<li> Added the <a href="../lang_datefunc.html#subsec">subsecond modifier</a> to the <a href="../lang_datefunc.html">date and time functions</a>.
+<li> Negative values passed into <a href="../c3ref/sleep.html">sqlite3_sleep()</a> are henceforth interpreted as 0.
+<li> The maximum recursion depth for JSON arrays and objects is lowered from 2000
+ to 1000.
+<li> Extended the <a href="../printf.html">built-in printf()</a> function so the <a href="../printf.html#comma">comma option</a> now works with
+ floating-point conversions in addition to integer conversions.
+<li> Miscellaneous bug fixes and performance optimizations
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
+<li>SHA3-256 for sqlite3.c: 6aa3fadf000000625353bbaa1e83af114c40c240a0aa5a2c1c2aabcfc28d4f92
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_43_0.html b/www/releaselog/3_43_0.html
new file mode 100644
index 0000000..16283c0
--- /dev/null
+++ b/www/releaselog/3_43_0.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.43.0 On 2023-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.43.0 On 2023-08-24</h2><p><ol class='lessindent'>
+<li> Add support for <a href="../fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>. This is a variety
+ of <a href="../fts5.html">FTS5</a> full-text search index that omits storing the content that is being indexed
+ while also allowing records to be deleted.
+<li> Enhancements to the <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added new <a href="../lang_datefunc.html#tmshf">time shift modifiers</a> of the form <tt>&plusmn;YYYY-MM-DD HH:MM:SS.SSS</tt>.
+ <li> Added the <a href="../lang_datefunc.html#tmdif">timediff() SQL function</a>.
+ </ol>
+<li> Added the <a href="../lang_corefunc.html#octet_length">octet_length(X)</a> SQL function.
+<li> Added the <a href="../c3ref/stmt_explain.html">sqlite3_stmt_explain()</a> API.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Generalize the LEFT JOIN strength reduction optimization so that it works
+ for RIGHT and FULL JOINs as well. Rename it to
+ <a href="../optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a>.
+ <li> Enhance the theorem prover in the <a href="../optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> optimization
+ so that it returns fewer false-negatives.
+ </ol>
+<li> Enhancements to the <a href="../floatingpoint.html#decext">decimal extension</a>:
+ <ol type="a">
+ <li> New function decimal_pow2(N) returns the N-th power of 2 for integer N
+ between -20000 and +20000.
+ <li> New function decimal_exp(X) works like decimal(X) except that it returns
+ the result in exponential notation - with a "e+NN" at the end.
+ <li> If X is a floating-point value, then the decimal(X) function now does a full
+ expansion of that value into its exact decimal equivalent.
+ </ol>
+<li> Performance enhancements to <a href="../json1.html">JSON processing</a> results in a 2x performance
+ improvement for some kinds of processing on large JSON strings.
+<li> New makefile target "verify-source" checks to ensure that there are no
+ unintentional changes in the source tree. (Works for
+ <a href="../getthecode.html">canonical source code</a> only -
+ not for <a href="../amalgamation.html#amalgtarball">precompiled amalgamation tarballs</a>.)
+<li> Added the <a href="../compile.html#use_seh">SQLITE_USE_SEH</a> compile-time option that enables Structured
+ Exception Handling on Windows while working with the memory-mapped
+ <a href="../walformat.html#shm">shm file</a> that is part of <a href="../wal.html">WAL mode</a> processing. This option is enabled
+ by default when building on Windows using Makefile.msc.
+<li> The <a href="../vfs.html">VFS</a> for unix now assumes that the nanosleep() system call is
+ available unless compiled with -DHAVE_NANOSLEEP=0.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-08-24 12:36:59 0f80b798b3f4b81a7bb4233c58294edd0f1156f36b6ecf5ab8e83631d468778c
+<li>SHA3-256 for sqlite3.c: a6fc5379891d77b69a7d324cd24a437307af66cfdc3fef5dfceec3c82c8d4078
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_43_1.html b/www/releaselog/3_43_1.html
new file mode 100644
index 0000000..0063f6a
--- /dev/null
+++ b/www/releaselog/3_43_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.43.1 On 2023-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.43.1 On 2023-09-11</h2><p><b>Prior changes from version 3.43.0 (2023-08-24):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for <a href="../fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>. This is a variety
+ of <a href="../fts5.html">FTS5</a> full-text search index that omits storing the content that is being indexed
+ while also allowing records to be deleted.
+<li> Enhancements to the <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added new <a href="../lang_datefunc.html#tmshf">time shift modifiers</a> of the form <tt>&plusmn;YYYY-MM-DD HH:MM:SS.SSS</tt>.
+ <li> Added the <a href="../lang_datefunc.html#tmdif">timediff() SQL function</a>.
+ </ol>
+<li> Added the <a href="../lang_corefunc.html#octet_length">octet_length(X)</a> SQL function.
+<li> Added the <a href="../c3ref/stmt_explain.html">sqlite3_stmt_explain()</a> API.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Generalize the LEFT JOIN strength reduction optimization so that it works
+ for RIGHT and FULL JOINs as well. Rename it to
+ <a href="../optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a>.
+ <li> Enhance the theorem prover in the <a href="../optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> optimization
+ so that it returns fewer false-negatives.
+ </ol>
+<li> Enhancements to the <a href="../floatingpoint.html#decext">decimal extension</a>:
+ <ol type="a">
+ <li> New function decimal_pow2(N) returns the N-th power of 2 for integer N
+ between -20000 and +20000.
+ <li> New function decimal_exp(X) works like decimal(X) except that it returns
+ the result in exponential notation - with a "e+NN" at the end.
+ <li> If X is a floating-point value, then the decimal(X) function now does a full
+ expansion of that value into its exact decimal equivalent.
+ </ol>
+<li> Performance enhancements to <a href="../json1.html">JSON processing</a> results in a 2x performance
+ improvement for some kinds of processing on large JSON strings.
+<li> New makefile target "verify-source" checks to ensure that there are no
+ unintentional changes in the source tree. (Works for
+ <a href="../getthecode.html">canonical source code</a> only -
+ not for <a href="../amalgamation.html#amalgtarball">precompiled amalgamation tarballs</a>.)
+<li> Added the <a href="../compile.html#use_seh">SQLITE_USE_SEH</a> compile-time option that enables Structured
+ Exception Handling on Windows while working with the memory-mapped
+ <a href="../walformat.html#shm">shm file</a> that is part of <a href="../wal.html">WAL mode</a> processing. This option is enabled
+ by default when building on Windows using Makefile.msc.
+<li> The <a href="../vfs.html">VFS</a> for unix now assumes that the nanosleep() system call is
+ available unless compiled with -DHAVE_NANOSLEEP=0.
+</ol>
+<p><b>Changes in this specific patch release, version 3.43.1 (2023-09-11):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix a regression in the way that the <a href="../lang_aggfunc.html#sumunc">sum()</a>, <a href="../lang_aggfunc.html#avg">avg()</a>, and <a href="../lang_aggfunc.html#sumunc">total()</a>
+ aggregate functions handle infinities.
+<li> Fix a bug in the <a href="../json1.html#jarraylen">json_array_length()</a> function that occurs when the
+ argument comes directly from <a href="../json1.html#jrm">json_remove()</a>.
+<li> Fix the omit-unused-subquery-columns optimization (introduced in
+ in version 3.42.0) so that it works correctly if the subquery is a
+ compound where one arm is DISTINCT and the other is not.
+<li> Other minor fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0
+<li>SHA3-256 for sqlite3.c: 391af0a4755e31ae8b29776a4a060b678823ffe4c4db558567567c688a578589
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_43_2.html b/www/releaselog/3_43_2.html
new file mode 100644
index 0000000..459047f
--- /dev/null
+++ b/www/releaselog/3_43_2.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.43.2 On 2023-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.43.2 On 2023-10-10</h2><p><b>Prior changes from version 3.43.0 (2023-08-24):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for <a href="../fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>. This is a variety
+ of <a href="../fts5.html">FTS5</a> full-text search index that omits storing the content that is being indexed
+ while also allowing records to be deleted.
+<li> Enhancements to the <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added new <a href="../lang_datefunc.html#tmshf">time shift modifiers</a> of the form <tt>&plusmn;YYYY-MM-DD HH:MM:SS.SSS</tt>.
+ <li> Added the <a href="../lang_datefunc.html#tmdif">timediff() SQL function</a>.
+ </ol>
+<li> Added the <a href="../lang_corefunc.html#octet_length">octet_length(X)</a> SQL function.
+<li> Added the <a href="../c3ref/stmt_explain.html">sqlite3_stmt_explain()</a> API.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Generalize the LEFT JOIN strength reduction optimization so that it works
+ for RIGHT and FULL JOINs as well. Rename it to
+ <a href="../optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a>.
+ <li> Enhance the theorem prover in the <a href="../optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> optimization
+ so that it returns fewer false-negatives.
+ </ol>
+<li> Enhancements to the <a href="../floatingpoint.html#decext">decimal extension</a>:
+ <ol type="a">
+ <li> New function decimal_pow2(N) returns the N-th power of 2 for integer N
+ between -20000 and +20000.
+ <li> New function decimal_exp(X) works like decimal(X) except that it returns
+ the result in exponential notation - with a "e+NN" at the end.
+ <li> If X is a floating-point value, then the decimal(X) function now does a full
+ expansion of that value into its exact decimal equivalent.
+ </ol>
+<li> Performance enhancements to <a href="../json1.html">JSON processing</a> results in a 2x performance
+ improvement for some kinds of processing on large JSON strings.
+<li> New makefile target "verify-source" checks to ensure that there are no
+ unintentional changes in the source tree. (Works for
+ <a href="../getthecode.html">canonical source code</a> only -
+ not for <a href="../amalgamation.html#amalgtarball">precompiled amalgamation tarballs</a>.)
+<li> Added the <a href="../compile.html#use_seh">SQLITE_USE_SEH</a> compile-time option that enables Structured
+ Exception Handling on Windows while working with the memory-mapped
+ <a href="../walformat.html#shm">shm file</a> that is part of <a href="../wal.html">WAL mode</a> processing. This option is enabled
+ by default when building on Windows using Makefile.msc.
+<li> The <a href="../vfs.html">VFS</a> for unix now assumes that the nanosleep() system call is
+ available unless compiled with -DHAVE_NANOSLEEP=0.
+</ol>
+<p><b>Prior changes from version 3.43.1 (2023-09-11):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix a regression in the way that the <a href="../lang_aggfunc.html#sumunc">sum()</a>, <a href="../lang_aggfunc.html#avg">avg()</a>, and <a href="../lang_aggfunc.html#sumunc">total()</a>
+ aggregate functions handle infinities.
+<li> Fix a bug in the <a href="../json1.html#jarraylen">json_array_length()</a> function that occurs when the
+ argument comes directly from <a href="../json1.html#jrm">json_remove()</a>.
+<li> Fix the omit-unused-subquery-columns optimization (introduced in
+ in version 3.42.0) so that it works correctly if the subquery is a
+ compound where one arm is DISTINCT and the other is not.
+<li> Other minor fixes.
+</ol>
+<p><b>Changes in this specific patch release, version 3.43.2 (2023-10-10):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Fix a couple of obscure UAF errors and an obscure memory leak.
+<li> Omit the use of the sprintf() function from the standard library
+ in the <a href="../cli.html">CLI</a>, as this now generates warnings on some platforms.
+<li> Avoid conversion of a double into unsigned long long integer, as
+ some platforms do not do such conversions correctly.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-10-10 12:14:04 4310099cce5a487035fa535dd3002c59ac7f1d1bec68d7cf317fd3e769484790
+<li>SHA3-256 for sqlite3.c: e17a3dc69330bd109256fb5a6e2b3ce8fbec48892a800389eb7c0f8856703161
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_44_0.html b/www/releaselog/3_44_0.html
new file mode 100644
index 0000000..b0192ae
--- /dev/null
+++ b/www/releaselog/3_44_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.44.0 On 2023-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.44.0 On 2023-11-01</h2><p><ol class='lessindent'>
+<li> <a href="../lang_aggfunc.html">Aggregate functions</a> can now include an ORDER BY clause after their last
+ parameter. The arguments to the function are processed in the order
+ specified. This can be important for functions like
+ <a href="../lang_aggfunc.html#group_concat">string_agg()</a> and <a href="../json1.html#jgrouparray">json_group_array()</a>.
+<li> Add support for the <a href="../lang_corefunc.html#concat">concat()</a> and <a href="../lang_corefunc.html#concat_ws">concat_ws()</a> scalar SQL functions,
+ compatible with PostgreSQL, SQLServer, and MySQL.
+<li> Add support for the <a href="../lang_aggfunc.html#group_concat">string_agg()</a> aggregate SQL function, compatible
+ with PostgreSQL and SQLServer.
+<li> New conversion letters on the <a href="../lang_datefunc.html#strftm">strftime() SQL function</a>: %e %F %I %k %l %p %P %R %T %u
+<li> Add new C-language APIs: <a href="../c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="../c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>.
+<li> Many errors associated with CREATE TABLE are now raised when the CREATE TABLE statement
+ itself is run, rather than being deferred until the first time the table is actually
+ used.
+<li> The <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command now verifies the consistency of the
+ content in various built-in <a href="../vtab.html">virtual tables</a> using the new <a href="../vtab.html#xintegrity">xIntegrity method</a>.
+ This works for the <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, <a href="../fts5.html">FTS5</a>, <a href="../rtree.html">RTREE</a>, and <a href="../geopoly.html">GEOPOLY</a> extensions.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> setting now prevents <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema</a>
+ from being turned on. Previously writable_schema could be turned on, but would
+ not actually allow the schema to be writable. Now it simply cannot be turned on.
+<li> Tag the built-in <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, <a href="../fts5.html">FTS5</a>, <a href="../rtree.html">RTREE</a>, and <a href="../geopoly.html">GEOPOLY</a> virtual tables as
+ <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> so that they can be used inside of triggers in
+ high-security deployments.
+<li> The <a href="../pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statement is deprecated, as its use when the
+ schema contains LIKE operators can lead to reports of database corruption
+ by <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>.
+<li> <a href="../compile.html#use_seh">SQLITE_USE_SEH</a> (Structured Exception Handling) is now enabled by default whenever
+ SQLite is built using the Microsoft C compiler. It can be disabled using
+ -DSQLITE_USE_SEH=0
+<li> Query planner optimizations:
+ <ol type="a">
+ <li> In partial index scans, if the WHERE clause implies a constant value for a table
+ column, replace occurrences of that table column with the constant. This
+ increases the likelihood of the partial index being a covering index.
+ <li> Disable the view-scan optimization (added in <a href="../releaselog/3_42_0.html">version 3.42.0</a> - item 1c)
+ as it was causing multiple performance regressions. In its place, reduce
+ the estimated row count for DISTINCT subqueries by a factor of 8.
+ </ol>
+<li> SQLite now performs run-time detection of whether or not the underlying hardware
+ supports "long double" with precision greater than "double" and uses appropriate
+ floating-point routines depending on what it discovered.
+<li> The <a href="../cli.html">CLI</a> for Windows now defaults to using UTF-8 for both input
+ and output on platforms that support it. The --no-utf8 option is available
+ to disable UTF8 support.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad8130
+<li>SHA3-256 for sqlite3.c: d9e6530096136067644b1cb2057b3b0fa51070df99ec61971f73c9ba6aa9a36e
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_44_1.html b/www/releaselog/3_44_1.html
new file mode 100644
index 0000000..681b840
--- /dev/null
+++ b/www/releaselog/3_44_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.44.1 On 2023-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.44.1 On 2023-11-22</h2><p><b>Prior changes from version 3.44.0 (2023-11-01):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> <a href="../lang_aggfunc.html">Aggregate functions</a> can now include an ORDER BY clause after their last
+ parameter. The arguments to the function are processed in the order
+ specified. This can be important for functions like
+ <a href="../lang_aggfunc.html#group_concat">string_agg()</a> and <a href="../json1.html#jgrouparray">json_group_array()</a>.
+<li> Add support for the <a href="../lang_corefunc.html#concat">concat()</a> and <a href="../lang_corefunc.html#concat_ws">concat_ws()</a> scalar SQL functions,
+ compatible with PostgreSQL, SQLServer, and MySQL.
+<li> Add support for the <a href="../lang_aggfunc.html#group_concat">string_agg()</a> aggregate SQL function, compatible
+ with PostgreSQL and SQLServer.
+<li> New conversion letters on the <a href="../lang_datefunc.html#strftm">strftime() SQL function</a>: %e %F %I %k %l %p %P %R %T %u
+<li> Add new C-language APIs: <a href="../c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="../c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>.
+<li> Many errors associated with CREATE TABLE are now raised when the CREATE TABLE statement
+ itself is run, rather than being deferred until the first time the table is actually
+ used.
+<li> The <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command now verifies the consistency of the
+ content in various built-in <a href="../vtab.html">virtual tables</a> using the new <a href="../vtab.html#xintegrity">xIntegrity method</a>.
+ This works for the <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, <a href="../fts5.html">FTS5</a>, <a href="../rtree.html">RTREE</a>, and <a href="../geopoly.html">GEOPOLY</a> extensions.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> setting now prevents <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema</a>
+ from being turned on. Previously writable_schema could be turned on, but would
+ not actually allow the schema to be writable. Now it simply cannot be turned on.
+<li> Tag the built-in <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, <a href="../fts5.html">FTS5</a>, <a href="../rtree.html">RTREE</a>, and <a href="../geopoly.html">GEOPOLY</a> virtual tables as
+ <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> so that they can be used inside of triggers in
+ high-security deployments.
+<li> The <a href="../pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statement is deprecated, as its use when the
+ schema contains LIKE operators can lead to reports of database corruption
+ by <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>.
+<li> <a href="../compile.html#use_seh">SQLITE_USE_SEH</a> (Structured Exception Handling) is now enabled by default whenever
+ SQLite is built using the Microsoft C compiler. It can be disabled using
+ -DSQLITE_USE_SEH=0
+<li> Query planner optimizations:
+ <ol type="a">
+ <li> In partial index scans, if the WHERE clause implies a constant value for a table
+ column, replace occurrences of that table column with the constant. This
+ increases the likelihood of the partial index being a covering index.
+ <li> Disable the view-scan optimization (added in <a href="../releaselog/3_42_0.html">version 3.42.0</a> - item 1c)
+ as it was causing multiple performance regressions. In its place, reduce
+ the estimated row count for DISTINCT subqueries by a factor of 8.
+ </ol>
+<li> SQLite now performs run-time detection of whether or not the underlying hardware
+ supports "long double" with precision greater than "double" and uses appropriate
+ floating-point routines depending on what it discovered.
+<li> The <a href="../cli.html">CLI</a> for Windows now defaults to using UTF-8 for both input
+ and output on platforms that support it. The --no-utf8 option is available
+ to disable UTF8 support.
+</ol>
+<p><b>Changes in this specific patch release, version 3.44.1 (2023-11-22):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Change the <a href="../cli.html">CLI</a> so that it uses UTF-16 for console I/O on Windows. This
+ enables proper display of unicode text on old Windows7 machines.
+<li> Other obscure bug fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-11-22 14:18:12 d295f48e8f367b066b881780c98bdf980a1d550397d5ba0b0e49842c95b3e8b4
+<li>SHA3-256 for sqlite3.c: e359dc502a73f3a8ad8e976a51231134d25cb93ad557a724dd92fe0c5897113a
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_44_2.html b/www/releaselog/3_44_2.html
new file mode 100644
index 0000000..1e173f5
--- /dev/null
+++ b/www/releaselog/3_44_2.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.44.2 On 2023-11-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.44.2 On 2023-11-24</h2><p><b>Prior changes from version 3.44.0 (2023-11-01):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> <a href="../lang_aggfunc.html">Aggregate functions</a> can now include an ORDER BY clause after their last
+ parameter. The arguments to the function are processed in the order
+ specified. This can be important for functions like
+ <a href="../lang_aggfunc.html#group_concat">string_agg()</a> and <a href="../json1.html#jgrouparray">json_group_array()</a>.
+<li> Add support for the <a href="../lang_corefunc.html#concat">concat()</a> and <a href="../lang_corefunc.html#concat_ws">concat_ws()</a> scalar SQL functions,
+ compatible with PostgreSQL, SQLServer, and MySQL.
+<li> Add support for the <a href="../lang_aggfunc.html#group_concat">string_agg()</a> aggregate SQL function, compatible
+ with PostgreSQL and SQLServer.
+<li> New conversion letters on the <a href="../lang_datefunc.html#strftm">strftime() SQL function</a>: %e %F %I %k %l %p %P %R %T %u
+<li> Add new C-language APIs: <a href="../c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="../c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>.
+<li> Many errors associated with CREATE TABLE are now raised when the CREATE TABLE statement
+ itself is run, rather than being deferred until the first time the table is actually
+ used.
+<li> The <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command now verifies the consistency of the
+ content in various built-in <a href="../vtab.html">virtual tables</a> using the new <a href="../vtab.html#xintegrity">xIntegrity method</a>.
+ This works for the <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, <a href="../fts5.html">FTS5</a>, <a href="../rtree.html">RTREE</a>, and <a href="../geopoly.html">GEOPOLY</a> extensions.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> setting now prevents <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema</a>
+ from being turned on. Previously writable_schema could be turned on, but would
+ not actually allow the schema to be writable. Now it simply cannot be turned on.
+<li> Tag the built-in <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, <a href="../fts5.html">FTS5</a>, <a href="../rtree.html">RTREE</a>, and <a href="../geopoly.html">GEOPOLY</a> virtual tables as
+ <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> so that they can be used inside of triggers in
+ high-security deployments.
+<li> The <a href="../pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statement is deprecated, as its use when the
+ schema contains LIKE operators can lead to reports of database corruption
+ by <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>.
+<li> <a href="../compile.html#use_seh">SQLITE_USE_SEH</a> (Structured Exception Handling) is now enabled by default whenever
+ SQLite is built using the Microsoft C compiler. It can be disabled using
+ -DSQLITE_USE_SEH=0
+<li> Query planner optimizations:
+ <ol type="a">
+ <li> In partial index scans, if the WHERE clause implies a constant value for a table
+ column, replace occurrences of that table column with the constant. This
+ increases the likelihood of the partial index being a covering index.
+ <li> Disable the view-scan optimization (added in <a href="../releaselog/3_42_0.html">version 3.42.0</a> - item 1c)
+ as it was causing multiple performance regressions. In its place, reduce
+ the estimated row count for DISTINCT subqueries by a factor of 8.
+ </ol>
+<li> SQLite now performs run-time detection of whether or not the underlying hardware
+ supports "long double" with precision greater than "double" and uses appropriate
+ floating-point routines depending on what it discovered.
+<li> The <a href="../cli.html">CLI</a> for Windows now defaults to using UTF-8 for both input
+ and output on platforms that support it. The --no-utf8 option is available
+ to disable UTF8 support.
+</ol>
+<p><b>Prior changes from version 3.44.1 (2023-11-22):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Change the <a href="../cli.html">CLI</a> so that it uses UTF-16 for console I/O on Windows. This
+ enables proper display of unicode text on old Windows7 machines.
+<li> Other obscure bug fixes.
+</ol>
+<p><b>Changes in this specific patch release, version 3.44.2 (2023-11-24):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Fix a mistake in the <a href="../cli.html">CLI</a> that was introduced by the fix (item 15 above) in 3.44.1.
+<li> Fix a problem in FTS5 that was discovered during internal fuzz testing only
+ minutes after the 3.44.1 release was tagged.
+<li> Fix incomplete assert() statements that the fuzzer discovered the day after
+ the previous release.
+<li> Fix a couple of harmless compiler warnings that appeared in debug builds with GCC 16.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f
+<li>SHA3-256 for sqlite3.c: bd70b012e2d1b3efa132d905224cd0ab476a69b892f8c6b21135756ec7ffbb13
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_45_0.html b/www/releaselog/3_45_0.html
new file mode 100644
index 0000000..1f36e57
--- /dev/null
+++ b/www/releaselog/3_45_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.45.0 On 2024-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.45.0 On 2024-01-15</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for
+ <a href="../appfunc.html">application-defined SQL functions</a>.
+ All application defined SQL functions that invokes
+ <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property.
+ Failure to do so might cause the call to sqlite3_result_subtype() to
+ behave as a no-op. Compile with <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an
+ SQL error to be raised if a function that is not <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
+ tries invokes <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a>
+ is a recommended compile-time option for every application that makes
+ use of subtypes.
+<li> Enhancements to the <a href="../json1.html">JSON SQL functions</a>:
+ <ol type="a">
+ <li> All JSON functions are rewritten to use a new internal parse tree
+ format called <a href="../json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable
+ and hence can be stored in the database to avoid unnecessary re-parsing
+ whenever the JSON value is used.
+ <li> New versions of JSON-generating functions generate binary JSONB instead
+ of JSON text.
+ <li> The <a href="../json1.html#jvalid">json_valid()</a> function adds an optional second argument that
+ specifies what it means for the first argument to be "well-formed".
+ </ol>
+<li> Add the <a href="../fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="../fts5.html">FTS5</a> virtual table.
+<li> The <a href="../compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default.
+ Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Do not allow the transitive constraint optimization to trick the
+ query planner into using a range constraint when a better equality
+ constraint is available.
+ (<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.)
+ <li> The query planner now does a better job of disregarding
+ indexes that <a href="../lang_analyze.html">ANALYZE</a> identifies as low-quality.
+ (<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.)
+ </ol>
+<li> Increase the default value for <a href="../limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to
+ 4294967294.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Improvements to the display of UTF-8 content on Windows
+ <li> Automatically detect playback of ".dump" scripts and make appropriate
+ changes to settings such as ".dbconfig defensive off" and
+ ".dbconfig dqs_dll on".
+ </ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2024-01-15 17:01:13 1066602b2b1976fe58b5150777cced894af17c803e068f5918390d6915b46e1d
+<li>SHA3-256 for sqlite3.c: f56d8e5e8c61d87b957f1cc60b3042c134d7bc0ca3aba002e6999e8f0af310a3
+
+</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="https://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_45_1.html b/www/releaselog/3_45_1.html
new file mode 100644
index 0000000..7075df7
--- /dev/null
+++ b/www/releaselog/3_45_1.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>SQLite Release 3.45.1 On 2024-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.45.1 On 2024-01-30</h2><p><b>Prior changes from version 3.45.0 (2024-01-15):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added the <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for
+ <a href="../appfunc.html">application-defined SQL functions</a>.
+ All application defined SQL functions that invokes
+ <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property.
+ Failure to do so might cause the call to sqlite3_result_subtype() to
+ behave as a no-op. Compile with <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an
+ SQL error to be raised if a function that is not <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
+ tries invokes <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a>
+ is a recommended compile-time option for every application that makes
+ use of subtypes.
+<li> Enhancements to the <a href="../json1.html">JSON SQL functions</a>:
+ <ol type="a">
+ <li> All JSON functions are rewritten to use a new internal parse tree
+ format called <a href="../json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable
+ and hence can be stored in the database to avoid unnecessary re-parsing
+ whenever the JSON value is used.
+ <li> New versions of JSON-generating functions generate binary JSONB instead
+ of JSON text.
+ <li> The <a href="../json1.html#jvalid">json_valid()</a> function adds an optional second argument that
+ specifies what it means for the first argument to be "well-formed".
+ </ol>
+<li> Add the <a href="../fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="../fts5.html">FTS5</a> virtual table.
+<li> The <a href="../compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default.
+ Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Do not allow the transitive constraint optimization to trick the
+ query planner into using a range constraint when a better equality
+ constraint is available.
+ (<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.)
+ <li> The query planner now does a better job of disregarding
+ indexes that <a href="../lang_analyze.html">ANALYZE</a> identifies as low-quality.
+ (<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.)
+ </ol>
+<li> Increase the default value for <a href="../limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to
+ 4294967294.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Improvements to the display of UTF-8 content on Windows
+ <li> Automatically detect playback of ".dump" scripts and make appropriate
+ changes to settings such as ".dbconfig defensive off" and
+ ".dbconfig dqs_dll on".
+ </ol>
+</ol>
+<p><b>Changes in this specific patch release, version 3.45.1 (2024-01-30):</b></p>
+<p><ol class='lessindent'>
+<li value='8'> Restore the <a href="../json1.html#jblobbug">JSON BLOB input bug</a>, and promise to support the anomaly in
+ subsequent releases, for backward compatibility.
+<li> Fix the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it works on read-only
+ databases that contain FTS3 and FTS5 tables. This resolves an issue
+ introduced in <a href="../releaselog/3_44_0.html">version 3.44.0</a> but was undiscovered until after the 3.45.0 release.
+<li> Fix issues associated with processing corrupt <a href="../json1.html#jsonbx">JSONB</a> inputs:
+ <ol type="a">
+ <li> Prevent exponential runtime when converting a corrupt JSONB into text.
+ <li> Fix a possible read of one byte past the end of the JSONB blob when converting
+ a corrupt JSONB into text.
+ <li> Enhanced testing using <a href="../testing.html#dbsqlfuzz">jfuzz</a> to prevent any future JSONB problems such
+ as the above.
+ </ol>
+<li> Fix a long-standing bug in which a read of a few bytes past the end of a
+ memory-mapped segment might occur when accessing a craftily corrupted database
+ using <a href="../pragma.html#pragma_mmap_size">memory-mapped database</a>.
+<li> Fix a long-standing bug in which a NULL pointer dereference might occur in
+ the <a href="../opcode.html">bytecode engine</a> due to incorrect bytecode being generated for a class
+ of SQL statements that are deliberately designed to stress the query planner
+ but which are otherwise pointless.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a
+<li>SHA3-256 for sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295
+
+</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="https://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..97d2215
--- /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_corefunc.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="https://icu.unicode.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="https://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..d08d441
--- /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="https://icu.unicode.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="https://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..04434d2
--- /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="https://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..73ee8c6
--- /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="https://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..5e4a02f
--- /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="https://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..14f7737
--- /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="https://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..1d0346d
--- /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="../https://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="https://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..0074afa
--- /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="https://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..c60da63
--- /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="https://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..35e8978
--- /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="https://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..c4229ab
--- /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="https://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..d4cd442
--- /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="https://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..ffe1b04
--- /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="https://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..846ac21
--- /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="https://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..cf14b54
--- /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="https://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..f18cd7c
--- /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="https://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..ea6f0a6
--- /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="https://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..6148ad5
--- /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="https://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..c53e541
--- /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="https://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..5538ebf
--- /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="https://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..391156d
--- /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="https://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..92f47de
--- /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="https://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..4237a97
--- /dev/null
+++ b/www/releaselog/3_6_15.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.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="https://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..63b480b
--- /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="https://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..7363132
--- /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="../https://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="https://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..d061ff2
--- /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="https://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..25c0127
--- /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="../https://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="https://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..d5a7ccc
--- /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="https://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..480423d
--- /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="https://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..8d9051a
--- /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="https://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..72aa80d
--- /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="https://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..63aabf2
--- /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="https://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..a581272
--- /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="https://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..ae86c08
--- /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="https://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..e9f1e1d
--- /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="https://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..a7c0040
--- /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="../https://www.sqlite.org/src/finfo?name=tool/genfkey.c">
+ source code</a> and
+ <a href="../https://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="https://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..e675bec
--- /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="https://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..58a11ab
--- /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="https://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..68d4c24
--- /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="https://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..5ee95dc
--- /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="https://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..e7c8052
--- /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="https://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..f4c5232
--- /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="https://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..0e89047
--- /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="https://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..33ec070
--- /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="https://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..97ce3a7
--- /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="../https://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="https://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..f2dc3e5
--- /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="https://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..5779cb6
--- /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="https://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="https://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="https://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="https://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..37a6f43
--- /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="https://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="https://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..96962ec
--- /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="https://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="https://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="https://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..415b64c
--- /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="https://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="https://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..ca61195
--- /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="https://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..01d76b6
--- /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="https://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..7bcbaa7
--- /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="../https://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="https://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..8395ac3
--- /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="https://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..2919210
--- /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="https://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="https://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..9763fa4
--- /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="https://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="https://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..35744ae
--- /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="https://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="https://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..d206ac5
--- /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="https://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="https://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="https://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="https://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="https://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="https://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..2fc35cd
--- /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="https://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="https://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="https://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="https://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="https://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="https://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="https://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..27ad167
--- /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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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..6b3a63e
--- /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="../https://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="https://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..441334d
--- /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="https://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..ebcfc52
--- /dev/null
+++ b/www/releaselog/3_7_4.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.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="https://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="https://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..cfa1a92
--- /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="https://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="https://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..63366e9
--- /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="https://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..f66a719
--- /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="https://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..c9c5675
--- /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="https://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..855b712
--- /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="https://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..f96ecc5
--- /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="https://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..691bfae
--- /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="https://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="https://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..f2e3b8c
--- /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="https://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..e550db9
--- /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="https://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..b7fc008
--- /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="https://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..71307d1
--- /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="https://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..20d9603
--- /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="https://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..e6b8074
--- /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="https://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="https://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..0effcbf
--- /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="https://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..ad9f674
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..2a0571f
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..d925047
--- /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="https://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="https://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..31b73d2
--- /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>Prior changes from 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="https://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>Changes in this specific patch release, 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="https://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..256b761
--- /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="https://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..9c6acd9
--- /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="https://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..d651a3b
--- /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="https://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="https://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..7f81014
--- /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="https://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="https://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="https://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="https://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="https://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="https://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="https://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..24407ba
--- /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>Prior changes from 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="https://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="https://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="https://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="https://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="https://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="https://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>Changes in this specific patch release, 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="https://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..ac3656b
--- /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>Prior changes from 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="https://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="https://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="https://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="https://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="https://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="https://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>Prior changes from 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>Changes in this specific patch release, 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="https://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..ad64ecd
--- /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>Prior changes from 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="https://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="https://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="https://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="https://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="https://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="https://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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, version 3.8.4.3 (2014-04-03):</b></p>
+<p><ol class='lessindent'>
+<li value='20'>Add a
+ <a href="https://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="https://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="https://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..dc79f10
--- /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="https://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
+<li>Assertion fault on queries involving expressions of the form
+ "x IN (?)". Ticket <a href="https://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
+<li>Incorrect column datatype reported.
+ Ticket <a href="https://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="https://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
+<li>Partial index causes assertion fault on UPDATE OR REPLACE.
+ Ticket <a href="https://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
+<li>Crash when calling undocumented SQL function sqlite_rename_parent()
+ with NULL parameters.
+ Ticket <a href="https://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
+<li>ORDER BY ignored if the query has an identical GROUP BY.
+ Ticket <a href="https://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="https://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="https://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="https://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..69b886e
--- /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="https://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="https://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="https://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="https://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="https://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="https://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="https://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..14b15a7
--- /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="https://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="https://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="https://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="https://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="https://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
+<li>Fix a faulty assert() statement.
+ Ticket <a href="https://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="https://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..b67878c
--- /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="https://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..d0ee043
--- /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="https://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="https://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="https://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..0be6440
--- /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="https://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..5dd8eed
--- /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="https://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..4486c0a
--- /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="https://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..d7c0010
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..0a9c870
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..97f7506
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..817f40e
--- /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="https://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..6a2127e
--- /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="https://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..ead1a50
--- /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>Prior changes from 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>Changes in this specific patch release, 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="https://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..dafeab9
--- /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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..f354dd4
--- /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>Prior changes from 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>Prior changes from 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>Prior changes from 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>Changes in this specific patch release, 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="https://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..7075df7
--- /dev/null
+++ b/www/releaselog/current.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>SQLite Release 3.45.1 On 2024-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.45.1 On 2024-01-30</h2><p><b>Prior changes from version 3.45.0 (2024-01-15):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added the <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for
+ <a href="../appfunc.html">application-defined SQL functions</a>.
+ All application defined SQL functions that invokes
+ <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property.
+ Failure to do so might cause the call to sqlite3_result_subtype() to
+ behave as a no-op. Compile with <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an
+ SQL error to be raised if a function that is not <a href="../c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
+ tries invokes <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="../compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a>
+ is a recommended compile-time option for every application that makes
+ use of subtypes.
+<li> Enhancements to the <a href="../json1.html">JSON SQL functions</a>:
+ <ol type="a">
+ <li> All JSON functions are rewritten to use a new internal parse tree
+ format called <a href="../json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable
+ and hence can be stored in the database to avoid unnecessary re-parsing
+ whenever the JSON value is used.
+ <li> New versions of JSON-generating functions generate binary JSONB instead
+ of JSON text.
+ <li> The <a href="../json1.html#jvalid">json_valid()</a> function adds an optional second argument that
+ specifies what it means for the first argument to be "well-formed".
+ </ol>
+<li> Add the <a href="../fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="../fts5.html">FTS5</a> virtual table.
+<li> The <a href="../compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default.
+ Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Do not allow the transitive constraint optimization to trick the
+ query planner into using a range constraint when a better equality
+ constraint is available.
+ (<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.)
+ <li> The query planner now does a better job of disregarding
+ indexes that <a href="../lang_analyze.html">ANALYZE</a> identifies as low-quality.
+ (<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.)
+ </ol>
+<li> Increase the default value for <a href="../limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to
+ 4294967294.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Improvements to the display of UTF-8 content on Windows
+ <li> Automatically detect playback of ".dump" scripts and make appropriate
+ changes to settings such as ".dbconfig defensive off" and
+ ".dbconfig dqs_dll on".
+ </ol>
+</ol>
+<p><b>Changes in this specific patch release, version 3.45.1 (2024-01-30):</b></p>
+<p><ol class='lessindent'>
+<li value='8'> Restore the <a href="../json1.html#jblobbug">JSON BLOB input bug</a>, and promise to support the anomaly in
+ subsequent releases, for backward compatibility.
+<li> Fix the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it works on read-only
+ databases that contain FTS3 and FTS5 tables. This resolves an issue
+ introduced in <a href="../releaselog/3_44_0.html">version 3.44.0</a> but was undiscovered until after the 3.45.0 release.
+<li> Fix issues associated with processing corrupt <a href="../json1.html#jsonbx">JSONB</a> inputs:
+ <ol type="a">
+ <li> Prevent exponential runtime when converting a corrupt JSONB into text.
+ <li> Fix a possible read of one byte past the end of the JSONB blob when converting
+ a corrupt JSONB into text.
+ <li> Enhanced testing using <a href="../testing.html#dbsqlfuzz">jfuzz</a> to prevent any future JSONB problems such
+ as the above.
+ </ol>
+<li> Fix a long-standing bug in which a read of a few bytes past the end of a
+ memory-mapped segment might occur when accessing a craftily corrupted database
+ using <a href="../pragma.html#pragma_mmap_size">memory-mapped database</a>.
+<li> Fix a long-standing bug in which a NULL pointer dereference might occur in
+ the <a href="../opcode.html">bytecode engine</a> due to incorrect bytecode being generated for a class
+ of SQL statements that are deliberately designed to stress the query planner
+ but which are otherwise pointless.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a
+<li>SHA3-256 for sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295
+
+</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="https://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..8b6a1a7
--- /dev/null
+++ b/www/requirements.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>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>
+
+</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=6f99a0bcbd">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/rescode.html b/www/rescode.html
new file mode 100644
index 0000000..2f3cbd2
--- /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 can 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_RDLOCK 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_DELETE 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_CLOSE 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=3b9436392c">2023-09-14 14:42:56</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..4d21870
--- /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=d768bc62ed">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/rowvalue.html b/www/rowvalue.html
new file mode 100644
index 0000000..36bd749
--- /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=97d4d2b36b">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/rtree.html b/www/rtree.html
new file mode 100644
index 0000000..be7f7ce
--- /dev/null
+++ b/www/rtree.html
@@ -0,0 +1,942 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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="https://link.springer.com/referenceworkentry/10.1007/978-0-387-35973-1_1151">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>. However, depending on configuration options
+and the particular version of SQLite you are using, it may or may not
+be enabled by default. To ensure that the R*Tree module is enabled,
+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=703d907909">2023-02-20 00:00:42</a> UTC </small></i></p>
+
diff --git a/www/schematab.html b/www/schematab.html
new file mode 100644
index 0000000..67cb180
--- /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>
+
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..5af4089
--- /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..45bec0b
--- /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..b84b6f4
--- /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="9"><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="11"><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=a75becf16a">2024-01-16 14:06:27</a> UTC </small></i></p>
+
diff --git a/www/selfcontained.html b/www/selfcontained.html
new file mode 100644
index 0000000..b53548a
--- /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=54e685acf5">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..3c6f991
--- /dev/null
+++ b/www/series.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>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,STOP,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 one visible
+result column named "value" holding integer values
+and a number of rows determined by the
+parameters START, STOP, and STEP. The first row of the table has
+a value of START. Subsequent rows increment by STEP to a value
+not exceeding STOP.
+
+</p><p>The generate_series() table has additional, hidden columns
+named "start", "stop", and "step" whose values are the effective
+values of START, STOP and STEP as provided or defaulted.
+It also has a rowid, accessible by its usual names.
+
+</p><p>Omitted parameters take on default values. STEP defaults to 1.
+STOP defaults to 4294967295. 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 for positive step values
+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=bc2d791663">2023-05-01 21:49:55</a> UTC </small></i></p>
+
diff --git a/www/serverless.html b/www/serverless.html
new file mode 100644
index 0000000..9146898
--- /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=b6f6dbff74">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/session.html b/www/session.html
new file mode 100644
index 0000000..dacb386
--- /dev/null
+++ b/www/session.html
@@ -0,0 +1,1874 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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">some smaller 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_FKNOACTION'>SQLITE_CHANGESETAPPLY_FKNOACTION</a></li>
+<li><a href='#SQLITE_CHANGESETAPPLY_FKNOACTION'>SQLITE_CHANGESETAPPLY_IGNORENOOP</a></li>
+<li><a href='#SQLITE_CHANGESETAPPLY_FKNOACTION'>SQLITE_CHANGESETAPPLY_INVERT</a></li>
+<li><a href='#SQLITE_CHANGESETAPPLY_FKNOACTION'>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>
+<li><a href='#SQLITE_SESSION_OBJCONFIG_ROWID'>SQLITE_SESSION_OBJCONFIG_ROWID</a></li>
+<li><a href='#SQLITE_SESSION_OBJCONFIG_ROWID'>SQLITE_SESSION_OBJCONFIG_SIZE</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='#sqlite3changegroup_schema'>sqlite3changegroup_schema</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='#sqlite3changeset_upgrade'>sqlite3changeset_upgrade</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_object_config'>sqlite3session_object_config</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_object_config'>sqlite3session_object_config</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. Except, if the changegroup
+object has been configured with a database schema using the
+sqlite3changegroup_schema() API, then it is possible to combine changesets
+with different numbers of columns for a single table, provided that
+they are otherwise compatible.</p>
+
+<p>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. </p>
+
+<p>In all cases, if an error occurs the state of the final contents of the
+changegroup is undefined. 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="sqlite3changegroup_schema"></a>
+<h2>Add a Schema to a Changegroup</h2><blockquote><pre>int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb);
+</pre></blockquote><p>
+This method may be used to optionally enforce the rule that the changesets
+added to the changegroup handle must match the schema of database zDb
+("main", "temp", or the name of an attached database). If
+sqlite3changegroup_add() is called to add a changeset that is not compatible
+with the configured schema, SQLITE_SCHEMA is returned and the changegroup
+object is left in an undefined state.</p>
+
+<p>A changeset schema is considered compatible with the database schema in
+the same way as for sqlite3changeset_apply(). Specifically, for each
+table in the changeset, there exists a database table with:</p>
+
+<p><ul>
+ <li> The name identified by the changeset, and
+ <li> at least as many columns as recorded in the changeset, and
+ <li> the primary key columns in the same position as recorded in
+ the changeset.
+</ul></p>
+
+<p>The output of the changegroup object always has the same schema as the
+database nominated using this function. In cases where changesets passed
+to sqlite3changegroup_add() have fewer columns than the corresponding table
+in the database schema, these are filled in using the default column
+values from the database schema. This makes it possible to combined
+changesets that have different numbers of columns for a single table
+within a changegroup, provided that they are otherwise compatible.
+</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="sqlite3changeset_upgrade"></a>
+<h2>Upgrade the Schema of a Changeset/Patchset</h2><blockquote><pre>int sqlite3changeset_upgrade(
+ sqlite3 *db,
+ const char *zDb,
+ int nIn, const void *pIn, /* Input changeset */
+ int *pnOut, void **ppOut /* OUT: Inverse of input */
+);
+</pre></blockquote><p></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_object_config"></a>
+<h2>Configure a Session Object</h2><blockquote><pre>int sqlite3session_object_config(sqlite3_session*, int op, void *pArg);
+</pre></blockquote><p>
+This method is used to configure a session object after it has been
+created. At present the only valid values for the second parameter are
+<a href="#SQLITE_SESSION_OBJCONFIG_ROWID">SQLITE_SESSION_OBJCONFIG_SIZE</a> and <a href="#SQLITE_SESSION_OBJCONFIG_ROWID">SQLITE_SESSION_OBJCONFIG_ROWID</a>.</p>
+
+<p></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_FKNOACTION"></a>
+<h2>Flags for sqlite3changeset_apply_v2</h2><blockquote><pre>#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
+#define SQLITE_CHANGESETAPPLY_INVERT 0x0002
+#define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004
+#define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008
+</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>
+
+<p><dt>SQLITE_CHANGESETAPPLY_IGNORENOOP <dd>
+ Do not invoke the conflict handler callback for any changes that
+ would not actually modify the database even if they were applied.
+ Specifically, this means that the conflict handler is not invoked
+ for:
+ <ul>
+ <li>a delete change if the row being deleted cannot be found,
+ <li>an update change if the modified fields are already set to
+ their new values in the conflicting row, or
+ <li>an insert change if all fields of the conflicting row match
+ the row being inserted.
+ </ul></p>
+
+<p><dt>SQLITE_CHANGESETAPPLY_FKNOACTION <dd>
+ If this flag it set, then all foreign key constraints in the target
+ database behave as if they were declared with "ON UPDATE NO ACTION ON
+ DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL
+ or SET DEFAULT.
+</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="SQLITE_SESSION_OBJCONFIG_ROWID"></a>
+<h2>Options for sqlite3session_object_config</h2><blockquote><pre>#define SQLITE_SESSION_OBJCONFIG_SIZE 1
+#define SQLITE_SESSION_OBJCONFIG_ROWID 2
+</pre></blockquote><p>
+The following values may passed as the the 2nd parameter to
+sqlite3session_object_config().</p>
+
+<p><dt>SQLITE_SESSION_OBJCONFIG_SIZE <dd>
+ This option is used to set, clear or query the flag that enables
+ the <a href="#sqlite3session_changeset_size">sqlite3session_changeset_size()</a> API. Because it imposes some
+ computational overhead, this API is disabled by default. Argument
+ pArg must point to a value of type (int). If the value is initially
+ 0, then the sqlite3session_changeset_size() API is disabled. If it
+ is greater than 0, then the same API is enabled. Or, if the initial
+ value is less than zero, no change is made. In all cases the (int)
+ variable is set to 1 if the sqlite3session_changeset_size() API is
+ enabled following the current call, or 0 otherwise.</p>
+
+<p> It is an error (SQLITE_MISUSE) to attempt to modify this setting after
+ the first table has been attached to the session object.</p>
+
+<p><dt>SQLITE_SESSION_OBJCONFIG_ROWID <dd>
+ This option is used to set, clear or query the flag that enables
+ collection of data for tables with no explicit PRIMARY KEY.</p>
+
+<p> Normally, tables with no explicit PRIMARY KEY are simply ignored
+ by the sessions module. However, if this flag is set, it behaves
+ as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted
+ as their leftmost columns.</p>
+
+<p> It is an error (SQLITE_MISUSE) to attempt to modify this setting after
+ the first table has been attached to the session object.
+</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_FKNOACTION">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..69ad8c3
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..b3a12bd
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/c_changesetapply_fknoaction.html b/www/session/c_changesetapply_fknoaction.html
new file mode 100644
index 0000000..779c6e4
--- /dev/null
+++ b/www/session/c_changesetapply_fknoaction.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>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="../session/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
+#define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004
+#define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008
+</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><dt>SQLITE_CHANGESETAPPLY_IGNORENOOP <dd>
+ Do not invoke the conflict handler callback for any changes that
+ would not actually modify the database even if they were applied.
+ Specifically, this means that the conflict handler is not invoked
+ for:
+ <ul>
+ <li>a delete change if the row being deleted cannot be found,
+ <li>an update change if the modified fields are already set to
+ their new values in the conflicting row, or
+ <li>an insert change if all fields of the conflicting row match
+ the row being inserted.
+ </ul></p>
+
+<p><dt>SQLITE_CHANGESETAPPLY_FKNOACTION <dd>
+ If this flag it set, then all foreign key constraints in the target
+ database behave as if they were declared with "ON UPDATE NO ACTION ON
+ DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL
+ or SET DEFAULT.
+</p><p>See also lists of
+ <a href="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..fb95365
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..84cbf8b
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/c_session_objconfig_rowid.html b/www/session/c_session_objconfig_rowid.html
new file mode 100644
index 0000000..97ad39b
--- /dev/null
+++ b/www/session/c_session_objconfig_rowid.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>Options for sqlite3session_object_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="../session/intro.html"><h2>Session Module C Interface</h2></a><h2>Options for sqlite3session_object_config</h2><blockquote><pre>#define SQLITE_SESSION_OBJCONFIG_SIZE 1
+#define SQLITE_SESSION_OBJCONFIG_ROWID 2
+</pre></blockquote><p>
+The following values may passed as the the 2nd parameter to
+sqlite3session_object_config().</p>
+
+<p><dt>SQLITE_SESSION_OBJCONFIG_SIZE <dd>
+ This option is used to set, clear or query the flag that enables
+ the <a href="../session/sqlite3session_changeset_size.html">sqlite3session_changeset_size()</a> API. Because it imposes some
+ computational overhead, this API is disabled by default. Argument
+ pArg must point to a value of type (int). If the value is initially
+ 0, then the sqlite3session_changeset_size() API is disabled. If it
+ is greater than 0, then the same API is enabled. Or, if the initial
+ value is less than zero, no change is made. In all cases the (int)
+ variable is set to 1 if the sqlite3session_changeset_size() API is
+ enabled following the current call, or 0 otherwise.</p>
+
+<p> It is an error (SQLITE_MISUSE) to attempt to modify this setting after
+ the first table has been attached to the session object.</p>
+
+<p><dt>SQLITE_SESSION_OBJCONFIG_ROWID <dd>
+ This option is used to set, clear or query the flag that enables
+ collection of data for tables with no explicit PRIMARY KEY.</p>
+
+<p> Normally, tables with no explicit PRIMARY KEY are simply ignored
+ by the sessions module. However, if this flag is set, it behaves
+ as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted
+ as their leftmost columns.</p>
+
+<p> It is an error (SQLITE_MISUSE) to attempt to modify this setting after
+ the first table has been attached to the session object.
+</p><p>See also lists of
+ <a href="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/changegroup.html b/www/session/changegroup.html
new file mode 100644
index 0000000..e1cc234
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..08ff3d3
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/constlist.html b/www/session/constlist.html
new file mode 100644
index 0000000..f9f0ab6
--- /dev/null
+++ b/www/session/constlist.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>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="../session/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_fknoaction.html'>SQLITE_CHANGESETAPPLY_FKNOACTION</a></li>
+<li><a href='../session/c_changesetapply_fknoaction.html'>SQLITE_CHANGESETAPPLY_IGNORENOOP</a></li>
+<li><a href='../session/c_changesetapply_fknoaction.html'>SQLITE_CHANGESETAPPLY_INVERT</a></li>
+<li><a href='../session/c_changesetapply_fknoaction.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>
+<li><a href='../session/c_session_objconfig_rowid.html'>SQLITE_SESSION_OBJCONFIG_ROWID</a></li>
+<li><a href='../session/c_session_objconfig_rowid.html'>SQLITE_SESSION_OBJCONFIG_SIZE</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="../session/objlist.html">Objects</a> and
+<a href="../session/funclist.html">Functions</a>.</p>
+
+
diff --git a/www/session/funclist.html b/www/session/funclist.html
new file mode 100644
index 0000000..4bae3fa
--- /dev/null
+++ b/www/session/funclist.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>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="../session/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/sqlite3changegroup_schema.html'>sqlite3changegroup_schema</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/sqlite3changeset_upgrade.html'>sqlite3changeset_upgrade</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_object_config.html'>sqlite3session_object_config</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="../session/constlist.html">Constants</a> and
+<a href="../session/objlist.html">Objects</a>.</p>
+
+
diff --git a/www/session/intro.html b/www/session/intro.html
new file mode 100644
index 0000000..a46388b
--- /dev/null
+++ b/www/session/intro.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>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="../session/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="../session/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="../session/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..447cbf6
--- /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="../session/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="../session/constlist.html">Constants</a> and
+<a href="../session/funclist.html">Functions</a>.
+
+
diff --git a/www/session/rebaser.html b/www/session/rebaser.html
new file mode 100644
index 0000000..f9751f4
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/session.html b/www/session/session.html
new file mode 100644
index 0000000..f0b78ce
--- /dev/null
+++ b/www/session/session.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>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="../session/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_object_config.html'>sqlite3session_object_config</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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..99de188
--- /dev/null
+++ b/www/session/sqlite3changegroup_add.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>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="../session/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. Except, if the changegroup
+object has been configured with a database schema using the
+sqlite3changegroup_schema() API, then it is possible to combine changesets
+with different numbers of columns for a single table, provided that
+they are otherwise compatible.</p>
+
+<p>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. </p>
+
+<p>In all cases, if an error occurs the state of the final contents of the
+changegroup is undefined. If no error occurs, SQLITE_OK is returned.
+</p><p>See also lists of
+ <a href="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..9ec0eeb
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..67e4386
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..040a129
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..a097119
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changegroup_schema.html b/www/session/sqlite3changegroup_schema.html
new file mode 100644
index 0000000..bf8cefa
--- /dev/null
+++ b/www/session/sqlite3changegroup_schema.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>Add a Schema 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="../session/intro.html"><h2>Session Module C Interface</h2></a><h2>Add a Schema to a Changegroup</h2><blockquote><pre>int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb);
+</pre></blockquote><p>
+This method may be used to optionally enforce the rule that the changesets
+added to the changegroup handle must match the schema of database zDb
+("main", "temp", or the name of an attached database). If
+sqlite3changegroup_add() is called to add a changeset that is not compatible
+with the configured schema, SQLITE_SCHEMA is returned and the changegroup
+object is left in an undefined state.</p>
+
+<p>A changeset schema is considered compatible with the database schema in
+the same way as for sqlite3changeset_apply(). Specifically, for each
+table in the changeset, there exists a database table with:</p>
+
+<p><ul>
+ <li> The name identified by the changeset, and
+ <li> at least as many columns as recorded in the changeset, and
+ <li> the primary key columns in the same position as recorded in
+ the changeset.
+</ul></p>
+
+<p>The output of the changegroup object always has the same schema as the
+database nominated using this function. In cases where changesets passed
+to sqlite3changegroup_add() have fewer columns than the corresponding table
+in the database schema, these are filled in using the default column
+values from the database schema. This makes it possible to combined
+changesets that have different numbers of columns for a single table
+within a changegroup, provided that they are otherwise compatible.
+</p><p>See also lists of
+ <a href="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..02849ff
--- /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="../session/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_fknoaction.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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..282ab3e
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..2098bc0
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..d353eaf
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..3c31c1b
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..d97c44f
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..1fb8f10
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..31b9a40
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..2c8f4f7
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..14dca9a
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..e5c936b
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..83b602c
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_upgrade.html b/www/session/sqlite3changeset_upgrade.html
new file mode 100644
index 0000000..c54d09c
--- /dev/null
+++ b/www/session/sqlite3changeset_upgrade.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>Upgrade the Schema of a Changeset/Patchset</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+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="../session/intro.html"><h2>Session Module C Interface</h2></a><h2>Upgrade the Schema of a Changeset/Patchset</h2><blockquote><pre>int sqlite3changeset_upgrade(
+ sqlite3 *db,
+ const char *zDb,
+ int nIn, const void *pIn, /* Input changeset */
+ int *pnOut, void **ppOut /* OUT: Inverse of input */
+);
+</pre></blockquote><p></p><p>See also lists of
+ <a href="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..51807af
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..373dfa2
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..d8bdab4
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..7209435
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..0670df7
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..df9a39c
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..eaf2a83
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..8b89e89
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..4501259
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..ddaccbd
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..39b5e35
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..df2bcc4
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..b114bbb
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..56b9bf1
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..bab4a0b
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_object_config.html b/www/session/sqlite3session_object_config.html
new file mode 100644
index 0000000..ecab92c
--- /dev/null
+++ b/www/session/sqlite3session_object_config.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>Configure 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="../session/intro.html"><h2>Session Module C Interface</h2></a><h2>Configure a Session Object</h2><blockquote><pre>int sqlite3session_object_config(sqlite3_session*, int op, void *pArg);
+</pre></blockquote><p>
+This method is used to configure a session object after it has been
+created. At present the only valid values for the second parameter are
+<a href="../session/c_session_objconfig_rowid.html">SQLITE_SESSION_OBJCONFIG_SIZE</a> and <a href="../session/c_session_objconfig_rowid.html">SQLITE_SESSION_OBJCONFIG_ROWID</a>.</p>
+
+<p></p><p>See also lists of
+ <a href="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..ab0b191
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/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..77e20b3
--- /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="../session/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="../session/objlist.html">Objects</a>,
+ <a href="../session/constlist.html">Constants</a>, and
+ <a href="../session/funclist.html">Functions</a>.</p>
+
diff --git a/www/sessionintro.html b/www/sessionintro.html
new file mode 100644
index 0000000..dbd4791
--- /dev/null
+++ b/www/sessionintro.html
@@ -0,0 +1,651 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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 conviently recording
+changes to some or all of certain tables 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. However, extra steps are
+ needed to record primary keys for WITHOUT ROWID table changes.
+
+</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=682990e565">2023-01-07 01:13:01</a> UTC </small></i></p>
+
diff --git a/www/sharedcache.html b/www/sharedcache.html
new file mode 100644
index 0000000..c82f0a1
--- /dev/null
+++ b/www/sharedcache.html
@@ -0,0 +1,406 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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>
+
+
+
+
+
+<a name="sqlite_shared_cache_mode"></a>
+
+<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=4a965f6f8f">2023-01-02 14:22:42</a> UTC </small></i></p>
+
diff --git a/www/shortnames.html b/www/shortnames.html
new file mode 100644
index 0000000..2fd104f
--- /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=7fc7e0cffc">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/sitemap.html b/www/sitemap.html
new file mode 100644
index 0000000..aa1548e
--- /dev/null
+++ b/www/sitemap.html
@@ -0,0 +1,766 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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><b><a href="profile.html">Profiling SQL Queries</a></b></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="profile.html">Queries &#151; Profiling SQL</a></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><a href="profile.html">SQL Queries &#151; Profiling</a></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..b96b2d3
--- /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>
+Obsolete URL: http://www.sergeant.org/sqlite_vs_pgsync.html
+</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=5496b6bdd5">2023-01-02 14:22:42</a> UTC </small></i></p>
+
diff --git a/www/spellfix1.html b/www/spellfix1.html
new file mode 100644
index 0000000..f4a06d9
--- /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="https://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>
+
diff --git a/www/sqlanalyze.html b/www/sqlanalyze.html
new file mode 100644
index 0000000..13c5077
--- /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=3963fd2c25">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/sqlar.html b/www/sqlar.html
new file mode 100644
index 0000000..a097a39
--- /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
+blob X using the <a href="https://zlib.net/">Default</a> algorithm and returns the
+result as a blob. If the input X is not a compressible blob, 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>
+
diff --git a/www/sqldiff.html b/www/sqldiff.html
new file mode 100644
index 0000000..ef67f4d
--- /dev/null
+++ b/www/sqldiff.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>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="#sqldiff_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="sessionintro.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.
+
+<a name="sqldiff_vtab"></a>
+
+</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=a0553bcc5b">2023-01-06 00:45:39</a> UTC </small></i></p>
+
diff --git a/www/sqlite.css b/www/sqlite.css
new file mode 100644
index 0000000..aadf74f
--- /dev/null
+++ b/www/sqlite.css
@@ -0,0 +1,311 @@
+/* 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%;
+}
+
+/* Default fill and stroke for SVG paths */
+polygon { fill: black; stroke:#111111; stroke-width:1 }
+path { fill: none; stroke:#111111; stroke-width:1 }
+
+.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..6ab3b5d
--- /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=9368174a6e">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/stricttables.html b/www/stricttables.html
new file mode 100644
index 0000000..aa72364
--- /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=8e4caa36c0">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/support.html b/www/support.html
new file mode 100644
index 0000000..e336bfa
--- /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=76de5e3c27">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/swarmvtab.html b/www/swarmvtab.html
new file mode 100644
index 0000000..f5409a1
--- /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=e40b220bf8">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/syntax.html b/www/syntax.html
new file mode 100644
index 0000000..ae8300e
--- /dev/null
+++ b/www/syntax.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>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/function-arguments.html'>function-arguments</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..17d18db
--- /dev/null
+++ b/www/syntax/aggregate-function-invocation.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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:909px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 909.533 223.344">
+<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="657,56 646,60 646,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L652,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M672,71A15 15 0 0 0 688 56A15 15 0 0 0 672 41A15 15 0 0 0 657 56A15 15 0 0 0 672 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="734,86 722,91 722,82" style="fill:rgb(0,0,0)"/>
+<path d="M688,56 L 699,56 Q 711,56 711,71 L 711,71 Q 711,86 719,86 L 728,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,101L846,101L846,71L734,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="790" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M846,86 L 855,86 Q 864,86 864,71 L 864,71 Q 864,56 879,56 L 879,56 L 894,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="903" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="790,56 778,60 778,52" style="fill:rgb(0,0,0)"/>
+<path d="M688,56L784,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M790,56L894,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="M438,207A15 15 0 0 0 453 192A15 15 0 0 0 438 177A15 15 0 0 0 423 192A15 15 0 0 0 438 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="423,192 412,196 412,188" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,177 Q 254,192 269,192 L 402,192 L 417,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,192 477,196 477,188" style="fill:rgb(0,0,0)"/>
+<path d="M453,192L483,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,192 L 570,192 Q 585,192 600,192 L 605,192 Q 620,192 620,177 L 620,71 Q 620,56 626,56 L 631,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="438,216 427,221 427,212" style="fill:rgb(0,0,0)"/>
+<path d="M326,192 L 392,192 Q 407,192 407,204 Q 407,216 420,216 L 433,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,216 L 453,216 Q 467,216 467,204 Q 467,192 473,192 L 479,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="300,117 289,121 289,112" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 523,56 Q 533,56 533,71 L 533,71 Q 533,86 518,86 L 292,86 Q 277,86 277,101 L 277,102 Q 277,117 286,117 L 294,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M315,132L360,132A15 15 0 0 0 375 117A15 15 0 0 0 360 101L315,101A15 15 0 0 0 300 117A15 15 0 0 0 315 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="392,117 381,121 381,112" style="fill:rgb(0,0,0)"/>
+<path d="M375,117L386,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,132L411,132A15 15 0 0 0 426 117A15 15 0 0 0 411 101L407,101A15 15 0 0 0 392 117A15 15 0 0 0 407 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M426,117L449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,132L585,132L585,101L455,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M520,169A15 15 0 0 0 535 154A15 15 0 0 0 520 139A15 15 0 0 0 505 154A15 15 0 0 0 520 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="535,154 547,150 547,159" style="fill:rgb(0,0,0)"/>
+<path d="M585,117 L 591,117 Q 597,117 597,132 L 597,139 Q 597,154 582,154 L 556,154 L 541,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M505,154 L 470,154 Q 455,154 447,154 Q 438,154 438,139 L 438,132 Q 438,117 444,117 L 449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,117 L 594,117 Q 602,117 602,102 L 602,71 Q 602,56 617,56 L 623,56 L 638,56" 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='./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_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..f00d31c
--- /dev/null
+++ b/www/syntax/expr.html
@@ -0,0 +1,606 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='./function-arguments.html'>function-arguments</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='./function-arguments.html'>function-arguments</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/function-arguments.html b/www/syntax/function-arguments.html
new file mode 100644
index 0000000..662fe8c
--- /dev/null
+++ b/www/syntax/function-arguments.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: function-arguments</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+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'>function-arguments</h1>
+<div class='imgcontainer'>
+<div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='./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/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..d6059b3
--- /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='./aggregate-function-invocation.html'>aggregate-function-invocation</a>&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='./function-arguments.html'>function-arguments</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..0d27f4b
--- /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_corefunc.html'>lang_corefunc.html</a>&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..8c388c7
--- /dev/null
+++ b/www/syntax/update-stmt-limited.html
@@ -0,0 +1,348 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-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 1047.01">
+<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="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,726 L 24,738" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,753 39,757 39,748" style="fill:rgb(0,0,0)"/>
+<path d="M24,738 L 24,745 Q 24,753 34,753 L 45,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,768L201,768L201,738L50,738Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="126,791 137,786 137,795" style="fill:rgb(0,0,0)"/>
+<path d="M201,753 L 211,753 Q 220,753 220,768 L 220,776 Q 220,791 205,791 L 147,791 L 132,791" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,828 39,833 39,824" style="fill:rgb(0,0,0)"/>
+<path d="M126,791 L 39,791 Q 24,791 24,806 L 24,813 Q 24,828 34,828 L 45,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,843L110,843A15 15 0 0 0 125 828A15 15 0 0 0 110 813L66,813A15 15 0 0 0 50 828A15 15 0 0 0 66 843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="148,828 137,833 137,824" style="fill:rgb(0,0,0)"/>
+<path d="M125,828L142,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,843L167,843A15 15 0 0 0 183 828A15 15 0 0 0 167 813L163,813A15 15 0 0 0 148 828A15 15 0 0 0 163 843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="165" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="219,828 207,833 207,824" style="fill:rgb(0,0,0)"/>
+<path d="M183,828L213,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,843L348,843L348,813L219,813Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M283,881L283,881A15 15 0 0 0 299 866A15 15 0 0 0 283 851L283,851A15 15 0 0 0 268 866A15 15 0 0 0 283 881Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="866" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,949L93,949A15 15 0 0 0 109 934A15 15 0 0 0 93 919L60,919A15 15 0 0 0 45 934A15 15 0 0 0 60 949Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="934" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,934 120,939 120,930" style="fill:rgb(0,0,0)"/>
+<path d="M109,934L126,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,949L181,949L181,919L132,919Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="934" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,964 207,969 207,960" style="fill:rgb(0,0,0)"/>
+<path d="M181,934 L 188,934 Q 196,934 196,949 L 196,949 Q 196,964 204,964 L 213,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,980L285,980A15 15 0 0 0 300 964A15 15 0 0 0 285 949L234,949A15 15 0 0 0 219 964A15 15 0 0 0 234 980Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="964" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,964 312,969 312,960" style="fill:rgb(0,0,0)"/>
+<path d="M300,964L318,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,980L373,980L373,949L323,949Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="964" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,1017A15 15 0 0 0 249 1002A15 15 0 0 0 234 987A15 15 0 0 0 219 1002A15 15 0 0 0 234 1017Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="1002" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,1002 261,1007 261,998" style="fill:rgb(0,0,0)"/>
+<path d="M249,1002L266,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,1017L321,1017L321,987L272,987Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="1002" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,1002 207,1007 207,998" style="fill:rgb(0,0,0)"/>
+<path d="M181,934 L 188,934 Q 196,934 196,949 L 196,987 Q 196,1002 204,1002 L 213,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,866 310,862 310,870" style="fill:rgb(0,0,0)"/>
+<path d="M348,828 L 356,828 Q 363,828 363,843 L 363,851 Q 363,866 348,866 L 319,866 L 304,866" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,866 L 210,866 Q 195,866 195,851 L 195,843 Q 195,828 203,828 L 210,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,934 33,939 33,930" style="fill:rgb(0,0,0)"/>
+<path d="M24,511 L 24,919 Q 24,934 31,934 L 39,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,896 177,892 177,901" style="fill:rgb(0,0,0)"/>
+<path d="M348,828 L 356,828 Q 363,828 363,843 L 363,881 Q 363,896 348,896 L 186,896 L 171,896" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,896 L 39,896 Q 24,896 24,904 L 24,911" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="178,1040 166,1044 166,1036" style="fill:rgb(0,0,0)"/>
+<path d="M24,919 L 24,1025 Q 24,1040 39,1040 L 157,1040 L 172,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,1040 602,1044 602,1036" style="fill:rgb(0,0,0)"/>
+<path d="M178,1040L608,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="1040" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,964 384,969 384,960" style="fill:rgb(0,0,0)"/>
+<path d="M373,964L390,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,1040 435,1044 435,1036" style="fill:rgb(0,0,0)"/>
+<path d="M396,964 L 403,964 Q 411,964 411,979 L 411,1025 Q 411,1040 426,1040 L 426,1040 L 441,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,1002 384,1007 384,998" style="fill:rgb(0,0,0)"/>
+<path d="M321,1002L390,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,1002 L 403,1002 Q 411,1002 411,1010 L 411,1017" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,934 384,939 384,930" style="fill:rgb(0,0,0)"/>
+<path d="M181,934L390,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,934 L 403,934 Q 411,934 411,949 L 411,965 L 411,980" 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..b5b11b3
--- /dev/null
+++ b/www/syntaxdiagrams.html
@@ -0,0 +1,6557 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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:909px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 909.533 223.344">
+<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="657,56 646,60 646,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L652,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M672,71A15 15 0 0 0 688 56A15 15 0 0 0 672 41A15 15 0 0 0 657 56A15 15 0 0 0 672 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="734,86 722,91 722,82" style="fill:rgb(0,0,0)"/>
+<path d="M688,56 L 699,56 Q 711,56 711,71 L 711,71 Q 711,86 719,86 L 728,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,101L846,101L846,71L734,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="790" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M846,86 L 855,86 Q 864,86 864,71 L 864,71 Q 864,56 879,56 L 879,56 L 894,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="903" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="790,56 778,60 778,52" style="fill:rgb(0,0,0)"/>
+<path d="M688,56L784,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="900,56 888,60 888,52" style="fill:rgb(0,0,0)"/>
+<path d="M790,56L894,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="M438,207A15 15 0 0 0 453 192A15 15 0 0 0 438 177A15 15 0 0 0 423 192A15 15 0 0 0 438 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="423,192 412,196 412,188" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,177 Q 254,192 269,192 L 402,192 L 417,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,192 477,196 477,188" style="fill:rgb(0,0,0)"/>
+<path d="M453,192L483,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,192 L 570,192 Q 585,192 600,192 L 605,192 Q 620,192 620,177 L 620,71 Q 620,56 626,56 L 631,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="438,216 427,221 427,212" style="fill:rgb(0,0,0)"/>
+<path d="M326,192 L 392,192 Q 407,192 407,204 Q 407,216 420,216 L 433,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,216 L 453,216 Q 467,216 467,204 Q 467,192 473,192 L 479,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="300,117 289,121 289,112" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 523,56 Q 533,56 533,71 L 533,71 Q 533,86 518,86 L 292,86 Q 277,86 277,101 L 277,102 Q 277,117 286,117 L 294,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M315,132L360,132A15 15 0 0 0 375 117A15 15 0 0 0 360 101L315,101A15 15 0 0 0 300 117A15 15 0 0 0 315 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="392,117 381,121 381,112" style="fill:rgb(0,0,0)"/>
+<path d="M375,117L386,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,132L411,132A15 15 0 0 0 426 117A15 15 0 0 0 411 101L407,101A15 15 0 0 0 392 117A15 15 0 0 0 407 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M426,117L449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,132L585,132L585,101L455,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M520,169A15 15 0 0 0 535 154A15 15 0 0 0 520 139A15 15 0 0 0 505 154A15 15 0 0 0 520 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="520" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="535,154 547,150 547,159" style="fill:rgb(0,0,0)"/>
+<path d="M585,117 L 591,117 Q 597,117 597,132 L 597,139 Q 597,154 582,154 L 556,154 L 541,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="455,117 444,121 444,112" style="fill:rgb(0,0,0)"/>
+<path d="M505,154 L 470,154 Q 455,154 447,154 Q 438,154 438,139 L 438,132 Q 438,117 444,117 L 449,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,117 L 594,117 Q 602,117 602,102 L 602,71 Q 602,56 617,56 L 623,56 L 638,56" 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="#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_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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="#function-arguments">function-arguments</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="#function-arguments">function-arguments</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="function-arguments"></a><h4>function-arguments:</h4><div class='imgcontainer'>
+<div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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="#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="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="#aggregate-function-invocation">aggregate-function-invocation</a>&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="#function-arguments">function-arguments</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_corefunc.html">lang_corefunc.html</a>&nbsp;&nbsp; <a href="lang_expr.html#*funcinexpr">lang_expr.html#*funcinexpr</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 1047.01">
+<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="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,726 L 24,738" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,753 39,757 39,748" style="fill:rgb(0,0,0)"/>
+<path d="M24,738 L 24,745 Q 24,753 34,753 L 45,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,768L201,768L201,738L50,738Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="126,791 137,786 137,795" style="fill:rgb(0,0,0)"/>
+<path d="M201,753 L 211,753 Q 220,753 220,768 L 220,776 Q 220,791 205,791 L 147,791 L 132,791" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,828 39,833 39,824" style="fill:rgb(0,0,0)"/>
+<path d="M126,791 L 39,791 Q 24,791 24,806 L 24,813 Q 24,828 34,828 L 45,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,843L110,843A15 15 0 0 0 125 828A15 15 0 0 0 110 813L66,813A15 15 0 0 0 50 828A15 15 0 0 0 66 843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="148,828 137,833 137,824" style="fill:rgb(0,0,0)"/>
+<path d="M125,828L142,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,843L167,843A15 15 0 0 0 183 828A15 15 0 0 0 167 813L163,813A15 15 0 0 0 148 828A15 15 0 0 0 163 843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="165" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="219,828 207,833 207,824" style="fill:rgb(0,0,0)"/>
+<path d="M183,828L213,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,843L348,843L348,813L219,813Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="828" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M283,881L283,881A15 15 0 0 0 299 866A15 15 0 0 0 283 851L283,851A15 15 0 0 0 268 866A15 15 0 0 0 283 881Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="866" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,949L93,949A15 15 0 0 0 109 934A15 15 0 0 0 93 919L60,919A15 15 0 0 0 45 934A15 15 0 0 0 60 949Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="934" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,934 120,939 120,930" style="fill:rgb(0,0,0)"/>
+<path d="M109,934L126,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,949L181,949L181,919L132,919Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="934" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,964 207,969 207,960" style="fill:rgb(0,0,0)"/>
+<path d="M181,934 L 188,934 Q 196,934 196,949 L 196,949 Q 196,964 204,964 L 213,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,980L285,980A15 15 0 0 0 300 964A15 15 0 0 0 285 949L234,949A15 15 0 0 0 219 964A15 15 0 0 0 234 980Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="964" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,964 312,969 312,960" style="fill:rgb(0,0,0)"/>
+<path d="M300,964L318,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,980L373,980L373,949L323,949Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="964" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,1017A15 15 0 0 0 249 1002A15 15 0 0 0 234 987A15 15 0 0 0 219 1002A15 15 0 0 0 234 1017Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="1002" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,1002 261,1007 261,998" style="fill:rgb(0,0,0)"/>
+<path d="M249,1002L266,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,1017L321,1017L321,987L272,987Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="1002" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,1002 207,1007 207,998" style="fill:rgb(0,0,0)"/>
+<path d="M181,934 L 188,934 Q 196,934 196,949 L 196,987 Q 196,1002 204,1002 L 213,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,866 310,862 310,870" style="fill:rgb(0,0,0)"/>
+<path d="M348,828 L 356,828 Q 363,828 363,843 L 363,851 Q 363,866 348,866 L 319,866 L 304,866" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,866 L 210,866 Q 195,866 195,851 L 195,843 Q 195,828 203,828 L 210,828" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,934 33,939 33,930" style="fill:rgb(0,0,0)"/>
+<path d="M24,511 L 24,919 Q 24,934 31,934 L 39,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,896 177,892 177,901" style="fill:rgb(0,0,0)"/>
+<path d="M348,828 L 356,828 Q 363,828 363,843 L 363,881 Q 363,896 348,896 L 186,896 L 171,896" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,896 L 39,896 Q 24,896 24,904 L 24,911" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="178,1040 166,1044 166,1036" style="fill:rgb(0,0,0)"/>
+<path d="M24,919 L 24,1025 Q 24,1040 39,1040 L 157,1040 L 172,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,1040 602,1044 602,1036" style="fill:rgb(0,0,0)"/>
+<path d="M178,1040L608,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="1040" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,964 384,969 384,960" style="fill:rgb(0,0,0)"/>
+<path d="M373,964L390,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,1040 435,1044 435,1036" style="fill:rgb(0,0,0)"/>
+<path d="M396,964 L 403,964 Q 411,964 411,979 L 411,1025 Q 411,1040 426,1040 L 426,1040 L 441,1040" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,1002 384,1007 384,998" style="fill:rgb(0,0,0)"/>
+<path d="M321,1002L390,1002" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,1002 L 403,1002 Q 411,1002 411,1010 L 411,1017" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,934 384,939 384,930" style="fill:rgb(0,0,0)"/>
+<path d="M181,934L390,934" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,934 L 403,934 Q 411,934 411,949 L 411,965 L 411,980" 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#*funcinexpr">lang_expr.html#*funcinexpr</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=4eaf2fca2d">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/tclsqlite.html b/www/tclsqlite.html
new file mode 100644
index 0000000..83db3a0
--- /dev/null
+++ b/www/tclsqlite.html
@@ -0,0 +1,1310 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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;?<b>-withoutnulls</b>?&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_conflict.html">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 after
+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>
+
+<p>The callback must not do anything that will modify the database connection
+that invoked the update hook such as running queries.</p>
+<a name="preupdate"></a>
+<h3>The "preupdate" method</h3>
+
+
+<p>This method either registers a callback routine that is invoked just
+before each row is modified by an UPDATE, INSERT, or DELETE statement,
+or may perform certain operations related to the impending update.</p>
+
+<p>To register or remove a preupdate callback, use this syntax:
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>preupdate&nbsp;&nbsp;hook</b>&nbsp;&nbsp;<i>?SCRIPT?</i>
+</blockquote>
+When a preupdate callback is registered, then prior to each row modification,
+the callback is run with these arguments:
+<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 original rowid of the row in the table being changed</li>
+<li>The new rowid (if any) of the row in the table being changed</li>
+</ul>
+The callback must not do anything that will modify the database connection
+that invoked the preupdate hook such as running queries.</p>
+
+<p>When the callback is executing, and only then, these preupdate operations
+may be performed by use of the indicated syntax:
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>preupdate&nbsp;&nbsp;count</b><br>
+<i>dbcmd</i>&nbsp;&nbsp;<b>preupdate&nbsp;&nbsp;depth</b><br>
+<i>dbcmd</i>&nbsp;&nbsp;<b>preupdate&nbsp;&nbsp;new</b>&nbsp;&nbsp;<i>INDEX</i><br>
+<i>dbcmd</i>&nbsp;&nbsp;<b>preupdate&nbsp;&nbsp;old</b>&nbsp;&nbsp;<i>INDEX</i><br>
+</blockquote>
+</p>
+
+<p>The <b>count</b> submethod returns the number of columns in the row that is
+being inserted, updated, or deleted.</p>
+<p>The <b>depth</b> submethod returns the update nesting depth. This will be
+0 for a direct insert, update, or delete operation;
+1 for inserts, updates, or deletes invoked by top-level triggers;
+or higher values for changes resulting from trigger-invoked triggers.</p>
+
+<p>The <b>old</b> and <b>new</b> submethods return the selected original
+or changed column value respectively of the row being updated.</p>
+
+<p>Note that the Tcl interface (and underlying SQLite library) must have
+been built with the preprocessor symbol SQLITE_ENABLE_PREUPDATE_HOOK
+defined for the <b>preupdate</b> method to be available.</p>
+<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>
+
+
+
diff --git a/www/tempfiles.html b/www/tempfiles.html
new file mode 100644
index 0000000..ee02817
--- /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=cd7bffb031">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/testing.html b/www/testing.html
new file mode 100644
index 0000000..0b5813b
--- /dev/null
+++ b/www/testing.html
@@ -0,0 +1,1288 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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_and_jfuzz_fuzzers">4.1.3. The dbsqlfuzz and jfuzz fuzzers</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_42_0.html">version 3.42.0</a> (2023-05-16),
+the SQLite library consists of approximately
+155.8 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
+590 times as much
+test code and test scripts -
+92053.1 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.2 KSLOC
+of C code used to create the TCL interface. The test scripts are contained
+in 1390 files totaling
+23.2MB in size. There are
+51445 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
+76.9 MB or 1055.4 KSLOC
+of C code implementing 50362 distinct test cases.
+TH3 tests are heavily parameterized, though, so a full-coverage test runs
+about 2.4 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 about
+248.5 million tests.
+Additional information on TH3 is <a href="th3.html">available separately</a>.</p></li>
+
+<li><p>
+<a name="slt"></a>
+
+The <a href="https://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
+336 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 many other
+small programs that implement specialized tests. Here are a few
+examples:
+</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><li>The "jfuzz" program is a libfuzzer-based fuzzer for
+<a href="json1.html#jsonbx">JSONB</a> inputs to the <a href="json1.html">JSON SQL functions</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
+304.7 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_and_jfuzz_fuzzers"><span>4.1.3. </span>The dbsqlfuzz and jfuzz fuzzers</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.
+
+</p><p>Near the end of January 2024, a second libFuzzer-based tool called
+"jfuzz" come into use. Jfuzz generates corrupt <a href="json1.html#jsonbx">JSONB</a> blobs and feeds
+them into the <a href="json1.html">JSON SQL functions</a> to verify that the JSON functions
+are able to safely and efficiently deal with corrupt binary inputs.
+
+
+<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 1184
+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 code associated with
+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 6754 <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="https://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>
+
+
diff --git a/www/th3.html b/www/th3.html
new file mode 100644
index 0000000..befd5eb
--- /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=7955ba7a18">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/threadsafe.html b/www/threadsafe.html
new file mode 100644
index 0000000..7aae4fe
--- /dev/null
+++ b/www/threadsafe.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>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 <a href="c3ref/sqlite3.html">database connection</a> nor any object derived from database connection,
+such as a <a href="c3ref/stmt.html">prepared statement</a>,
+is used in two or more threads at the same time.
+</p></li>
+
+<li><p><b>Serialized</b>.
+In serialized mode, API calls to affect or use any SQLite <a href="c3ref/sqlite3.html">database connection</a>
+or any object derived from such a database connection
+can be made safely from multiple threads.
+The effect on an individual object is the same as if the API calls had all
+been made in the same order from a single thread. The name "serialized"
+arises from the fact that SQLite uses mutexes to serialize access to each
+object.</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=84a776bde3">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/toc.db b/www/toc.db
new file mode 100644
index 0000000..287cade
--- /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..101cb38
--- /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=dc3b3dd693">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/uintcseq.html b/www/uintcseq.html
new file mode 100644
index 0000000..1de4cdd
--- /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=36e3e7c849">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/undoredo.html b/www/undoredo.html
new file mode 100644
index 0000000..b70dfcf
--- /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=741a21510c">2022-04-18 02:55:50</a> UTC </small></i></p>
+
diff --git a/www/unionvtab.html b/www/unionvtab.html
new file mode 100644
index 0000000..74a6be5
--- /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=46e606d9d8">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/unlock_notify.html b/www/unlock_notify.html
new file mode 100644
index 0000000..1e777b3
--- /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=490fe96500">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/uri.html b/www/uri.html
new file mode 100644
index 0000000..4aaecc8
--- /dev/null
+++ b/www/uri.html
@@ -0,0 +1,382 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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 Windows
+<a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/start">"cmd start"</a>
+or
+<a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.3">"powershell start"</a>,
+or the macOS "open" or Linux "xdg-open" commands.
+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=8b0b8e2fb2">2023-01-02 14:22:42</a> UTC </small></i></p>
+
diff --git a/www/useovernet.html b/www/useovernet.html
new file mode 100644
index 0000000..b81d321
--- /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=9c50e45c37">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..6f108f7
--- /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=df423c1de6">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/version3.html b/www/version3.html
new file mode 100644
index 0000000..1fa24a3
--- /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="https://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>
+
+
diff --git a/www/versionnumbers.html b/www/versionnumbers.html
new file mode 100644
index 0000000..9da5aaa
--- /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=d046ec30f9">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/vfs.html b/www/vfs.html
new file mode 100644
index 0000000..c35951d
--- /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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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>
+
+
diff --git a/www/vtab.html b/www/vtab.html
new file mode 100644
index 0000000..b007ce3
--- /dev/null
+++ b/www/vtab.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>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 class="fancy-toc2"><a href="#the_xintegrity_method">2.22. The xIntegrity 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='x94eee4ec' onclick='hideorshow("x94eee4ec","x299a7cc2")'>hide</button></p>
+ <div id='x299a7cc2' 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*);
+ /* The methods above are in versions 1 through 3 of the sqlite_module object.
+ ** Those below are for version 4 and greater. */
+ int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema,
+ const char *zTabName, int mFlags, char **pzErr);
+};
+</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 4 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="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/series.c">ext/misc/series.c</a>
+file in the <a href="https://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.
+
+<a name="xintegrity"></a>
+
+</p><h2 id="the_xintegrity_method"><span>2.22. </span>The xIntegrity Method</h2>
+
+<p>
+If the iVersion for an sqlite3_module is 4 or more and the xIntegrity
+method is not NULL, then 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 will invoke
+xIntegrity as part of its processing. If the xIntegrity method writes
+an error message string into the fifth parameter, then PRAGMA integrity_check
+will report that error as part of its output. So, in other words, the
+xIntegrity method allows the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to verify
+the integrity of content stored in a virtual table.
+
+</p><p>
+The xIntegrity method is called with five parameters:
+
+</p><ul>
+<li><b>pVTab</b> &rarr; A pointer to the <a href="c3ref/vtab.html">sqlite3_vtab</a> object that is the
+ virtual table being checked.
+</li><li><b>zSchema</b> &rarr; The name of the schema ("main", "temp", etc.) in which
+ the virtual table is defined.
+</li><li><b>zTabName</b> &rarr; The name of the virtual table.
+</li><li><b>mFlags</b> &rarr; A flag to indicate whether this is an "integrity_check"
+ or a "quick_check". Currently, this parameter will always be either 0 or 1,
+ though future versions of SQLite might use other bits of the integer to
+ indicate additional processing options.
+</li><li><b>pzErr</b> &rarr; This parameter points to a "char*" that is initialized
+ to NULL. The xIntegrity() implementation should make *pzErr point to
+ an error string obtained from sqlite3_malloc() or equivalent if it finds
+ any problems.
+</li></ul>
+
+<p>
+The xIntegrity method should normally return SQLITE_OK - even if it finds
+problems in the content of the virtual table. Any other error code
+means that the xIntegrity method itself encountered problems while trying
+to evaluate the virtual table content. So, for example, if the inverted
+index for <a href="fts5.html">FTS5</a> is found to be internally inconsistent, then the xIntegrity
+method should write an appropriate error message into the pzErr parameter
+and return SQLITE_OK. But if the xIntegrity method is unable to complete its
+evaluation of the virtual table content due to running out of memory, then
+it should return SQLITE_NOMEM.
+
+</p><p>
+If an error message is generated,
+space to hold the error message string should be obtained from <a href="c3ref/free.html">sqlite3_malloc64()</a>
+or the equivalent. Ownership of the error message string will pass to the
+SQLite core when xIntegrity returns. The core will make sure that
+<a href="c3ref/free.html">sqlite3_free()</a> is invoked to reclaim the memory which it has finished
+with the error message. The PRAGMA integrity_check command that invokes the
+xIntegrity method does not change the returned error message. The xIntegrity
+method itself should include the name of the virtual table as part of the
+message. The zSchema and zName parameters are provided to make that easier.
+
+</p><p>
+The mFlags parameter is currently a boolean value (either 0 or 1) that indicates
+if the xIntegrity method was called due to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> (mFlags==0)
+or due to <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> (mFlags==1). Generally speaking, the xIntegrity
+method should do whatever validity checking it can accomplish in linear time
+regardless, but only do checking that requires superlinear time if
+<tt>(mFlags&1)==0</tt>. Future versions of SQLite might
+use higher-order bits of the mFlags parameter to indicate additional
+processing options.
+
+</p><p>
+Support for the
+xIntegrity method was added in SQLite version 3.44.0 (2023-11-01).
+In that same release, the xIntegrity method was added to many built-in
+virtual tables, such as <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a>, and <a href="rtree.html">RTREE</a> so that the content
+of those tables will henceforth be automatically checked for consistency
+when <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> is run.
+</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=45e542fb54">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/vtablist.html b/www/vtablist.html
new file mode 100644
index 0000000..bb7ecea
--- /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
+ 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=4d1872fdb2">2023-05-01 21:49:55</a> UTC </small></i></p>
+
diff --git a/www/wal.html b/www/wal.html
new file mode 100644
index 0000000..c416dfc
--- /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=9b1dbf50c3">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/walformat.html b/www/walformat.html
new file mode 100644
index 0000000..54d9cd6
--- /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=2499474847">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/whentouse.html b/www/whentouse.html
new file mode 100644
index 0000000..12f83f2
--- /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>
+
+
diff --git a/www/whyc.html b/www/whyc.html
new file mode 100644
index 0000000..33a6009
--- /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=a3c9b502ed">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..02ef25e
--- /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_descendants_of_a_check_in">2.2. Git makes it difficult to find successors (descendants)
+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_descendants_of_a_check_in"><span>2.2. </span>Git makes it difficult to find successors (descendants)
+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 descendants 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 descendants 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 descendants 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 descendants 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 descendants of a check-in
+from time to time. The fact that descendants 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
+to click forward to the next check-in within a 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="https://www.fossil-scm.org/fossil/doc/trunk/www/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=fbbfef78bd">2023-02-27 02:07:35</a> UTC </small></i></p>
+
diff --git a/www/windowfunctions.html b/www/windowfunctions.html
new file mode 100644
index 0000000..0355a6d
--- /dev/null
+++ b/www/windowfunctions.html
@@ -0,0 +1,7936 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=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 <a href="lang_corefunc.html">scalar functions</a> and
+<a href="lang_aggfunc.html">aggregate functions</a> 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='x44e4cb77' onclick='hideorshow("x44e4cb77","xb008b89c")'>hide</button></p>
+ <div id='xb008b89c' 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='xde55489c' onclick='hideorshow("xde55489c","xab0ca079")'>show</button></p>
+ <div id='xab0ca079' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/function-arguments.html">function-arguments:</a></b>
+<button id='xd8262bee' onclick='hideorshow("xd8262bee","xc4e3ffe6")'>show</button></p>
+ <div id='xc4e3ffe6' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x98ae4005' onclick='hideorshow("x98ae4005","x0a87bd5c")'>show</button></p>
+ <div id='x0a87bd5c' 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/literal-value.html">literal-value:</a></b>
+<button id='x4a625953' onclick='hideorshow("x4a625953","x9125574b")'>show</button></p>
+ <div id='x9125574b' 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='xb0bfa350' onclick='hideorshow("xb0bfa350","x3b0338ed")'>show</button></p>
+ <div id='x3b0338ed' 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='x2961ee84' onclick='hideorshow("x2961ee84","x04891692")'>hide</button></p>
+ <div id='x04891692' 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='xcf7c2f66' onclick='hideorshow("xcf7c2f66","x4da0c1d5")'>show</button></p>
+ <div id='x4da0c1d5' 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='xd499344a' onclick='hideorshow("xd499344a","x86451066")'>show</button></p>
+ <div id='x86451066' 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='x3e9b2388' onclick='hideorshow("x3e9b2388","x1db2093e")'>show</button></p>
+ <div id='x1db2093e' 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='x22e81d6a' onclick='hideorshow("x22e81d6a","x4c1ab371")'>show</button></p>
+ <div id='x4c1ab371' 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='x89950653' onclick='hideorshow("x89950653","xceff8d96")'>show</button></p>
+ <div id='xceff8d96' 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='x5ecb3f06' onclick='hideorshow("x5ecb3f06","x25642fa8")'>show</button></p>
+ <div id='x25642fa8' 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='x9f0e73e3' onclick='hideorshow("x9f0e73e3","x105195d3")'>show</button></p>
+ <div id='x105195d3' 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='xfa31f036' onclick='hideorshow("xfa31f036","x58a596b4")'>show</button></p>
+ <div id='x58a596b4' 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='x50e5887c' onclick='hideorshow("x50e5887c","x3985c24c")'>show</button></p>
+ <div id='x3985c24c' 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='x0857d62f' onclick='hideorshow("x0857d62f","x094cf564")'>show</button></p>
+ <div id='x094cf564' 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='xee1e290d' onclick='hideorshow("xee1e290d","x1d3f9721")'>show</button></p>
+ <div id='x1d3f9721' 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='xcf057e45' onclick='hideorshow("xcf057e45","xdd8e2cf1")'>show</button></p>
+ <div id='xdd8e2cf1' 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='xbfbe88e9' onclick='hideorshow("xbfbe88e9","x27d3cd5a")'>show</button></p>
+ <div id='x27d3cd5a' 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='x42666c57' onclick='hideorshow("x42666c57","x3adc8ba7")'>hide</button></p>
+ <div id='x3adc8ba7' 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='x792b9975' onclick='hideorshow("x792b9975","x477af11c")'>hide</button></p>
+ <div id='x477af11c' 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='x3af3f931' onclick='hideorshow("x3af3f931","xc7f772f6")'>hide</button></p>
+ <div id='xc7f772f6' 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='xe0fe7824' onclick='hideorshow("xe0fe7824","x537a9e34")'>show</button></p>
+ <div id='x537a9e34' 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='x0199aef6' onclick='hideorshow("x0199aef6","x56b9bd0c")'>hide</button></p>
+ <div id='x56b9bd0c' 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='xac4aee76' onclick='hideorshow("xac4aee76","x789c4ff5")'>show</button></p>
+ <div id='x789c4ff5' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" 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='x6e5adba8' onclick='hideorshow("x6e5adba8","xdbb0e8d4")'>show</button></p>
+ <div id='xdbb0e8d4' 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/function-arguments.html">function-arguments:</a></b>
+<button id='x62f7c893' onclick='hideorshow("x62f7c893","x2e28c5e5")'>show</button></p>
+ <div id='x2e28c5e5' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='xa4e5c48b' onclick='hideorshow("xa4e5c48b","xf02c44ea")'>show</button></p>
+ <div id='xf02c44ea' 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/literal-value.html">literal-value:</a></b>
+<button id='x7c347ea1' onclick='hideorshow("x7c347ea1","x94bc3bbf")'>show</button></p>
+ <div id='x94bc3bbf' 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='x52470a2d' onclick='hideorshow("x52470a2d","x792b8a02")'>show</button></p>
+ <div id='x792b8a02' 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='x85933096' onclick='hideorshow("x85933096","x08cc4720")'>show</button></p>
+ <div id='x08cc4720' 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='x78ec9ddf' onclick='hideorshow("x78ec9ddf","xaaf6e4dd")'>show</button></p>
+ <div id='xaaf6e4dd' 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='x55ed670b' onclick='hideorshow("x55ed670b","x8d102754")'>show</button></p>
+ <div id='x8d102754' 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='xb5f243c6' onclick='hideorshow("xb5f243c6","x9ff2c574")'>show</button></p>
+ <div id='x9ff2c574' 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='x91d419e5' onclick='hideorshow("x91d419e5","x5d685770")'>show</button></p>
+ <div id='x5d685770' 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='xefb9c824' onclick='hideorshow("xefb9c824","x3aab8e3c")'>show</button></p>
+ <div id='x3aab8e3c' 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='x1bff3899' onclick='hideorshow("x1bff3899","x2354f933")'>show</button></p>
+ <div id='x2354f933' 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='xd89646f0' onclick='hideorshow("xd89646f0","x06401d72")'>show</button></p>
+ <div id='x06401d72' 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='xfb6a9b78' onclick='hideorshow("xfb6a9b78","xad22eab0")'>show</button></p>
+ <div id='xad22eab0' 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='xdb83a7b9' onclick='hideorshow("xdb83a7b9","xcca4ae9d")'>show</button></p>
+ <div id='xcca4ae9d' 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='x5c9faa54' onclick='hideorshow("x5c9faa54","x02ce5f50")'>show</button></p>
+ <div id='x02ce5f50' 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='xb0d1461b' onclick='hideorshow("xb0d1461b","xa8f015e1")'>show</button></p>
+ <div id='xa8f015e1' 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='x187bb7f1' onclick='hideorshow("x187bb7f1","x2230c8ce")'>show</button></p>
+ <div id='x2230c8ce' 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='x2e27fd13' onclick='hideorshow("x2e27fd13","x3f3bc4fd")'>show</button></p>
+ <div id='x3f3bc4fd' 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&nbsp;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='x9c6ef48a' onclick='hideorshow("x9c6ef48a","x4dc11b33")'>hide</button></p>
+ <div id='x4dc11b33' 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='xdc983a44' onclick='hideorshow("xdc983a44","x697d9515")'>show</button></p>
+ <div id='x697d9515' 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 1068.77">
+<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,245L162,245A15 15 0 0 0 177 230A15 15 0 0 0 162 215L60,215A15 15 0 0 0 45 230A15 15 0 0 0 60 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,230 183,234 183,226" style="fill:rgb(0,0,0)"/>
+<path d="M177,230L188,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,245A15 15 0 0 0 224 230A15 15 0 0 0 209 215A15 15 0 0 0 194 230A15 15 0 0 0 209 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,230 249,234 249,226" style="fill:rgb(0,0,0)"/>
+<path d="M224,230L255,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,245L437,245L437,215L260,215Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="230" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-arguments</text>
+<polygon points="473,230 461,234 461,226" style="fill:rgb(0,0,0)"/>
+<path d="M437,230L467,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,245A15 15 0 0 0 503 230A15 15 0 0 0 488 215A15 15 0 0 0 473 230A15 15 0 0 0 488 245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="230" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="541,260 529,265 529,256" style="fill:rgb(0,0,0)"/>
+<path d="M503,230 L 510,230 Q 518,230 518,245 L 518,245 Q 518,260 527,260 L 535,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,275L653,275L653,245L541,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="691,230 680,234 680,226" style="fill:rgb(0,0,0)"/>
+<path d="M653,260 L 661,260 Q 668,260 668,245 L 668,245 Q 668,230 677,230 L 685,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="729,260 718,265 718,256" style="fill:rgb(0,0,0)"/>
+<path d="M691,230 L 699,230 Q 706,230 706,245 L 706,245 Q 706,260 715,260 L 723,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,275L837,275L837,245L729,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="783" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,260 905,265 905,256" style="fill:rgb(0,0,0)"/>
+<path d="M837,260L910,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,260 L 924,260 Q 931,260 931,253 L 931,245" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,230 33,234 33,226" style="fill:rgb(0,0,0)"/>
+<path d="M24,215 L 24,222 Q 24,230 31,230 L 39,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,230 585,234 585,226" style="fill:rgb(0,0,0)"/>
+<path d="M503,230L591,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,230L680,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,230 905,234 905,226" style="fill:rgb(0,0,0)"/>
+<path d="M691,230L910,230" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,230 L 924,230 Q 931,230 931,222 L 931,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,321A15 15 0 0 0 75 306A15 15 0 0 0 60 290A15 15 0 0 0 45 306A15 15 0 0 0 60 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,306 100,310 100,301" style="fill:rgb(0,0,0)"/>
+<path d="M75,306L105,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,321L160,321L160,290L111,290Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="306" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,306 185,310 185,301" style="fill:rgb(0,0,0)"/>
+<path d="M160,306L191,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,321A15 15 0 0 0 227 306A15 15 0 0 0 211 290A15 15 0 0 0 196 306A15 15 0 0 0 211 321Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="306" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,306 905,310 905,301" style="fill:rgb(0,0,0)"/>
+<path d="M227,306L910,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,306 L 924,306 Q 931,306 931,298 L 931,291" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,306 33,310 33,301" style="fill:rgb(0,0,0)"/>
+<path d="M24,290 L 24,298 Q 24,306 31,306 L 39,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,284A15 15 0 0 0 151 269A15 15 0 0 0 136 254A15 15 0 0 0 121 269A15 15 0 0 0 136 284Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="269" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,269 162,265 162,274" style="fill:rgb(0,0,0)"/>
+<path d="M160,306 L 168,306 Q 175,306 175,291 L 175,284 Q 175,269 166,269 L 157,269" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,269 L 103,269 Q 88,269 88,284 L 88,291 Q 88,306 96,306 L 103,306" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,358L88,358A15 15 0 0 0 103 343A15 15 0 0 0 88 328L60,328A15 15 0 0 0 45 343A15 15 0 0 0 60 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,343 114,348 114,339" style="fill:rgb(0,0,0)"/>
+<path d="M103,343L120,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,358A15 15 0 0 0 156 343A15 15 0 0 0 141 328A15 15 0 0 0 126 343A15 15 0 0 0 141 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,343 168,348 168,339" style="fill:rgb(0,0,0)"/>
+<path d="M156,343L173,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,358L228,358L228,328L179,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,343 240,348 240,339" style="fill:rgb(0,0,0)"/>
+<path d="M228,343L246,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,358L271,358A15 15 0 0 0 286 343A15 15 0 0 0 271 328L267,328A15 15 0 0 0 251 343A15 15 0 0 0 267 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,343 297,348 297,339" style="fill:rgb(0,0,0)"/>
+<path d="M286,343L303,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,358L408,358L408,328L309,328Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="343" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,343 419,348 419,339" style="fill:rgb(0,0,0)"/>
+<path d="M408,343L425,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,358A15 15 0 0 0 461 343A15 15 0 0 0 446 328A15 15 0 0 0 431 343A15 15 0 0 0 446 358Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="343" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,343 905,348 905,339" style="fill:rgb(0,0,0)"/>
+<path d="M461,343L910,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,343 L 924,343 Q 931,343 931,336 L 931,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,343 33,348 33,339" style="fill:rgb(0,0,0)"/>
+<path d="M24,328 L 24,336 Q 24,343 31,343 L 39,343" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,396L94,396L94,366L45,366Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,381 106,385 106,377" style="fill:rgb(0,0,0)"/>
+<path d="M94,381L111,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,396L196,396A15 15 0 0 0 211 381A15 15 0 0 0 196 366L132,366A15 15 0 0 0 117 381A15 15 0 0 0 132 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,381 223,385 223,377" style="fill:rgb(0,0,0)"/>
+<path d="M211,381L229,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,396L355,396A15 15 0 0 0 370 381A15 15 0 0 0 355 366L250,366A15 15 0 0 0 234 381A15 15 0 0 0 250 396Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="381" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,381 905,385 905,377" style="fill:rgb(0,0,0)"/>
+<path d="M370,381L910,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,381 L 924,381 Q 931,381 931,374 L 931,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,381 33,385 33,377" style="fill:rgb(0,0,0)"/>
+<path d="M24,366 L 24,374 Q 24,381 31,381 L 39,381" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,434L94,434L94,404L45,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,419 119,423 119,415" style="fill:rgb(0,0,0)"/>
+<path d="M94,419L124,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,434L165,434A15 15 0 0 0 180 419A15 15 0 0 0 165 404L145,404A15 15 0 0 0 130 419A15 15 0 0 0 145 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,419 223,423 223,415" style="fill:rgb(0,0,0)"/>
+<path d="M180,419L229,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,434L273,434A15 15 0 0 0 288 419A15 15 0 0 0 273 404L250,404A15 15 0 0 0 234 419A15 15 0 0 0 250 434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,472L279,472A15 15 0 0 0 294 457A15 15 0 0 0 279 442L250,442A15 15 0 0 0 234 457A15 15 0 0 0 250 472Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="457" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,510L302,510A15 15 0 0 0 317 495A15 15 0 0 0 302 479L250,479A15 15 0 0 0 234 495A15 15 0 0 0 250 510Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,547L297,547A15 15 0 0 0 313 532A15 15 0 0 0 297 517L250,517A15 15 0 0 0 234 532A15 15 0 0 0 250 547Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="532" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,510L427,510L427,479L378,479Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="495" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,434L427,434L427,404L378,404Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="419" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,449 454,454 454,445" style="fill:rgb(0,0,0)"/>
+<path d="M427,419 L 435,419 Q 442,419 442,434 L 442,434 Q 442,449 451,449 L 460,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,464L532,464A15 15 0 0 0 547 449A15 15 0 0 0 532 434L480,434A15 15 0 0 0 465 449A15 15 0 0 0 480 464Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,449 559,454 559,445" style="fill:rgb(0,0,0)"/>
+<path d="M547,449L565,449" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,464L620,464L620,434L570,434Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="449" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,419 659,423 659,415" style="fill:rgb(0,0,0)"/>
+<path d="M620,449 L 627,449 Q 635,449 635,434 L 635,434 Q 635,419 650,419 L 650,419 L 665,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,419 905,423 905,415" style="fill:rgb(0,0,0)"/>
+<path d="M671,419L910,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,419 L 924,419 Q 931,419 931,411 L 931,404" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,419 33,423 33,415" style="fill:rgb(0,0,0)"/>
+<path d="M24,404 L 24,411 Q 24,419 31,419 L 39,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,419 L 108,419 Q 115,419 115,434 L 115,434 Q 115,449 130,449 L 177,449 Q 192,449 192,434 L 192,434 Q 192,419 199,419 L 207,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,532 223,537 223,528" style="fill:rgb(0,0,0)"/>
+<path d="M196,419 L 204,419 Q 211,419 211,434 L 211,517 Q 211,532 220,532 L 229,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,457 223,461 223,452" style="fill:rgb(0,0,0)"/>
+<path d="M211,442 L 211,449 Q 211,457 220,457 L 229,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,495 223,499 223,490" style="fill:rgb(0,0,0)"/>
+<path d="M211,479 L 211,487 Q 211,495 220,495 L 229,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,419 367,423 367,415" style="fill:rgb(0,0,0)"/>
+<path d="M288,419L372,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,532 329,537 329,528" style="fill:rgb(0,0,0)"/>
+<path d="M313,532L334,532" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,495 367,499 367,490" style="fill:rgb(0,0,0)"/>
+<path d="M340,532 L 348,532 Q 355,532 355,517 L 355,510 Q 355,495 364,495 L 372,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,495 329,499 329,490" style="fill:rgb(0,0,0)"/>
+<path d="M317,495L334,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,495L378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,457 329,461 329,452" style="fill:rgb(0,0,0)"/>
+<path d="M294,457L334,457" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,457 L 348,457 Q 355,457 355,472 L 355,480 Q 355,495 367,495 L 378,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,419 495,423 495,415" style="fill:rgb(0,0,0)"/>
+<path d="M427,419L501,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,419L659,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,495 536,499 536,490" style="fill:rgb(0,0,0)"/>
+<path d="M427,495L542,495" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,495 L 656,495 Q 671,495 671,480 L 671,434 Q 671,419 686,419 L 692,419 L 707,419" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,585L94,585L94,555L45,555Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,570 119,574 119,566" style="fill:rgb(0,0,0)"/>
+<path d="M94,570L124,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,585L194,585A15 15 0 0 0 209 570A15 15 0 0 0 194 555L145,555A15 15 0 0 0 130 570A15 15 0 0 0 145 585Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="570" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,570 905,574 905,566" style="fill:rgb(0,0,0)"/>
+<path d="M209,570L910,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,570 L 924,570 Q 931,570 931,563 L 931,555" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,570 33,574 33,566" style="fill:rgb(0,0,0)"/>
+<path d="M24,555 L 24,563 Q 24,570 31,570 L 39,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,623L215,623A15 15 0 0 0 230 608A15 15 0 0 0 215 593L145,593A15 15 0 0 0 130 608A15 15 0 0 0 145 623Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="608" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,661L165,661A15 15 0 0 0 180 646A15 15 0 0 0 165 631L145,631A15 15 0 0 0 130 646A15 15 0 0 0 145 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,646 192,650 192,641" style="fill:rgb(0,0,0)"/>
+<path d="M180,646L198,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,661L250,661A15 15 0 0 0 265 646A15 15 0 0 0 250 631L219,631A15 15 0 0 0 203 646A15 15 0 0 0 219 661Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="646" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,646 276,650 276,641" style="fill:rgb(0,0,0)"/>
+<path d="M265,646L282,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,570 327,574 327,566" style="fill:rgb(0,0,0)"/>
+<path d="M288,646 L 295,646 Q 303,646 303,631 L 303,585 Q 303,570 318,570 L 318,570 L 333,570" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,608 276,612 276,604" style="fill:rgb(0,0,0)"/>
+<path d="M230,608L282,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,608 L 295,608 Q 303,608 303,600 L 303,593" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,646 119,650 119,641" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,631 Q 109,646 117,646 L 124,646" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,608 119,612 119,604" style="fill:rgb(0,0,0)"/>
+<path d="M94,570 L 102,570 Q 109,570 109,585 L 109,593 Q 109,608 117,608 L 124,608" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,699L94,699L94,668L45,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,684 106,688 106,679" style="fill:rgb(0,0,0)"/>
+<path d="M94,684L111,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,699A15 15 0 0 0 147 684A15 15 0 0 0 132 668A15 15 0 0 0 117 684A15 15 0 0 0 132 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,684 172,688 172,679" style="fill:rgb(0,0,0)"/>
+<path d="M147,684L178,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,699L219,699A15 15 0 0 0 234 684A15 15 0 0 0 219 668L198,668A15 15 0 0 0 183 684A15 15 0 0 0 198 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,684 258,688 258,679" style="fill:rgb(0,0,0)"/>
+<path d="M234,684L264,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,684 294,688 294,679" style="fill:rgb(0,0,0)"/>
+<path d="M270,684L300,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,699L389,699A15 15 0 0 0 404 684A15 15 0 0 0 389 668L321,668A15 15 0 0 0 306 684A15 15 0 0 0 321 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,684 429,688 429,679" style="fill:rgb(0,0,0)"/>
+<path d="M404,684L434,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,699L490,699A15 15 0 0 0 505 684A15 15 0 0 0 490 668L455,668A15 15 0 0 0 440 684A15 15 0 0 0 455 699Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,684 530,688 530,679" style="fill:rgb(0,0,0)"/>
+<path d="M505,684L535,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,699L590,699L590,668L541,668Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="684" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,684 905,688 905,679" style="fill:rgb(0,0,0)"/>
+<path d="M590,684L910,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,684 L 924,684 Q 931,684 931,676 L 931,669" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,684 33,688 33,679" style="fill:rgb(0,0,0)"/>
+<path d="M24,668 L 24,676 Q 24,684 31,684 L 39,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,684 L 156,684 Q 164,684 164,696 Q 164,708 179,708 L 230,708 Q 245,708 245,696 Q 245,684 253,684 L 260,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,684 L 279,684 Q 286,684 286,696 Q 286,708 301,708 L 502,708 Q 517,708 517,696 Q 517,684 524,684 L 532,684" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,744L94,744L94,714L45,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,729 119,733 119,725" style="fill:rgb(0,0,0)"/>
+<path d="M94,729L124,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,744L165,744A15 15 0 0 0 180 729A15 15 0 0 0 165 714L145,714A15 15 0 0 0 130 729A15 15 0 0 0 145 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,729 205,733 205,725" style="fill:rgb(0,0,0)"/>
+<path d="M180,729L211,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,744L304,744A15 15 0 0 0 319 729A15 15 0 0 0 304 714L232,714A15 15 0 0 0 216 729A15 15 0 0 0 232 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,729 331,733 331,725" style="fill:rgb(0,0,0)"/>
+<path d="M319,729L336,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,744L391,744L391,714L342,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,729 403,733 403,725" style="fill:rgb(0,0,0)"/>
+<path d="M391,729L409,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,744L450,744A15 15 0 0 0 465 729A15 15 0 0 0 450 714L430,714A15 15 0 0 0 414 729A15 15 0 0 0 430 744Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,729 477,733 477,725" style="fill:rgb(0,0,0)"/>
+<path d="M465,729L483,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,744L538,744L538,714L488,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,729 905,733 905,725" style="fill:rgb(0,0,0)"/>
+<path d="M538,729L910,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,729 L 924,729 Q 931,729 931,721 L 931,714" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,729 33,733 33,725" style="fill:rgb(0,0,0)"/>
+<path d="M24,714 L 24,721 Q 24,729 31,729 L 39,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,729 L 103,729 Q 110,729 110,741 Q 110,753 125,753 L 177,753 Q 192,753 192,741 Q 192,729 199,729 L 207,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,797L94,797L94,767L45,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,782 119,786 119,778" style="fill:rgb(0,0,0)"/>
+<path d="M94,782L124,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,797L165,797A15 15 0 0 0 180 782A15 15 0 0 0 165 767L145,767A15 15 0 0 0 130 782A15 15 0 0 0 145 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,782 205,786 205,778" style="fill:rgb(0,0,0)"/>
+<path d="M180,782L211,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,797L234,797A15 15 0 0 0 249 782A15 15 0 0 0 234 767L232,767A15 15 0 0 0 216 782A15 15 0 0 0 232 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,782 273,786 273,778" style="fill:rgb(0,0,0)"/>
+<path d="M249,782L279,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,797A15 15 0 0 0 315 782A15 15 0 0 0 300 767A15 15 0 0 0 285 782A15 15 0 0 0 300 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,782 340,786 340,778" style="fill:rgb(0,0,0)"/>
+<path d="M315,782L345,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,797L455,797L455,767L351,767Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="782" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,782 480,786 480,778" style="fill:rgb(0,0,0)"/>
+<path d="M455,782L486,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,797A15 15 0 0 0 522 782A15 15 0 0 0 507 767A15 15 0 0 0 491 782A15 15 0 0 0 507 797Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="782" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,782 905,786 905,778" style="fill:rgb(0,0,0)"/>
+<path d="M522,782L910,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,782 L 924,782 Q 931,782 931,774 L 931,767" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,782 33,786 33,778" style="fill:rgb(0,0,0)"/>
+<path d="M24,767 L 24,774 Q 24,782 31,782 L 39,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,782 L 103,782 Q 110,782 110,794 Q 110,806 125,806 L 177,806 Q 192,806 192,794 Q 192,782 199,782 L 207,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,782 L 324,782 Q 332,782 332,770 Q 332,758 347,758 L 452,758 Q 467,758 467,770 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,835L428,835L428,805L379,805Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="820" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,820 367,824 367,815" style="fill:rgb(0,0,0)"/>
+<path d="M317,782 L 324,782 Q 332,782 332,797 L 332,805 Q 332,820 347,820 L 358,820 L 373,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,820 L 452,820 Q 467,820 467,805 L 467,797 Q 467,782 475,782 L 482,782" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,873A15 15 0 0 0 418 857A15 15 0 0 0 403 842A15 15 0 0 0 388 857A15 15 0 0 0 403 873Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="857" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,857 430,853 430,862" style="fill:rgb(0,0,0)"/>
+<path d="M428,820 L 435,820 Q 443,820 443,835 L 443,842 Q 443,857 434,857 L 424,857" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,857 L 371,857 Q 356,857 356,842 L 356,835 Q 356,820 363,820 L 371,820" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,925L396,925A15 15 0 0 0 412 910A15 15 0 0 0 396 895L300,895A15 15 0 0 0 285 910A15 15 0 0 0 300 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,910 417,915 417,906" style="fill:rgb(0,0,0)"/>
+<path d="M412,910L423,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,925A15 15 0 0 0 459 910A15 15 0 0 0 444 895A15 15 0 0 0 429 910A15 15 0 0 0 444 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,910 502,915 502,906" style="fill:rgb(0,0,0)"/>
+<path d="M459,910L507,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,925L627,925A15 15 0 0 0 642 910A15 15 0 0 0 627 895L528,895A15 15 0 0 0 513 910A15 15 0 0 0 528 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,910 647,915 647,906" style="fill:rgb(0,0,0)"/>
+<path d="M642,910L653,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,925A15 15 0 0 0 689 910A15 15 0 0 0 674 895A15 15 0 0 0 659 910A15 15 0 0 0 674 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,910 723,915 723,906" style="fill:rgb(0,0,0)"/>
+<path d="M689,910L728,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,925L783,925L783,895L734,895Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="910" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,910 817,915 817,906" style="fill:rgb(0,0,0)"/>
+<path d="M783,910L823,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,925A15 15 0 0 0 859 910A15 15 0 0 0 844 895A15 15 0 0 0 828 910A15 15 0 0 0 844 925Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="910" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,910 905,915 905,906" style="fill:rgb(0,0,0)"/>
+<path d="M859,910L910,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,910 L 924,910 Q 931,910 931,903 L 931,895" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,865L603,865A15 15 0 0 0 619 850A15 15 0 0 0 603 835L528,835A15 15 0 0 0 513 850A15 15 0 0 0 528 865Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="850" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,850 905,854 905,846" style="fill:rgb(0,0,0)"/>
+<path d="M619,850L910,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,850 L 924,850 Q 931,850 931,842 L 931,835" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,850 502,854 502,846" style="fill:rgb(0,0,0)"/>
+<path d="M475,910 L 483,910 Q 490,910 490,895 L 490,865 Q 490,850 499,850 L 507,850" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,892A15 15 0 0 0 774 877A15 15 0 0 0 759 862A15 15 0 0 0 744 877A15 15 0 0 0 759 892Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="877" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,877 785,873 785,881" style="fill:rgb(0,0,0)"/>
+<path d="M783,910 L 791,910 Q 798,910 798,895 L 798,892 Q 798,877 789,877 L 780,877" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,877 L 726,877 Q 711,877 711,892 L 711,895 Q 711,910 719,910 L 726,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,910 L 697,910 Q 704,910 704,921 Q 704,932 719,932 L 790,932 Q 805,932 805,921 Q 805,910 813,910 L 820,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,910 273,915 273,906" style="fill:rgb(0,0,0)"/>
+<path d="M249,782 L 256,782 Q 264,782 264,797 L 264,895 Q 264,910 272,910 L 279,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,882 412,886 412,877" style="fill:rgb(0,0,0)"/>
+<path d="M264,867 L 264,874 Q 264,882 279,882 L 402,882 L 417,882" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,882 L 456,882 Q 471,882 471,896 Q 471,910 478,910 L 486,910" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,971L80,971A15 15 0 0 0 95 956A15 15 0 0 0 80 941L60,941A15 15 0 0 0 45 956A15 15 0 0 0 60 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,956 120,960 120,951" style="fill:rgb(0,0,0)"/>
+<path d="M95,956L125,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,971L191,971A15 15 0 0 0 206 956A15 15 0 0 0 191 941L146,941A15 15 0 0 0 131 956A15 15 0 0 0 146 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,956 231,960 231,951" style="fill:rgb(0,0,0)"/>
+<path d="M206,956L236,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,971A15 15 0 0 0 272 956A15 15 0 0 0 257 941A15 15 0 0 0 242 956A15 15 0 0 0 257 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,956 284,960 284,951" style="fill:rgb(0,0,0)"/>
+<path d="M272,956L290,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,971L400,971L400,941L295,941Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="956" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,956 411,960 411,951" style="fill:rgb(0,0,0)"/>
+<path d="M400,956L417,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,971A15 15 0 0 0 453 956A15 15 0 0 0 438 941A15 15 0 0 0 423 956A15 15 0 0 0 438 971Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="956" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,956 905,960 905,951" style="fill:rgb(0,0,0)"/>
+<path d="M453,956L910,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,956 L 924,956 Q 931,956 931,948 L 931,941" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,956 33,960 33,951" style="fill:rgb(0,0,0)"/>
+<path d="M24,941 L 24,948 Q 24,956 31,956 L 39,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,929 59,934 59,925" style="fill:rgb(0,0,0)"/>
+<path d="M24,914 L 24,922 Q 24,929 39,929 L 49,929 L 64,929" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,929 L 201,929 Q 216,929 216,943 Q 216,956 223,956 L 231,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,929 L 101,929 Q 108,929 108,943 Q 108,956 116,956 L 123,956" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1009L89,1009A15 15 0 0 0 104 994A15 15 0 0 0 89 978L60,978A15 15 0 0 0 45 994A15 15 0 0 0 60 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,994 128,998 128,989" style="fill:rgb(0,0,0)"/>
+<path d="M104,994L134,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1009L189,1009L189,978L140,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,994 232,998 232,989" style="fill:rgb(0,0,0)"/>
+<path d="M189,994L237,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1009L298,1009A15 15 0 0 0 313 994A15 15 0 0 0 298 978L258,978A15 15 0 0 0 243 994A15 15 0 0 0 258 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,994 324,998 324,989" style="fill:rgb(0,0,0)"/>
+<path d="M313,994L330,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1009L385,1009L385,978L336,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,994 396,998 396,989" style="fill:rgb(0,0,0)"/>
+<path d="M385,994L402,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1009L456,1009A15 15 0 0 0 472 994A15 15 0 0 0 456 978L423,978A15 15 0 0 0 408 994A15 15 0 0 0 423 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,994 483,998 483,989" style="fill:rgb(0,0,0)"/>
+<path d="M472,994L489,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1009L544,1009L544,978L495,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,994 604,998 604,989" style="fill:rgb(0,0,0)"/>
+<path d="M544,994L610,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1009L658,1009A15 15 0 0 0 673 994A15 15 0 0 0 658 978L631,978A15 15 0 0 0 616 994A15 15 0 0 0 631 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,994 685,998 685,989" style="fill:rgb(0,0,0)"/>
+<path d="M673,994L691,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1009L746,1009L746,978L696,978Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,994 770,998 770,989" style="fill:rgb(0,0,0)"/>
+<path d="M746,994L776,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1009L818,1009A15 15 0 0 0 833 994A15 15 0 0 0 818 978L797,978A15 15 0 0 0 782 994A15 15 0 0 0 797 1009Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="994" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,994 905,998 905,989" style="fill:rgb(0,0,0)"/>
+<path d="M833,994L910,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,994 L 924,994 Q 931,994 931,986 L 931,979" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,994 33,998 33,989" style="fill:rgb(0,0,0)"/>
+<path d="M24,978 L 24,986 Q 24,994 31,994 L 39,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,994 L 111,994 Q 119,994 119,1007 Q 119,1021 134,1021 L 186,1021 Q 201,1021 201,1007 Q 201,994 208,994 L 216,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1021 372,1016 372,1025" style="fill:rgb(0,0,0)"/>
+<path d="M544,994 L 551,994 Q 559,994 559,1007 Q 559,1021 544,1021 L 381,1021 L 366,1021" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1021 L 235,1021 Q 220,1021 220,1007 Q 220,994 227,994 L 235,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,994 L 585,994 Q 593,994 593,1007 Q 593,1021 608,1021 L 742,1021 Q 757,1021 757,1007 Q 757,994 765,994 L 772,994" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1066L173,1066L173,1036L45,1036Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1051" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1051 905,1055 905,1047" style="fill:rgb(0,0,0)"/>
+<path d="M173,1051L910,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1051 L 924,1051 Q 931,1051 931,1036 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,1051 33,1055 33,1047" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1036 Q 24,1051 31,1051 L 39,1051" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/function-arguments.html">function-arguments:</a></b>
+<button id='x7f57e866' onclick='hideorshow("x7f57e866","xd7a5c5d5")'>show</button></p>
+ <div id='xd7a5c5d5' style='display:none;' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.566 223.344">
+<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);" />
+<polygon points="66,26 55,30 55,22" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,41 L 43,41 Q 43,26 52,26 L 61,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M82,41L150,41A15 15 0 0 0 165 26L165,26A15 15 0 0 0 150 11L82,11A15 15 0 0 0 66 26L66,26A15 15 0 0 0 82 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="183,26 171,30 171,22" style="fill:rgb(0,0,0)"/>
+<path d="M165,26L177,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M183,26 L 189,26 Q 194,26 194,41 L 194,41 Q 194,56 203,56 L 212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M218,56L248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,71L303,71L303,41L254,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="447,56 435,60 435,52" style="fill:rgb(0,0,0)"/>
+<path d="M303,56L441,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="116,56 104,60 104,52" style="fill:rgb(0,0,0)"/>
+<path d="M32,56L110,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,56 206,60 206,52" style="fill:rgb(0,0,0)"/>
+<path d="M116,56L212,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,32A15 15 0 0 0 293 17A15 15 0 0 0 278 2A15 15 0 0 0 263 17A15 15 0 0 0 278 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,17 305,12 305,21" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 314,56 Q 326,56 326,41 L 326,32 Q 326,17 312,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="254,56 242,60 242,52" style="fill:rgb(0,0,0)"/>
+<path d="M263,17 L 245,17 Q 230,17 230,32 L 230,41 Q 230,56 239,56 L 248,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,207A15 15 0 0 0 243 192L243,192A15 15 0 0 0 228 177A15 15 0 0 0 213 192L213,192A15 15 0 0 0 228 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="192" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="213,192 201,196 201,188" style="fill:rgb(0,0,0)"/>
+<path d="M32,56 L 38,56 Q 43,56 43,71 L 43,177 Q 43,192 58,192 L 192,192 L 207,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,192 267,196 267,188" style="fill:rgb(0,0,0)"/>
+<path d="M243,192L272,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,192 L 360,192 Q 375,192 390,192 L 394,192 Q 409,192 409,177 L 409,71 Q 409,56 415,56 L 421,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="228,216 216,221 216,212" style="fill:rgb(0,0,0)"/>
+<path d="M116,192 L 181,192 Q 196,192 196,204 Q 196,216 209,216 L 222,216" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,216 L 242,216 Q 257,216 257,204 Q 257,192 262,192 L 268,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="90,117 78,121 78,112" style="fill:rgb(0,0,0)"/>
+<path d="M303,56 L 313,56 Q 323,56 323,71 L 323,71 Q 323,86 308,86 L 81,86 Q 66,86 66,101 L 66,102 Q 66,117 75,117 L 84,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,132L149,132A15 15 0 0 0 164 117L164,117A15 15 0 0 0 149 101L105,101A15 15 0 0 0 90 117L90,117A15 15 0 0 0 105 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="182,117 170,121 170,112" style="fill:rgb(0,0,0)"/>
+<path d="M164,117L176,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,132L201,132A15 15 0 0 0 216 117L216,117A15 15 0 0 0 201 101L197,101A15 15 0 0 0 182 117L182,117A15 15 0 0 0 197 132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M216,117L239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,132L375,132L375,101L245,101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="117" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,169A15 15 0 0 0 325 154A15 15 0 0 0 310 139A15 15 0 0 0 294 154A15 15 0 0 0 310 169Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="154" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,154 336,150 336,159" style="fill:rgb(0,0,0)"/>
+<path d="M375,117 L 380,117 Q 386,117 386,132 L 386,139 Q 386,154 371,154 L 345,154 L 330,154" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,117 233,121 233,112" style="fill:rgb(0,0,0)"/>
+<path d="M294,154 L 260,154 Q 245,154 236,154 Q 227,154 227,139 L 227,132 Q 227,117 233,117 L 239,117" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M375,117 L 383,117 Q 392,117 392,102 L 392,71 Q 392,56 407,56 L 413,56 L 428,56" 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='x085f9125' onclick='hideorshow("x085f9125","xa064d583")'>show</button></p>
+ <div id='xa064d583' 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/literal-value.html">literal-value:</a></b>
+<button id='x301b5e69' onclick='hideorshow("x301b5e69","x7dbaddb3")'>show</button></p>
+ <div id='x7dbaddb3' 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='xd98e3155' onclick='hideorshow("xd98e3155","x17f939ee")'>show</button></p>
+ <div id='x17f939ee' 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='x36e52421' onclick='hideorshow("x36e52421","x0f9f75a4")'>show</button></p>
+ <div id='x0f9f75a4' 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='x1df87fd8' onclick='hideorshow("x1df87fd8","x420baa92")'>show</button></p>
+ <div id='x420baa92' 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='x4a5943b5' onclick='hideorshow("x4a5943b5","x85d7df8c")'>show</button></p>
+ <div id='x85d7df8c' 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='xb11a1037' onclick='hideorshow("xb11a1037","x12d9418a")'>show</button></p>
+ <div id='x12d9418a' 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='x09152732' onclick='hideorshow("x09152732","x4c0fda46")'>show</button></p>
+ <div id='x4c0fda46' 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='xbe4aff98' onclick='hideorshow("xbe4aff98","xbacc089d")'>show</button></p>
+ <div id='xbacc089d' 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='x09db4fdc' onclick='hideorshow("x09db4fdc","xf6525aa6")'>show</button></p>
+ <div id='xf6525aa6' 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='xf5b07b14' onclick='hideorshow("xf5b07b14","x7d470f23")'>show</button></p>
+ <div id='x7d470f23' 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='x1f8f067e' onclick='hideorshow("x1f8f067e","x77621cba")'>show</button></p>
+ <div id='x77621cba' 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='x2c2d83da' onclick='hideorshow("x2c2d83da","x4f75c28b")'>show</button></p>
+ <div id='x4f75c28b' 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='x9766d8b9' onclick='hideorshow("x9766d8b9","xbe4652fc")'>show</button></p>
+ <div id='xbe4652fc' 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='xa37b1d70' onclick='hideorshow("xa37b1d70","xdd371957")'>show</button></p>
+ <div id='xdd371957' 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='x5a375ead' onclick='hideorshow("x5a375ead","x050877ef")'>show</button></p>
+ <div id='x050877ef' 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='xc09a2f4d' onclick='hideorshow("xc09a2f4d","xea11e11d")'>show</button></p>
+ <div id='xea11e11d' 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='x6fd3d99a' onclick='hideorshow("x6fd3d99a","x5baa1694")'>show</button></p>
+ <div id='x5baa1694' 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='x725d3852' onclick='hideorshow("x725d3852","xa38da6e2")'>show</button></p>
+ <div id='xa38da6e2' 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>xFinal()</b> - invoked to reclaim any allocated resources and to
+ obtain the value for row (x='e'). 9. .
+</li></ol>
+
+<p>If the user were to abandon query execution by calling sqlite3_reset() or
+sqlite3_finalize() on the statement handle before SQLite has called xFinal(),
+then xFinal() is called automatically from within the sqlite3_reset() or
+sqlite3_finalize() call in order to reclaim any allocated resources, even
+though the value is not required. In this case any error returned by the xFinal
+implementation is silently discarded.
+
+</p><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=9647771778">2023-12-05 14:43:20</a> UTC </small></i></p>
+
diff --git a/www/withoutrowid.html b/www/withoutrowid.html
new file mode 100644
index 0000000..8944a07
--- /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 "xsync".:
+
+</p><blockquote><pre>
+SELECT cnt FROM wordcount WHERE word='xsync';
+</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="https://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 about 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 unambiguously 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>
+
diff --git a/www/zeroconf.html b/www/zeroconf.html
new file mode 100644
index 0000000..6f2727f
--- /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=1a3f46593e">2022-01-08 05:02:57</a> UTC </small></i></p>
+
diff --git a/www/zipfile.html b/www/zipfile.html
new file mode 100644
index 0000000..1584df1
--- /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-', 'm.txt');
+</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=5408af61ff">2023-06-07 13:17:51</a> UTC </small></i></p>
+