cjson
.github
workflows CI.yml ci-fuzz.yml
CONTRIBUTING.md
fuzzing
inputs test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9
.gitignore CMakeLists.txt afl-prepare-linux.sh afl.c afl.sh cjson_read_fuzzer.c fuzz_main.c json.dict ossfuzz.sh
library_config cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmake
tests
inputs test1 test1.expected test10 test10.expected test11 test11.expected test2 test2.expected test3 test3.expected test4 test4.expected test5 test5.expected test6 test7 test7.expected test8 test8.expected test9 test9.expected
json-patch-tests .editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.json
unity
auto colour_prompt.rb colour_reporter.rb generate_config.yml generate_module.rb generate_test_runner.rb parse_output.rb stylize_as_junit.rb test_file_filter.rb type_sanitizer.rb unity_test_summary.py unity_test_summary.rb unity_to_junit.py
docs ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txt
examples
example_1
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_2
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_3
helper UnityHelper.c UnityHelper.h
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
rakefile.rb rakefile_helper.rb readme.txt target_gcc_32.yml
unity_config.h
extras
eclipse error_parsers.txt
fixture
src unity_fixture.c unity_fixture.h unity_fixture_internals.h unity_fixture_malloc_overrides.h
rakefile.rb rakefile_helper.rb readme.txt
release build.info version.info
src unity.c unity.h unity_internals.h
.gitattributes .gitignore .travis.yml README.md
CMakeLists.txt cjson_add.c common.h compare_tests.c json_patch_tests.c minify_tests.c misc_tests.c misc_utils_tests.c old_utils_tests.c parse_array.c parse_examples.c parse_hex4.c parse_number.c parse_object.c parse_string.c parse_value.c parse_with_opts.c print_array.c print_number.c print_object.c print_string.c print_value.c readme_examples.c unity_setup.c
.editorconfig .gitattributes .gitignore .travis.yml CHANGELOG.md CMakeLists.txt CONTRIBUTORS.md LICENSE Makefile README.md SECURITY.md appveyor.yml cJSON.c cJSON.h cJSON_Utils.c cJSON_Utils.h test.c valgrind.supp
curl
.circleci config.yml
.github
ISSUE_TEMPLATE bug_report.yml config.yml docs.yml
scripts cleancmd.pl cmp-config.pl cmp-pkg-config.sh codespell-ignore.words codespell.sh distfiles.sh pyspelling.words pyspelling.yaml randcurl.pl requirements-docs.txt requirements-proselint.txt requirements.txt shellcheck-ci.sh shellcheck.sh spellcheck.curl trimmarkdownheader.pl typos.sh typos.toml verify-examples.pl verify-synopsis.pl yamlcheck.sh yamlcheck.yaml
workflows appveyor-status.yml checkdocs.yml checksrc.yml checkurls.yml codeql.yml configure-vs-cmake.yml curl-for-win.yml distcheck.yml fuzz.yml http3-linux.yml label.yml linux-old.yml linux.yml macos.yml non-native.yml windows.yml
CODEOWNERS CONTRIBUTING.md FUNDING.yml dependabot.yml labeler.yml lock.yml stale.yml
CMake CurlSymbolHiding.cmake CurlTests.c FindBrotli.cmake FindCares.cmake FindGSS.cmake FindGnuTLS.cmake FindLDAP.cmake FindLibbacktrace.cmake FindLibgsasl.cmake FindLibidn2.cmake FindLibpsl.cmake FindLibssh.cmake FindLibssh2.cmake FindLibuv.cmake FindMbedTLS.cmake FindNGHTTP2.cmake FindNGHTTP3.cmake FindNGTCP2.cmake FindNettle.cmake FindQuiche.cmake FindRustls.cmake FindWolfSSL.cmake FindZstd.cmake Macros.cmake OtherTests.cmake PickyWarnings.cmake Utilities.cmake cmake_uninstall.in.cmake curl-config.in.cmake unix-cache.cmake win32-cache.cmake
LICENSES BSD-4-Clause-UC.txt ISC.txt curl.txt
docs
cmdline-opts .gitignore CMakeLists.txt MANPAGE.md Makefile.am Makefile.inc _AUTHORS.md _BUGS.md _DESCRIPTION.md _ENVIRONMENT.md _EXITCODES.md _FILES.md _GLOBBING.md _NAME.md _OPTIONS.md _OUTPUT.md _PROGRESS.md _PROTOCOLS.md _PROXYPREFIX.md _SEEALSO.md _SYNOPSIS.md _URL.md _VARIABLES.md _VERSION.md _WWW.md abstract-unix-socket.md alt-svc.md anyauth.md append.md aws-sigv4.md basic.md ca-native.md cacert.md capath.md cert-status.md cert-type.md cert.md ciphers.md compressed-ssh.md compressed.md config.md connect-timeout.md connect-to.md continue-at.md cookie-jar.md cookie.md create-dirs.md create-file-mode.md crlf.md crlfile.md curves.md data-ascii.md data-binary.md data-raw.md data-urlencode.md data.md delegation.md digest.md disable-eprt.md disable-epsv.md disable.md disallow-username-in-url.md dns-interface.md dns-ipv4-addr.md dns-ipv6-addr.md dns-servers.md doh-cert-status.md doh-insecure.md doh-url.md dump-ca-embed.md dump-header.md ech.md egd-file.md engine.md etag-compare.md etag-save.md expect100-timeout.md fail-early.md fail-with-body.md fail.md false-start.md follow.md form-escape.md form-string.md form.md ftp-account.md ftp-alternative-to-user.md ftp-create-dirs.md ftp-method.md ftp-pasv.md ftp-port.md ftp-pret.md ftp-skip-pasv-ip.md ftp-ssl-ccc-mode.md ftp-ssl-ccc.md ftp-ssl-control.md get.md globoff.md happy-eyeballs-timeout-ms.md haproxy-clientip.md haproxy-protocol.md head.md header.md help.md hostpubmd5.md hostpubsha256.md hsts.md http0.9.md http1.0.md http1.1.md http2-prior-knowledge.md http2.md http3-only.md http3.md ignore-content-length.md insecure.md interface.md ip-tos.md ipfs-gateway.md ipv4.md ipv6.md json.md junk-session-cookies.md keepalive-cnt.md keepalive-time.md key-type.md key.md knownhosts.md krb.md libcurl.md limit-rate.md list-only.md local-port.md location-trusted.md location.md login-options.md mail-auth.md mail-from.md mail-rcpt-allowfails.md mail-rcpt.md mainpage.idx manual.md max-filesize.md max-redirs.md max-time.md metalink.md mptcp.md negotiate.md netrc-file.md netrc-optional.md netrc.md next.md no-alpn.md no-buffer.md no-clobber.md no-keepalive.md no-npn.md no-progress-meter.md no-sessionid.md noproxy.md ntlm-wb.md ntlm.md oauth2-bearer.md out-null.md output-dir.md output.md parallel-immediate.md parallel-max-host.md parallel-max.md parallel.md pass.md path-as-is.md pinnedpubkey.md post301.md post302.md post303.md preproxy.md progress-bar.md proto-default.md proto-redir.md proto.md proxy-anyauth.md proxy-basic.md proxy-ca-native.md proxy-cacert.md proxy-capath.md proxy-cert-type.md proxy-cert.md proxy-ciphers.md proxy-crlfile.md proxy-digest.md proxy-header.md proxy-http2.md proxy-insecure.md proxy-key-type.md proxy-key.md proxy-negotiate.md proxy-ntlm.md proxy-pass.md proxy-pinnedpubkey.md proxy-service-name.md proxy-ssl-allow-beast.md proxy-ssl-auto-client-cert.md proxy-tls13-ciphers.md proxy-tlsauthtype.md proxy-tlspassword.md proxy-tlsuser.md proxy-tlsv1.md proxy-user.md proxy.md proxy1.0.md proxytunnel.md pubkey.md quote.md random-file.md range.md rate.md raw.md referer.md remote-header-name.md remote-name-all.md remote-name.md remote-time.md remove-on-error.md request-target.md request.md resolve.md retry-all-errors.md retry-connrefused.md retry-delay.md retry-max-time.md retry.md sasl-authzid.md sasl-ir.md service-name.md show-error.md show-headers.md sigalgs.md silent.md skip-existing.md socks4.md socks4a.md socks5-basic.md socks5-gssapi-nec.md socks5-gssapi-service.md socks5-gssapi.md socks5-hostname.md socks5.md speed-limit.md speed-time.md ssl-allow-beast.md ssl-auto-client-cert.md ssl-no-revoke.md ssl-reqd.md ssl-revoke-best-effort.md ssl-sessions.md ssl.md sslv2.md sslv3.md stderr.md styled-output.md suppress-connect-headers.md tcp-fastopen.md tcp-nodelay.md telnet-option.md tftp-blksize.md tftp-no-options.md time-cond.md tls-earlydata.md tls-max.md tls13-ciphers.md tlsauthtype.md tlspassword.md tlsuser.md tlsv1.0.md tlsv1.1.md tlsv1.2.md tlsv1.3.md tlsv1.md tr-encoding.md trace-ascii.md trace-config.md trace-ids.md trace-time.md trace.md unix-socket.md upload-file.md upload-flags.md url-query.md url.md use-ascii.md user-agent.md user.md variable.md verbose.md version.md vlan-priority.md write-out.md xattr.md
examples .checksrc .gitignore 10-at-a-time.c CMakeLists.txt Makefile.am Makefile.example Makefile.inc README.md adddocsref.pl address-scope.c altsvc.c anyauthput.c block_ip.c cacertinmem.c certinfo.c chkspeed.c connect-to.c cookie_interface.c crawler.c debug.c default-scheme.c ephiperfifo.c evhiperfifo.c externalsocket.c fileupload.c ftp-delete.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c getredirect.c getreferrer.c ghiper.c headerapi.c hiperfifo.c hsts-preload.c htmltidy.c htmltitle.cpp http-options.c http-post.c http2-download.c http2-pushinmemory.c http2-serverpush.c http2-upload.c http3-present.c http3.c httpcustomheader.c httpput-postfields.c httpput.c https.c imap-append.c imap-authzid.c imap-copy.c imap-create.c imap-delete.c imap-examine.c imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c ipv6.c keepalive.c localport.c log_failed_transfers.c maxconnects.c multi-app.c multi-debugcallback.c multi-double.c multi-event.c multi-formadd.c multi-legacy.c multi-post.c multi-single.c multi-uv.c netrc.c parseurl.c persistent.c pop3-authzid.c pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c postinmemory.c postit2-formadd.c postit2.c progressfunc.c protofeats.c range.c resolve.c rtsp-options.c sendrecv.c sepheaders.c sessioninfo.c sftpget.c sftpuploadresume.c shared-connection-cache.c simple.c simplepost.c simplessl.c smooth-gtk-thread.c smtp-authzid.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c smtp-vrfy.c sslbackend.c synctime.c threaded.c unixsocket.c url2file.c urlapi.c usercertinmem.c version-check.pl websocket-cb.c websocket-updown.c websocket.c xmlstream.c
internals BUFQ.md BUFREF.md CHECKSRC.md CLIENT-READERS.md CLIENT-WRITERS.md CODE_STYLE.md CONNECTION-FILTERS.md CREDENTIALS.md CURLX.md DYNBUF.md HASH.md LLIST.md MID.md MQTT.md MULTI-EV.md NEW-PROTOCOL.md PEERS.md PORTING.md RATELIMITS.md README.md SCORECARD.md SPLAY.md STRPARSE.md THRDPOOL-AND-QUEUE.md TIME-KEEPING.md TLS-SESSIONS.md UINT_SETS.md WEBSOCKET.md
libcurl
opts CMakeLists.txt CURLINFO_ACTIVESOCKET.md CURLINFO_APPCONNECT_TIME.md CURLINFO_APPCONNECT_TIME_T.md CURLINFO_CAINFO.md CURLINFO_CAPATH.md CURLINFO_CERTINFO.md CURLINFO_CONDITION_UNMET.md CURLINFO_CONNECT_TIME.md CURLINFO_CONNECT_TIME_T.md CURLINFO_CONN_ID.md CURLINFO_CONTENT_LENGTH_DOWNLOAD.md CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md CURLINFO_CONTENT_LENGTH_UPLOAD.md CURLINFO_CONTENT_LENGTH_UPLOAD_T.md CURLINFO_CONTENT_TYPE.md CURLINFO_COOKIELIST.md CURLINFO_EARLYDATA_SENT_T.md CURLINFO_EFFECTIVE_METHOD.md CURLINFO_EFFECTIVE_URL.md CURLINFO_FILETIME.md CURLINFO_FILETIME_T.md CURLINFO_FTP_ENTRY_PATH.md CURLINFO_HEADER_SIZE.md CURLINFO_HTTPAUTH_AVAIL.md CURLINFO_HTTPAUTH_USED.md CURLINFO_HTTP_CONNECTCODE.md CURLINFO_HTTP_VERSION.md CURLINFO_LASTSOCKET.md CURLINFO_LOCAL_IP.md CURLINFO_LOCAL_PORT.md CURLINFO_NAMELOOKUP_TIME.md CURLINFO_NAMELOOKUP_TIME_T.md CURLINFO_NUM_CONNECTS.md CURLINFO_OS_ERRNO.md CURLINFO_POSTTRANSFER_TIME_T.md CURLINFO_PRETRANSFER_TIME.md CURLINFO_PRETRANSFER_TIME_T.md CURLINFO_PRIMARY_IP.md CURLINFO_PRIMARY_PORT.md CURLINFO_PRIVATE.md CURLINFO_PROTOCOL.md CURLINFO_PROXYAUTH_AVAIL.md CURLINFO_PROXYAUTH_USED.md CURLINFO_PROXY_ERROR.md CURLINFO_PROXY_SSL_VERIFYRESULT.md CURLINFO_QUEUE_TIME_T.md CURLINFO_REDIRECT_COUNT.md CURLINFO_REDIRECT_TIME.md CURLINFO_REDIRECT_TIME_T.md CURLINFO_REDIRECT_URL.md CURLINFO_REFERER.md CURLINFO_REQUEST_SIZE.md CURLINFO_RESPONSE_CODE.md CURLINFO_RETRY_AFTER.md CURLINFO_RTSP_CLIENT_CSEQ.md CURLINFO_RTSP_CSEQ_RECV.md CURLINFO_RTSP_SERVER_CSEQ.md CURLINFO_RTSP_SESSION_ID.md CURLINFO_SCHEME.md CURLINFO_SIZE_DELIVERED.md CURLINFO_SIZE_DOWNLOAD.md CURLINFO_SIZE_DOWNLOAD_T.md CURLINFO_SIZE_UPLOAD.md CURLINFO_SIZE_UPLOAD_T.md CURLINFO_SPEED_DOWNLOAD.md CURLINFO_SPEED_DOWNLOAD_T.md CURLINFO_SPEED_UPLOAD.md CURLINFO_SPEED_UPLOAD_T.md CURLINFO_SSL_ENGINES.md CURLINFO_SSL_VERIFYRESULT.md CURLINFO_STARTTRANSFER_TIME.md CURLINFO_STARTTRANSFER_TIME_T.md CURLINFO_TLS_SESSION.md CURLINFO_TLS_SSL_PTR.md CURLINFO_TOTAL_TIME.md CURLINFO_TOTAL_TIME_T.md CURLINFO_USED_PROXY.md CURLINFO_XFER_ID.md CURLMINFO_XFERS_ADDED.md CURLMINFO_XFERS_CURRENT.md CURLMINFO_XFERS_DONE.md CURLMINFO_XFERS_PENDING.md CURLMINFO_XFERS_RUNNING.md CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md CURLMOPT_MAXCONNECTS.md CURLMOPT_MAX_CONCURRENT_STREAMS.md CURLMOPT_MAX_HOST_CONNECTIONS.md CURLMOPT_MAX_PIPELINE_LENGTH.md CURLMOPT_MAX_TOTAL_CONNECTIONS.md CURLMOPT_NETWORK_CHANGED.md CURLMOPT_NOTIFYDATA.md CURLMOPT_NOTIFYFUNCTION.md CURLMOPT_PIPELINING.md CURLMOPT_PIPELINING_SERVER_BL.md CURLMOPT_PIPELINING_SITE_BL.md CURLMOPT_PUSHDATA.md CURLMOPT_PUSHFUNCTION.md CURLMOPT_QUICK_EXIT.md CURLMOPT_RESOLVE_THREADS_MAX.md CURLMOPT_SOCKETDATA.md CURLMOPT_SOCKETFUNCTION.md CURLMOPT_TIMERDATA.md CURLMOPT_TIMERFUNCTION.md CURLOPT_ABSTRACT_UNIX_SOCKET.md CURLOPT_ACCEPTTIMEOUT_MS.md CURLOPT_ACCEPT_ENCODING.md CURLOPT_ADDRESS_SCOPE.md CURLOPT_ALTSVC.md CURLOPT_ALTSVC_CTRL.md CURLOPT_APPEND.md CURLOPT_AUTOREFERER.md CURLOPT_AWS_SIGV4.md CURLOPT_BUFFERSIZE.md CURLOPT_CAINFO.md CURLOPT_CAINFO_BLOB.md CURLOPT_CAPATH.md CURLOPT_CA_CACHE_TIMEOUT.md CURLOPT_CERTINFO.md CURLOPT_CHUNK_BGN_FUNCTION.md CURLOPT_CHUNK_DATA.md CURLOPT_CHUNK_END_FUNCTION.md CURLOPT_CLOSESOCKETDATA.md CURLOPT_CLOSESOCKETFUNCTION.md CURLOPT_CONNECTTIMEOUT.md CURLOPT_CONNECTTIMEOUT_MS.md CURLOPT_CONNECT_ONLY.md CURLOPT_CONNECT_TO.md CURLOPT_CONV_FROM_NETWORK_FUNCTION.md CURLOPT_CONV_FROM_UTF8_FUNCTION.md CURLOPT_CONV_TO_NETWORK_FUNCTION.md CURLOPT_COOKIE.md CURLOPT_COOKIEFILE.md CURLOPT_COOKIEJAR.md CURLOPT_COOKIELIST.md CURLOPT_COOKIESESSION.md CURLOPT_COPYPOSTFIELDS.md CURLOPT_CRLF.md CURLOPT_CRLFILE.md CURLOPT_CURLU.md CURLOPT_CUSTOMREQUEST.md CURLOPT_DEBUGDATA.md CURLOPT_DEBUGFUNCTION.md CURLOPT_DEFAULT_PROTOCOL.md CURLOPT_DIRLISTONLY.md CURLOPT_DISALLOW_USERNAME_IN_URL.md CURLOPT_DNS_CACHE_TIMEOUT.md CURLOPT_DNS_INTERFACE.md CURLOPT_DNS_LOCAL_IP4.md CURLOPT_DNS_LOCAL_IP6.md CURLOPT_DNS_SERVERS.md CURLOPT_DNS_SHUFFLE_ADDRESSES.md CURLOPT_DNS_USE_GLOBAL_CACHE.md CURLOPT_DOH_SSL_VERIFYHOST.md CURLOPT_DOH_SSL_VERIFYPEER.md CURLOPT_DOH_SSL_VERIFYSTATUS.md CURLOPT_DOH_URL.md CURLOPT_ECH.md CURLOPT_EGDSOCKET.md CURLOPT_ERRORBUFFER.md CURLOPT_EXPECT_100_TIMEOUT_MS.md CURLOPT_FAILONERROR.md CURLOPT_FILETIME.md CURLOPT_FNMATCH_DATA.md CURLOPT_FNMATCH_FUNCTION.md CURLOPT_FOLLOWLOCATION.md CURLOPT_FORBID_REUSE.md CURLOPT_FRESH_CONNECT.md CURLOPT_FTPPORT.md CURLOPT_FTPSSLAUTH.md CURLOPT_FTP_ACCOUNT.md CURLOPT_FTP_ALTERNATIVE_TO_USER.md CURLOPT_FTP_CREATE_MISSING_DIRS.md CURLOPT_FTP_FILEMETHOD.md CURLOPT_FTP_SKIP_PASV_IP.md CURLOPT_FTP_SSL_CCC.md CURLOPT_FTP_USE_EPRT.md CURLOPT_FTP_USE_EPSV.md CURLOPT_FTP_USE_PRET.md CURLOPT_GSSAPI_DELEGATION.md CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md CURLOPT_HAPROXYPROTOCOL.md CURLOPT_HAPROXY_CLIENT_IP.md CURLOPT_HEADER.md CURLOPT_HEADERDATA.md CURLOPT_HEADERFUNCTION.md CURLOPT_HEADEROPT.md CURLOPT_HSTS.md CURLOPT_HSTSREADDATA.md CURLOPT_HSTSREADFUNCTION.md CURLOPT_HSTSWRITEDATA.md CURLOPT_HSTSWRITEFUNCTION.md CURLOPT_HSTS_CTRL.md CURLOPT_HTTP09_ALLOWED.md CURLOPT_HTTP200ALIASES.md CURLOPT_HTTPAUTH.md CURLOPT_HTTPGET.md CURLOPT_HTTPHEADER.md CURLOPT_HTTPPOST.md CURLOPT_HTTPPROXYTUNNEL.md CURLOPT_HTTP_CONTENT_DECODING.md CURLOPT_HTTP_TRANSFER_DECODING.md CURLOPT_HTTP_VERSION.md CURLOPT_IGNORE_CONTENT_LENGTH.md CURLOPT_INFILESIZE.md CURLOPT_INFILESIZE_LARGE.md CURLOPT_INTERFACE.md CURLOPT_INTERLEAVEDATA.md CURLOPT_INTERLEAVEFUNCTION.md CURLOPT_IOCTLDATA.md CURLOPT_IOCTLFUNCTION.md CURLOPT_IPRESOLVE.md CURLOPT_ISSUERCERT.md CURLOPT_ISSUERCERT_BLOB.md CURLOPT_KEEP_SENDING_ON_ERROR.md CURLOPT_KEYPASSWD.md CURLOPT_KRBLEVEL.md CURLOPT_LOCALPORT.md CURLOPT_LOCALPORTRANGE.md CURLOPT_LOGIN_OPTIONS.md CURLOPT_LOW_SPEED_LIMIT.md CURLOPT_LOW_SPEED_TIME.md CURLOPT_MAIL_AUTH.md CURLOPT_MAIL_FROM.md CURLOPT_MAIL_RCPT.md CURLOPT_MAIL_RCPT_ALLOWFAILS.md CURLOPT_MAXAGE_CONN.md CURLOPT_MAXCONNECTS.md CURLOPT_MAXFILESIZE.md CURLOPT_MAXFILESIZE_LARGE.md CURLOPT_MAXLIFETIME_CONN.md CURLOPT_MAXREDIRS.md CURLOPT_MAX_RECV_SPEED_LARGE.md CURLOPT_MAX_SEND_SPEED_LARGE.md CURLOPT_MIMEPOST.md CURLOPT_MIME_OPTIONS.md CURLOPT_NETRC.md CURLOPT_NETRC_FILE.md CURLOPT_NEW_DIRECTORY_PERMS.md CURLOPT_NEW_FILE_PERMS.md CURLOPT_NOBODY.md CURLOPT_NOPROGRESS.md CURLOPT_NOPROXY.md CURLOPT_NOSIGNAL.md CURLOPT_OPENSOCKETDATA.md CURLOPT_OPENSOCKETFUNCTION.md CURLOPT_PASSWORD.md CURLOPT_PATH_AS_IS.md CURLOPT_PINNEDPUBLICKEY.md CURLOPT_PIPEWAIT.md CURLOPT_PORT.md CURLOPT_POST.md CURLOPT_POSTFIELDS.md CURLOPT_POSTFIELDSIZE.md CURLOPT_POSTFIELDSIZE_LARGE.md CURLOPT_POSTQUOTE.md CURLOPT_POSTREDIR.md CURLOPT_PREQUOTE.md CURLOPT_PREREQDATA.md CURLOPT_PREREQFUNCTION.md CURLOPT_PRE_PROXY.md CURLOPT_PRIVATE.md CURLOPT_PROGRESSDATA.md CURLOPT_PROGRESSFUNCTION.md CURLOPT_PROTOCOLS.md CURLOPT_PROTOCOLS_STR.md CURLOPT_PROXY.md CURLOPT_PROXYAUTH.md CURLOPT_PROXYHEADER.md CURLOPT_PROXYPASSWORD.md CURLOPT_PROXYPORT.md CURLOPT_PROXYTYPE.md CURLOPT_PROXYUSERNAME.md CURLOPT_PROXYUSERPWD.md CURLOPT_PROXY_CAINFO.md CURLOPT_PROXY_CAINFO_BLOB.md CURLOPT_PROXY_CAPATH.md CURLOPT_PROXY_CRLFILE.md CURLOPT_PROXY_ISSUERCERT.md CURLOPT_PROXY_ISSUERCERT_BLOB.md CURLOPT_PROXY_KEYPASSWD.md CURLOPT_PROXY_PINNEDPUBLICKEY.md CURLOPT_PROXY_SERVICE_NAME.md CURLOPT_PROXY_SSLCERT.md CURLOPT_PROXY_SSLCERTTYPE.md CURLOPT_PROXY_SSLCERT_BLOB.md CURLOPT_PROXY_SSLKEY.md CURLOPT_PROXY_SSLKEYTYPE.md CURLOPT_PROXY_SSLKEY_BLOB.md CURLOPT_PROXY_SSLVERSION.md CURLOPT_PROXY_SSL_CIPHER_LIST.md CURLOPT_PROXY_SSL_OPTIONS.md CURLOPT_PROXY_SSL_VERIFYHOST.md CURLOPT_PROXY_SSL_VERIFYPEER.md CURLOPT_PROXY_TLS13_CIPHERS.md CURLOPT_PROXY_TLSAUTH_PASSWORD.md CURLOPT_PROXY_TLSAUTH_TYPE.md CURLOPT_PROXY_TLSAUTH_USERNAME.md CURLOPT_PROXY_TRANSFER_MODE.md CURLOPT_PUT.md CURLOPT_QUICK_EXIT.md CURLOPT_QUOTE.md CURLOPT_RANDOM_FILE.md CURLOPT_RANGE.md CURLOPT_READDATA.md CURLOPT_READFUNCTION.md CURLOPT_REDIR_PROTOCOLS.md CURLOPT_REDIR_PROTOCOLS_STR.md CURLOPT_REFERER.md CURLOPT_REQUEST_TARGET.md CURLOPT_RESOLVE.md CURLOPT_RESOLVER_START_DATA.md CURLOPT_RESOLVER_START_FUNCTION.md CURLOPT_RESUME_FROM.md CURLOPT_RESUME_FROM_LARGE.md CURLOPT_RTSP_CLIENT_CSEQ.md CURLOPT_RTSP_REQUEST.md CURLOPT_RTSP_SERVER_CSEQ.md CURLOPT_RTSP_SESSION_ID.md CURLOPT_RTSP_STREAM_URI.md CURLOPT_RTSP_TRANSPORT.md CURLOPT_SASL_AUTHZID.md CURLOPT_SASL_IR.md CURLOPT_SEEKDATA.md CURLOPT_SEEKFUNCTION.md CURLOPT_SERVER_RESPONSE_TIMEOUT.md CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md CURLOPT_SERVICE_NAME.md CURLOPT_SHARE.md CURLOPT_SOCKOPTDATA.md CURLOPT_SOCKOPTFUNCTION.md CURLOPT_SOCKS5_AUTH.md CURLOPT_SOCKS5_GSSAPI_NEC.md CURLOPT_SOCKS5_GSSAPI_SERVICE.md CURLOPT_SSH_AUTH_TYPES.md CURLOPT_SSH_COMPRESSION.md CURLOPT_SSH_HOSTKEYDATA.md CURLOPT_SSH_HOSTKEYFUNCTION.md CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md CURLOPT_SSH_KEYDATA.md CURLOPT_SSH_KEYFUNCTION.md CURLOPT_SSH_KNOWNHOSTS.md CURLOPT_SSH_PRIVATE_KEYFILE.md CURLOPT_SSH_PUBLIC_KEYFILE.md CURLOPT_SSLCERT.md CURLOPT_SSLCERTTYPE.md CURLOPT_SSLCERT_BLOB.md CURLOPT_SSLENGINE.md CURLOPT_SSLENGINE_DEFAULT.md CURLOPT_SSLKEY.md CURLOPT_SSLKEYTYPE.md CURLOPT_SSLKEY_BLOB.md CURLOPT_SSLVERSION.md CURLOPT_SSL_CIPHER_LIST.md CURLOPT_SSL_CTX_DATA.md CURLOPT_SSL_CTX_FUNCTION.md CURLOPT_SSL_EC_CURVES.md CURLOPT_SSL_ENABLE_ALPN.md CURLOPT_SSL_ENABLE_NPN.md CURLOPT_SSL_FALSESTART.md CURLOPT_SSL_OPTIONS.md CURLOPT_SSL_SESSIONID_CACHE.md CURLOPT_SSL_SIGNATURE_ALGORITHMS.md CURLOPT_SSL_VERIFYHOST.md CURLOPT_SSL_VERIFYPEER.md CURLOPT_SSL_VERIFYSTATUS.md CURLOPT_STDERR.md CURLOPT_STREAM_DEPENDS.md CURLOPT_STREAM_DEPENDS_E.md CURLOPT_STREAM_WEIGHT.md CURLOPT_SUPPRESS_CONNECT_HEADERS.md CURLOPT_TCP_FASTOPEN.md CURLOPT_TCP_KEEPALIVE.md CURLOPT_TCP_KEEPCNT.md CURLOPT_TCP_KEEPIDLE.md CURLOPT_TCP_KEEPINTVL.md CURLOPT_TCP_NODELAY.md CURLOPT_TELNETOPTIONS.md CURLOPT_TFTP_BLKSIZE.md CURLOPT_TFTP_NO_OPTIONS.md CURLOPT_TIMECONDITION.md CURLOPT_TIMEOUT.md CURLOPT_TIMEOUT_MS.md CURLOPT_TIMEVALUE.md CURLOPT_TIMEVALUE_LARGE.md CURLOPT_TLS13_CIPHERS.md CURLOPT_TLSAUTH_PASSWORD.md CURLOPT_TLSAUTH_TYPE.md CURLOPT_TLSAUTH_USERNAME.md CURLOPT_TRAILERDATA.md CURLOPT_TRAILERFUNCTION.md CURLOPT_TRANSFERTEXT.md CURLOPT_TRANSFER_ENCODING.md CURLOPT_UNIX_SOCKET_PATH.md CURLOPT_UNRESTRICTED_AUTH.md CURLOPT_UPKEEP_INTERVAL_MS.md CURLOPT_UPLOAD.md CURLOPT_UPLOAD_BUFFERSIZE.md CURLOPT_UPLOAD_FLAGS.md CURLOPT_URL.md CURLOPT_USERAGENT.md CURLOPT_USERNAME.md CURLOPT_USERPWD.md CURLOPT_USE_SSL.md CURLOPT_VERBOSE.md CURLOPT_WILDCARDMATCH.md CURLOPT_WRITEDATA.md CURLOPT_WRITEFUNCTION.md CURLOPT_WS_OPTIONS.md CURLOPT_XFERINFODATA.md CURLOPT_XFERINFOFUNCTION.md CURLOPT_XOAUTH2_BEARER.md CURLSHOPT_LOCKFUNC.md CURLSHOPT_SHARE.md CURLSHOPT_UNLOCKFUNC.md CURLSHOPT_UNSHARE.md CURLSHOPT_USERDATA.md Makefile.am Makefile.inc
.gitignore ABI.md CMakeLists.txt Makefile.am Makefile.inc curl_easy_cleanup.md curl_easy_duphandle.md curl_easy_escape.md curl_easy_getinfo.md curl_easy_header.md curl_easy_init.md curl_easy_nextheader.md curl_easy_option_by_id.md curl_easy_option_by_name.md curl_easy_option_next.md curl_easy_pause.md curl_easy_perform.md curl_easy_recv.md curl_easy_reset.md curl_easy_send.md curl_easy_setopt.md curl_easy_ssls_export.md curl_easy_ssls_import.md curl_easy_strerror.md curl_easy_unescape.md curl_easy_upkeep.md curl_escape.md curl_formadd.md curl_formfree.md curl_formget.md curl_free.md curl_getdate.md curl_getenv.md curl_global_cleanup.md curl_global_init.md curl_global_init_mem.md curl_global_sslset.md curl_global_trace.md curl_mime_addpart.md curl_mime_data.md curl_mime_data_cb.md curl_mime_encoder.md curl_mime_filedata.md curl_mime_filename.md curl_mime_free.md curl_mime_headers.md curl_mime_init.md curl_mime_name.md curl_mime_subparts.md curl_mime_type.md curl_mprintf.md curl_multi_add_handle.md curl_multi_assign.md curl_multi_cleanup.md curl_multi_fdset.md curl_multi_get_handles.md curl_multi_get_offt.md curl_multi_info_read.md curl_multi_init.md curl_multi_notify_disable.md curl_multi_notify_enable.md curl_multi_perform.md curl_multi_poll.md curl_multi_remove_handle.md curl_multi_setopt.md curl_multi_socket.md curl_multi_socket_action.md curl_multi_socket_all.md curl_multi_strerror.md curl_multi_timeout.md curl_multi_wait.md curl_multi_waitfds.md curl_multi_wakeup.md curl_pushheader_byname.md curl_pushheader_bynum.md curl_share_cleanup.md curl_share_init.md curl_share_setopt.md curl_share_strerror.md curl_slist_append.md curl_slist_free_all.md curl_strequal.md curl_strnequal.md curl_unescape.md curl_url.md curl_url_cleanup.md curl_url_dup.md curl_url_get.md curl_url_set.md curl_url_strerror.md curl_version.md curl_version_info.md curl_ws_meta.md curl_ws_recv.md curl_ws_send.md curl_ws_start_frame.md libcurl-easy.md libcurl-env-dbg.md libcurl-env.md libcurl-errors.md libcurl-multi.md libcurl-security.md libcurl-share.md libcurl-thread.md libcurl-tutorial.md libcurl-url.md libcurl-ws.md libcurl.m4 libcurl.md mksymbolsmanpage.pl symbols-in-versions symbols.pl
tests CI.md FILEFORMAT.md HTTP.md TEST-SUITE.md
.gitignore ALTSVC.md BINDINGS.md BUG-BOUNTY.md BUGS.md CIPHERS-TLS12.md CIPHERS.md CMakeLists.txt CODE_OF_CONDUCT.md CODE_REVIEW.md CONTRIBUTE.md CURL-DISABLE.md CURLDOWN.md DEPRECATE.md DISTROS.md EARLY-RELEASE.md ECH.md EXPERIMENTAL.md FAQ.md FEATURES.md GOVERNANCE.md HELP-US.md HISTORY.md HSTS.md HTTP-COOKIES.md HTTP3.md HTTPSRR.md INFRASTRUCTURE.md INSTALL-CMAKE.md INSTALL.md INTERNALS.md IPFS.md KNOWN_BUGS.md KNOWN_RISKS.md MAIL-ETIQUETTE.md MANUAL.md Makefile.am README.md RELEASE-PROCEDURE.md ROADMAP.md RUSTLS.md SECURITY-ADVISORY.md SPONSORS.md SSL-PROBLEMS.md SSLCERTS.md THANKS THANKS-filter TODO.md TheArtOfHttpScripting.md URL-SYNTAX.md VERIFY.md VERSIONS.md VULN-DISCLOSURE-POLICY.md curl-config.md mk-ca-bundle.md options-in-versions runtests.md testcurl.md wcurl.md
include
curl Makefile.am curl.h curlver.h easy.h header.h mprintf.h multi.h options.h stdcheaders.h system.h typecheck-gcc.h urlapi.h websockets.h
Makefile.am README.md
lib
curlx base64.c base64.h basename.c basename.h dynbuf.c dynbuf.h fopen.c fopen.h inet_ntop.c inet_ntop.h inet_pton.c inet_pton.h multibyte.c multibyte.h nonblock.c nonblock.h snprintf.c snprintf.h strcopy.c strcopy.h strdup.c strdup.h strerr.c strerr.h strparse.c strparse.h timediff.c timediff.h timeval.c timeval.h version_win32.c version_win32.h wait.c wait.h warnless.c warnless.h winapi.c winapi.h
vauth cleartext.c cram.c digest.c digest.h digest_sspi.c gsasl.c krb5_gssapi.c krb5_sspi.c ntlm.c ntlm_sspi.c oauth2.c spnego_gssapi.c spnego_sspi.c vauth.c vauth.h
vquic curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.h
vssh libssh.c libssh2.c ssh.h vssh.c vssh.h
vtls apple.c apple.h cipher_suite.c cipher_suite.h gtls.c gtls.h hostcheck.c hostcheck.h keylog.c keylog.h mbedtls.c mbedtls.h openssl.c openssl.h rustls.c rustls.h schannel.c schannel.h schannel_int.h schannel_verify.c vtls.c vtls.h vtls_int.h vtls_scache.c vtls_scache.h vtls_spack.c vtls_spack.h wolfssl.c wolfssl.h x509asn1.c x509asn1.h
.gitignore CMakeLists.txt Makefile.am Makefile.inc Makefile.soname altsvc.c altsvc.h amigaos.c amigaos.h arpa_telnet.h asyn-ares.c asyn-base.c asyn-thrdd.c asyn.h bufq.c bufq.h bufref.c bufref.h cf-dns.c cf-dns.h cf-h1-proxy.c cf-h1-proxy.h cf-h2-proxy.c cf-h2-proxy.h cf-haproxy.c cf-haproxy.h cf-https-connect.c cf-https-connect.h cf-ip-happy.c cf-ip-happy.h cf-socket.c cf-socket.h cfilters.c cfilters.h config-mac.h config-os400.h config-riscos.h config-win32.h conncache.c conncache.h connect.c connect.h content_encoding.c content_encoding.h cookie.c cookie.h creds.c creds.h cshutdn.c cshutdn.h curl_addrinfo.c curl_addrinfo.h curl_config-cmake.h.in curl_ctype.h curl_endian.c curl_endian.h curl_fnmatch.c curl_fnmatch.h curl_fopen.c curl_fopen.h curl_get_line.c curl_get_line.h curl_gethostname.c curl_gethostname.h curl_gssapi.c curl_gssapi.h curl_hmac.h curl_ldap.h curl_md4.h curl_md5.h curl_memrchr.c curl_memrchr.h curl_ntlm_core.c curl_ntlm_core.h curl_printf.h curl_range.c curl_range.h curl_sasl.c curl_sasl.h curl_setup.h curl_sha256.h curl_sha512_256.c curl_sha512_256.h curl_share.c curl_share.h curl_sspi.c curl_sspi.h curl_threads.c curl_threads.h curl_trc.c curl_trc.h cw-out.c cw-out.h cw-pause.c cw-pause.h dict.c dict.h dllmain.c dnscache.c dnscache.h doh.c doh.h dynhds.c dynhds.h easy.c easy_lock.h easygetopt.c easyif.h easyoptions.c easyoptions.h escape.c escape.h fake_addrinfo.c fake_addrinfo.h file.c file.h fileinfo.c fileinfo.h formdata.c formdata.h ftp-int.h ftp.c ftp.h ftplistparser.c ftplistparser.h functypes.h getenv.c getinfo.c getinfo.h gopher.c gopher.h hash.c hash.h headers.c headers.h hmac.c hostip.c hostip.h hostip4.c hostip6.c hsts.c hsts.h http.c http.h http1.c http1.h http2.c http2.h http_aws_sigv4.c http_aws_sigv4.h http_chunks.c http_chunks.h http_digest.c http_digest.h http_negotiate.c http_negotiate.h http_ntlm.c http_ntlm.h http_proxy.c http_proxy.h httpsrr.c httpsrr.h idn.c idn.h if2ip.c if2ip.h imap.c imap.h ldap.c libcurl.def libcurl.rc libcurl.vers.in llist.c llist.h macos.c macos.h md4.c md5.c memdebug.c mime.c mime.h mprintf.c mqtt.c mqtt.h multi.c multi_ev.c multi_ev.h multi_ntfy.c multi_ntfy.h multihandle.h multiif.h netrc.c netrc.h noproxy.c noproxy.h openldap.c optiontable.pl parsedate.c parsedate.h peer.c peer.h pingpong.c pingpong.h pop3.c pop3.h progress.c progress.h protocol.c protocol.h psl.c psl.h rand.c rand.h ratelimit.c ratelimit.h request.c request.h rtsp.c rtsp.h select.c select.h sendf.c sendf.h setopt.c setopt.h setup-os400.h setup-vms.h setup-win32.h sha256.c sigpipe.h slist.c slist.h smb.c smb.h smtp.c smtp.h sockaddr.h socketpair.c socketpair.h socks.c socks.h socks_gssapi.c socks_sspi.c splay.c splay.h strcase.c strcase.h strequal.c strerror.c strerror.h system_win32.c system_win32.h telnet.c telnet.h tftp.c tftp.h thrdpool.c thrdpool.h thrdqueue.c thrdqueue.h transfer.c transfer.h uint-bset.c uint-bset.h uint-hash.c uint-hash.h uint-spbset.c uint-spbset.h uint-table.c uint-table.h url.c url.h urlapi-int.h urlapi.c urldata.h version.c ws.c ws.h
m4 .gitignore curl-amissl.m4 curl-apple-sectrust.m4 curl-compilers.m4 curl-confopts.m4 curl-functions.m4 curl-gnutls.m4 curl-mbedtls.m4 curl-openssl.m4 curl-override.m4 curl-reentrant.m4 curl-rustls.m4 curl-schannel.m4 curl-sysconfig.m4 curl-wolfssl.m4 xc-am-iface.m4 xc-cc-check.m4 xc-lt-iface.m4 xc-val-flgs.m4 zz40-xc-ovr.m4 zz50-xc-ovr.m4
projects
OS400
rpg-examples HEADERAPI HTTPPOST INMEMORY SIMPLE1 SIMPLE2 SMTPSRCMBR
.checksrc README.OS400 ccsidcurl.c ccsidcurl.h config400.default curl.cmd curl.inc.in curlcl.c curlmain.c initscript.sh make-docs.sh make-include.sh make-lib.sh make-src.sh make-tests.sh makefile.sh os400sys.c os400sys.h
Windows
tmpl .gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filters
.gitignore README.md generate.bat
vms Makefile.am backup_gnv_curl_src.com build_curl-config_script.com build_gnv_curl.com build_gnv_curl_pcsi_desc.com build_gnv_curl_pcsi_text.com build_gnv_curl_release_notes.com build_libcurl_pc.com build_vms.com clean_gnv_curl.com compare_curl_source.com config_h.com curl_crtl_init.c curl_gnv_build_steps.txt curl_release_note_start.txt curl_startup.com curlmsg.h curlmsg.msg curlmsg.sdl curlmsg_vms.h generate_config_vms_h_curl.com generate_vax_transfer.com gnv_conftest.c_first gnv_curl_configure.sh gnv_libcurl_symbols.opt gnv_link_curl.com macro32_exactcase.patch make_gnv_curl_install.sh make_pcsi_curl_kit_name.com pcsi_gnv_curl_file_list.txt pcsi_product_gnv_curl.com readme report_openssl_version.c setup_gnv_curl_build.com stage_curl_install.com vms_eco_level.h
Makefile.am README.md
scripts .checksrc CMakeLists.txt Makefile.am badwords badwords-all badwords.txt cd2cd cd2nroff cdall checksrc-all.pl checksrc.pl cmakelint.sh completion.pl contributors.sh contrithanks.sh coverage.sh delta dmaketgz extract-unit-protos firefox-db2pem.sh installcheck.sh maketgz managen mdlinkcheck mk-ca-bundle.pl mk-unity.pl nroff2cd perlcheck.sh pythonlint.sh randdisable release-notes.pl release-tools.sh schemetable.c singleuse.pl spacecheck.pl top-complexity top-length verify-release wcurl
src
toolx tool_time.c tool_time.h
.checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc config2setopts.c config2setopts.h curl.rc curlinfo.c mk-file-embed.pl mkhelp.pl slist_wc.c slist_wc.h terminal.c terminal.h tool_cb_dbg.c tool_cb_dbg.h tool_cb_hdr.c tool_cb_hdr.h tool_cb_prg.c tool_cb_prg.h tool_cb_rea.c tool_cb_rea.h tool_cb_see.c tool_cb_see.h tool_cb_soc.c tool_cb_soc.h tool_cb_wrt.c tool_cb_wrt.h tool_cfgable.c tool_cfgable.h tool_dirhie.c tool_dirhie.h tool_doswin.c tool_doswin.h tool_easysrc.c tool_easysrc.h tool_filetime.c tool_filetime.h tool_findfile.c tool_findfile.h tool_formparse.c tool_formparse.h tool_getparam.c tool_getparam.h tool_getpass.c tool_getpass.h tool_help.c tool_help.h tool_helpers.c tool_helpers.h tool_hugehelp.h tool_ipfs.c tool_ipfs.h tool_libinfo.c tool_libinfo.h tool_listhelp.c tool_main.c tool_main.h tool_msgs.c tool_msgs.h tool_operate.c tool_operate.h tool_operhlp.c tool_operhlp.h tool_paramhlp.c tool_paramhlp.h tool_parsecfg.c tool_parsecfg.h tool_progress.c tool_progress.h tool_sdecls.h tool_setopt.c tool_setopt.h tool_setup.h tool_ssls.c tool_ssls.h tool_stderr.c tool_stderr.h tool_urlglob.c tool_urlglob.h tool_util.c tool_util.h tool_version.h tool_vms.c tool_vms.h tool_writeout.c tool_writeout.h tool_writeout_json.c tool_writeout_json.h tool_xattr.c tool_xattr.h var.c var.h
tests
certs .gitignore CMakeLists.txt Makefile.am Makefile.inc genserv.pl srp-verifier-conf srp-verifier-db test-ca.cnf test-ca.prm test-client-cert.prm test-client-eku-only.prm test-localhost-san-first.prm test-localhost-san-last.prm test-localhost.nn.prm test-localhost.prm test-localhost0h.prm
cmake CMakeLists.txt test.c test.cpp test.sh
data .gitignore DISABLED Makefile.am data-xml1 data1400.c data1401.c data1402.c data1403.c data1404.c data1405.c data1406.c data1407.c data1420.c data1461.txt data1463.txt data1465.c data1481.c data1705-1.md data1705-2.md data1705-3.md data1705-4.md data1705-stdout.1 data1706-1.md data1706-2.md data1706-3.md data1706-4.md data1706-stdout.txt data320.html test1 test10 test100 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 test1008 test1009 test101 test1010 test1011 test1012 test1013 test1014 test1015 test1016 test1017 test1018 test1019 test102 test1020 test1021 test1022 test1023 test1024 test1025 test1026 test1027 test1028 test1029 test103 test1030 test1031 test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 test104 test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 test1048 test1049 test105 test1050 test1051 test1052 test1053 test1054 test1055 test1056 test1057 test1058 test1059 test106 test1060 test1061 test1062 test1063 test1064 test1065 test1066 test1067 test1068 test1069 test107 test1070 test1071 test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 test108 test1080 test1081 test1082 test1083 test1084 test1085 test1086 test1087 test1088 test1089 test109 test1090 test1091 test1092 test1093 test1094 test1095 test1096 test1097 test1098 test1099 test11 test110 test1100 test1101 test1102 test1103 test1104 test1105 test1106 test1107 test1108 test1109 test111 test1110 test1111 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 test112 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 test1128 test1129 test113 test1130 test1131 test1132 test1133 test1134 test1135 test1136 test1137 test1138 test1139 test114 test1140 test1141 test1142 test1143 test1144 test1145 test1146 test1147 test1148 test1149 test115 test1150 test1151 test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 test116 test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 test1168 test1169 test117 test1170 test1171 test1172 test1173 test1174 test1175 test1176 test1177 test1178 test1179 test118 test1180 test1181 test1182 test1183 test1184 test1185 test1186 test1187 test1188 test1189 test119 test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 test1199 test12 test120 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 test1208 test1209 test121 test1210 test1211 test1212 test1213 test1214 test1215 test1216 test1217 test1218 test1219 test122 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 test1228 test1229 test123 test1230 test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 test124 test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 test1248 test1249 test125 test1250 test1251 test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 test126 test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 test1268 test1269 test127 test1270 test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 test1279 test128 test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 test1288 test1289 test129 test1290 test1291 test1292 test1293 test1294 test1295 test1296 test1297 test1298 test1299 test13 test130 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 test1308 test1309 test131 test1310 test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 test132 test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 test1328 test1329 test133 test1330 test1331 test1332 test1333 test1334 test1335 test1336 test1337 test1338 test1339 test134 test1340 test1341 test1342 test1343 test1344 test1345 test1346 test1347 test1348 test1349 test135 test1350 test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 test136 test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 test1368 test1369 test137 test1370 test1371 test1372 test1373 test1374 test1375 test1376 test1377 test1378 test1379 test138 test1380 test1381 test1382 test1383 test1384 test1385 test1386 test1387 test1388 test1389 test139 test1390 test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 test14 test140 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 test1408 test1409 test141 test1410 test1411 test1412 test1413 test1414 test1415 test1416 test1417 test1418 test1419 test142 test1420 test1421 test1422 test1423 test1424 test1425 test1426 test1427 test1428 test1429 test143 test1430 test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 test144 test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 test1448 test1449 test145 test1450 test1451 test1452 test1453 test1454 test1455 test1456 test1457 test1458 test1459 test146 test1460 test1461 test1462 test1463 test1464 test1465 test1466 test1467 test1468 test1469 test147 test1470 test1471 test1472 test1473 test1474 test1475 test1476 test1477 test1478 test1479 test148 test1480 test1481 test1482 test1483 test1484 test1485 test1486 test1487 test1488 test1489 test149 test1490 test1491 test1492 test1493 test1494 test1495 test1496 test1497 test1498 test1499 test15 test150 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 test1508 test1509 test151 test1510 test1511 test1512 test1513 test1514 test1515 test1516 test1517 test1518 test1519 test152 test1520 test1521 test1522 test1523 test1524 test1525 test1526 test1527 test1528 test1529 test153 test1530 test1531 test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 test154 test1540 test1541 test1542 test1543 test1544 test1545 test1546 test1547 test1548 test1549 test155 test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 test1558 test1559 test156 test1560 test1561 test1562 test1563 test1564 test1565 test1566 test1567 test1568 test1569 test157 test1570 test1571 test1572 test1573 test1574 test1575 test1576 test1577 test1578 test1579 test158 test1580 test1581 test1582 test1583 test1584 test1585 test1586 test1587 test1588 test1589 test159 test1590 test1591 test1592 test1593 test1594 test1595 test1596 test1597 test1598 test1599 test16 test160 test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 test1608 test1609 test161 test1610 test1611 test1612 test1613 test1614 test1615 test1616 test1617 test1618 test1619 test162 test1620 test1621 test1622 test1623 test1624 test1625 test1626 test1627 test1628 test1629 test163 test1630 test1631 test1632 test1633 test1634 test1635 test1636 test1637 test1638 test1639 test164 test1640 test1641 test1642 test1643 test1644 test1645 test165 test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 test1658 test1659 test166 test1660 test1661 test1662 test1663 test1664 test1665 test1666 test1667 test1668 test1669 test167 test1670 test1671 test1672 test1673 test1674 test1675 test1676 test168 test1680 test1681 test1682 test1683 test1684 test1685 test169 test17 test170 test1700 test1701 test1702 test1703 test1704 test1705 test1706 test1707 test1708 test1709 test171 test1710 test1711 test1712 test1713 test1714 test1715 test172 test1720 test1721 test173 test174 test175 test176 test177 test178 test179 test18 test180 test1800 test1801 test1802 test181 test182 test183 test184 test1847 test1848 test1849 test185 test1850 test1851 test186 test187 test188 test189 test19 test190 test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 test1908 test1909 test191 test1910 test1911 test1912 test1913 test1914 test1915 test1916 test1917 test1918 test1919 test192 test1920 test1921 test193 test1933 test1934 test1935 test1936 test1937 test1938 test1939 test194 test1940 test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 test195 test1955 test1956 test1957 test1958 test1959 test196 test1960 test1964 test1965 test1966 test197 test1970 test1971 test1972 test1973 test1974 test1975 test1976 test1977 test1978 test1979 test198 test1980 test1981 test1982 test1983 test1984 test199 test2 test20 test200 test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 test2008 test2009 test201 test2010 test2011 test2012 test2013 test2014 test202 test2023 test2024 test2025 test2026 test2027 test2028 test2029 test203 test2030 test2031 test2032 test2033 test2034 test2035 test2037 test2038 test2039 test204 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 test2048 test2049 test205 test2050 test2051 test2052 test2053 test2054 test2055 test2056 test2057 test2058 test2059 test206 test2060 test2061 test2062 test2063 test2064 test2065 test2066 test2067 test2068 test2069 test207 test2070 test2071 test2072 test2073 test2074 test2075 test2076 test2077 test2078 test2079 test208 test2080 test2081 test2082 test2083 test2084 test2085 test2086 test2087 test2088 test2089 test209 test2090 test2091 test2092 test21 test210 test2100 test2101 test2102 test2103 test2104 test211 test212 test213 test214 test215 test216 test217 test218 test219 test22 test220 test2200 test2201 test2202 test2203 test2204 test2205 test2206 test2207 test221 test222 test223 test224 test225 test226 test227 test228 test229 test23 test230 test2300 test2301 test2302 test2303 test2304 test2306 test2307 test2308 test2309 test231 test232 test233 test234 test235 test236 test237 test238 test239 test24 test240 test2400 test2401 test2402 test2403 test2404 test2405 test2406 test2407 test2408 test2409 test241 test2410 test2411 test242 test243 test244 test245 test246 test247 test248 test249 test25 test250 test2500 test2501 test2502 test2503 test2504 test2505 test2506 test251 test252 test253 test254 test255 test256 test257 test258 test259 test26 test260 test2600 test2601 test2602 test2603 test2604 test2605 test261 test262 test263 test264 test265 test266 test267 test268 test269 test27 test270 test2700 test2701 test2702 test2703 test2704 test2705 test2706 test2707 test2708 test2709 test271 test2710 test2711 test2712 test2713 test2714 test2715 test2716 test2717 test2718 test2719 test272 test2720 test2721 test2722 test2723 test273 test274 test275 test276 test277 test278 test279 test28 test280 test281 test282 test283 test284 test285 test286 test287 test288 test289 test29 test290 test291 test292 test293 test294 test295 test296 test297 test298 test299 test3 test30 test300 test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 test3008 test3009 test301 test3010 test3011 test3012 test3013 test3014 test3015 test3016 test3017 test3018 test3019 test302 test3020 test3021 test3022 test3023 test3024 test3025 test3026 test3027 test3028 test3029 test303 test3030 test3031 test3032 test3033 test3034 test3035 test3036 test304 test305 test306 test307 test308 test309 test31 test310 test3100 test3101 test3102 test3103 test3104 test3105 test3106 test311 test312 test313 test314 test315 test316 test317 test318 test319 test32 test320 test3200 test3201 test3202 test3203 test3204 test3205 test3206 test3207 test3208 test3209 test321 test3210 test3211 test3212 test3213 test3214 test3215 test3216 test3217 test3218 test3219 test322 test3220 test323 test324 test325 test326 test327 test328 test329 test33 test330 test3300 test3301 test3302 test331 test332 test333 test334 test335 test336 test337 test338 test339 test34 test340 test341 test342 test343 test344 test345 test346 test347 test348 test349 test35 test350 test351 test352 test353 test354 test355 test356 test357 test358 test359 test36 test360 test361 test362 test363 test364 test365 test366 test367 test368 test369 test37 test370 test371 test372 test373 test374 test375 test376 test378 test379 test38 test380 test381 test383 test384 test385 test386 test387 test388 test389 test39 test390 test391 test392 test393 test394 test395 test396 test397 test398 test399 test4 test40 test400 test4000 test4001 test401 test402 test403 test404 test405 test406 test407 test408 test409 test41 test410 test411 test412 test413 test414 test415 test416 test417 test418 test419 test42 test420 test421 test422 test423 test424 test425 test426 test427 test428 test429 test43 test430 test431 test432 test433 test434 test435 test436 test437 test438 test439 test44 test440 test441 test442 test443 test444 test445 test446 test447 test448 test449 test45 test450 test451 test452 test453 test454 test455 test456 test457 test458 test459 test46 test460 test461 test462 test463 test467 test468 test469 test47 test470 test471 test472 test473 test474 test475 test476 test477 test478 test479 test48 test480 test481 test482 test483 test484 test485 test486 test487 test488 test489 test49 test490 test491 test492 test493 test494 test495 test496 test497 test498 test499 test5 test50 test500 test501 test502 test503 test504 test505 test506 test507 test508 test509 test51 test510 test511 test512 test513 test514 test515 test516 test517 test518 test519 test52 test520 test521 test522 test523 test524 test525 test526 test527 test528 test529 test53 test530 test531 test532 test533 test534 test535 test536 test537 test538 test539 test54 test540 test541 test542 test543 test544 test545 test546 test547 test548 test549 test55 test550 test551 test552 test553 test554 test555 test556 test557 test558 test559 test56 test560 test561 test562 test563 test564 test565 test566 test567 test568 test569 test57 test570 test571 test572 test573 test574 test575 test576 test577 test578 test579 test58 test580 test581 test582 test583 test584 test585 test586 test587 test588 test589 test59 test590 test591 test592 test593 test594 test595 test596 test597 test598 test599 test6 test60 test600 test601 test602 test603 test604 test605 test606 test607 test608 test609 test61 test610 test611 test612 test613 test614 test615 test616 test617 test618 test619 test62 test620 test621 test622 test623 test624 test625 test626 test627 test628 test629 test63 test630 test631 test632 test633 test634 test635 test636 test637 test638 test639 test64 test640 test641 test642 test643 test644 test645 test646 test647 test648 test649 test65 test650 test651 test652 test653 test654 test655 test656 test658 test659 test66 test660 test661 test662 test663 test664 test665 test666 test667 test668 test669 test67 test670 test671 test672 test673 test674 test675 test676 test677 test678 test679 test68 test680 test681 test682 test683 test684 test685 test686 test687 test688 test689 test69 test690 test691 test692 test693 test694 test695 test696 test697 test698 test699 test7 test70 test700 test701 test702 test703 test704 test705 test706 test707 test708 test709 test71 test710 test711 test712 test713 test714 test715 test716 test717 test718 test719 test72 test720 test721 test722 test723 test724 test725 test726 test727 test728 test729 test73 test730 test731 test732 test733 test734 test735 test736 test737 test738 test739 test74 test740 test741 test742 test743 test744 test745 test746 test747 test748 test749 test75 test750 test751 test752 test753 test754 test755 test756 test757 test758 test759 test76 test760 test761 test762 test763 test764 test765 test766 test767 test768 test769 test77 test770 test771 test772 test773 test774 test775 test776 test777 test778 test779 test78 test780 test781 test782 test783 test784 test785 test786 test787 test788 test789 test79 test790 test791 test792 test793 test794 test795 test796 test797 test798 test799 test8 test80 test800 test801 test802 test803 test804 test805 test806 test807 test808 test809 test81 test810 test811 test812 test813 test814 test815 test816 test817 test818 test819 test82 test820 test821 test822 test823 test824 test825 test826 test827 test828 test829 test83 test830 test831 test832 test833 test834 test835 test836 test837 test838 test839 test84 test840 test841 test842 test843 test844 test845 test846 test847 test848 test849 test85 test850 test851 test852 test853 test854 test855 test856 test857 test858 test859 test86 test860 test861 test862 test863 test864 test865 test866 test867 test868 test869 test87 test870 test871 test872 test873 test874 test875 test876 test877 test878 test879 test88 test880 test881 test882 test883 test884 test885 test886 test887 test888 test889 test89 test890 test891 test892 test893 test894 test895 test896 test897 test898 test899 test9 test90 test900 test901 test902 test903 test904 test905 test906 test907 test908 test909 test91 test910 test911 test912 test913 test914 test915 test916 test917 test918 test919 test92 test920 test921 test922 test923 test924 test925 test926 test927 test928 test929 test93 test930 test931 test932 test933 test934 test935 test936 test937 test938 test939 test94 test940 test941 test942 test943 test944 test945 test946 test947 test948 test949 test95 test950 test951 test952 test953 test954 test955 test956 test957 test958 test959 test96 test960 test961 test962 test963 test964 test965 test966 test967 test968 test969 test97 test970 test971 test972 test973 test974 test975 test976 test977 test978 test979 test98 test980 test981 test982 test983 test984 test985 test986 test987 test988 test989 test99 test990 test991 test992 test993 test994 test995 test996 test997 test998 test999
http
testenv
mod_curltest .gitignore mod_curltest.c
__init__.py caddy.py certs.py client.py curl.py dante.py dnsd.py env.py httpd.py nghttpx.py ports.py sshd.py vsftpd.py ws_echo_server.py
.gitignore CMakeLists.txt Makefile.am config.ini.in conftest.py requirements.txt scorecard.py test_01_basic.py test_02_download.py test_03_goaway.py test_04_stuttered.py test_05_errors.py test_06_eyeballs.py test_07_upload.py test_08_caddy.py test_09_push.py test_10_proxy.py test_11_unix.py test_12_reuse.py test_13_proxy_auth.py test_14_auth.py test_15_tracing.py test_16_info.py test_17_ssl_use.py test_18_methods.py test_19_shutdown.py test_20_websockets.py test_21_resolve.py test_22_httpsrr.py test_30_vsftpd.py test_31_vsftpds.py test_32_ftps_vsftpd.py test_40_socks.py test_50_scp.py test_51_sftp.py
libtest .gitignore CMakeLists.txt Makefile.am Makefile.inc cli_ftp_upload.c cli_h2_pausing.c cli_h2_serverpush.c cli_h2_upgrade_extreme.c cli_hx_download.c cli_hx_upload.c cli_tls_session_reuse.c cli_upload_pausing.c cli_ws_data.c cli_ws_pingpong.c first.c first.h lib1156.c lib1301.c lib1308.c lib1485.c lib1500.c lib1501.c lib1502.c lib1506.c lib1507.c lib1508.c lib1509.c lib1510.c lib1511.c lib1512.c lib1513.c lib1514.c lib1515.c lib1517.c lib1518.c lib1520.c lib1522.c lib1523.c lib1525.c lib1526.c lib1527.c lib1528.c lib1529.c lib1530.c lib1531.c lib1532.c lib1533.c lib1534.c lib1535.c lib1536.c lib1537.c lib1538.c lib1540.c lib1541.c lib1542.c lib1545.c lib1549.c lib1550.c lib1551.c lib1552.c lib1553.c lib1554.c lib1555.c lib1556.c lib1557.c lib1558.c lib1559.c lib1560.c lib1564.c lib1565.c lib1567.c lib1568.c lib1569.c lib1571.c lib1576.c lib1582.c lib1587.c lib1588.c lib1589.c lib1591.c lib1592.c lib1593.c lib1594.c lib1597.c lib1598.c lib1599.c lib1662.c lib1900.c lib1901.c lib1902.c lib1903.c lib1905.c lib1906.c lib1907.c lib1908.c lib1910.c lib1911.c lib1912.c lib1913.c lib1915.c lib1916.c lib1918.c lib1919.c lib1920.c lib1921.c lib1933.c lib1934.c lib1935.c lib1936.c lib1937.c lib1938.c lib1939.c lib1940.c lib1945.c lib1947.c lib1948.c lib1955.c lib1956.c lib1957.c lib1958.c lib1959.c lib1960.c lib1964.c lib1965.c lib1970.c lib1971.c lib1972.c lib1973.c lib1974.c lib1975.c lib1977.c lib1978.c lib2023.c lib2032.c lib2082.c lib2301.c lib2302.c lib2304.c lib2306.c lib2308.c lib2309.c lib2402.c lib2404.c lib2405.c lib2502.c lib2504.c lib2505.c lib2506.c lib2700.c lib3010.c lib3025.c lib3026.c lib3027.c lib3033.c lib3034.c lib3100.c lib3101.c lib3102.c lib3103.c lib3104.c lib3105.c lib3207.c lib3208.c lib500.c lib501.c lib502.c lib503.c lib504.c lib505.c lib506.c lib507.c lib508.c lib509.c lib510.c lib511.c lib512.c lib513.c lib514.c lib515.c lib516.c lib517.c lib518.c lib519.c lib520.c lib521.c lib523.c lib524.c lib525.c lib526.c lib530.c lib533.c lib536.c lib537.c lib539.c lib540.c lib541.c lib542.c lib543.c lib544.c lib547.c lib549.c lib552.c lib553.c lib554.c lib555.c lib556.c lib557.c lib558.c lib559.c lib560.c lib562.c lib564.c lib566.c lib567.c lib568.c lib569.c lib570.c lib571.c lib572.c lib573.c lib574.c lib575.c lib576.c lib578.c lib579.c lib582.c lib583.c lib586.c lib589.c lib590.c lib591.c lib597.c lib598.c lib599.c lib643.c lib650.c lib651.c lib652.c lib653.c lib654.c lib655.c lib658.c lib659.c lib661.c lib666.c lib667.c lib668.c lib670.c lib674.c lib676.c lib677.c lib678.c lib694.c lib695.c lib751.c lib753.c lib757.c lib758.c lib766.c memptr.c mk-lib1521.pl test1013.pl test1022.pl test307.pl test610.pl test613.pl testtrace.c testtrace.h testutil.c testutil.h unitcheck.h
server .checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc dnsd.c first.c first.h getpart.c mqttd.c resolve.c rtspd.c sockfilt.c socksd.c sws.c tftpd.c util.c
tunit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.c
unit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md unit1300.c unit1302.c unit1303.c unit1304.c unit1305.c unit1307.c unit1309.c unit1323.c unit1330.c unit1395.c unit1396.c unit1397.c unit1398.c unit1399.c unit1600.c unit1601.c unit1602.c unit1603.c unit1605.c unit1606.c unit1607.c unit1608.c unit1609.c unit1610.c unit1611.c unit1612.c unit1614.c unit1615.c unit1616.c unit1620.c unit1625.c unit1626.c unit1627.c unit1636.c unit1650.c unit1651.c unit1652.c unit1653.c unit1654.c unit1655.c unit1656.c unit1657.c unit1658.c unit1660.c unit1661.c unit1663.c unit1664.c unit1666.c unit1667.c unit1668.c unit1669.c unit1674.c unit1675.c unit1676.c unit1979.c unit1980.c unit2600.c unit2601.c unit2602.c unit2603.c unit2604.c unit2605.c unit3200.c unit3205.c unit3211.c unit3212.c unit3213.c unit3214.c unit3216.c unit3219.c unit3300.c unit3301.c unit3302.c
.gitignore CMakeLists.txt Makefile.am allversions.pm appveyor.pm azure.pm config.in configurehelp.pm.in devtest.pl dictserver.py directories.pm ech_combos.py ech_tests.sh ftpserver.pl getpart.pm globalconfig.pm http-server.pl http2-server.pl http3-server.pl memanalyze.pl memanalyzer.pm negtelnetserver.py nghttpx.conf pathhelp.pm processhelp.pm requirements.txt rtspserver.pl runner.pm runtests.pl secureserver.pl serverhelp.pm servers.pm smbserver.py sshhelp.pm sshserver.pl test1119.pl test1135.pl test1139.pl test1140.pl test1165.pl test1167.pl test1173.pl test1175.pl test1177.pl test1222.pl test1275.pl test1276.pl test1477.pl test1486.pl test1488.pl test1544.pl test1707.pl test745.pl test971.pl testcurl.pl testutil.pm tftpserver.pl util.py valgrind.pm valgrind.supp
.clang-tidy.yml .dir-locals.el .editorconfig .git-blame-ignore-revs .gitattributes .gitignore .mailmap CHANGES.md CMakeLists.txt COPYING Dockerfile GIT-INFO.md Makefile.am README README.md RELEASE-NOTES REUSE.toml SECURITY.md acinclude.m4 appveyor.sh appveyor.yml configure.ac curl-config.in libcurl.pc.in renovate.json
examples .env config.ini crypto_test.lua env_test.lua fs_example.lua http_server.lua https_test.lua ini_example.lua json.lua log.lua path_fs_example.lua process_example.lua request_download.lua request_test.lua run_all.lua sqlite_example.lua sqlite_http_template.lua stash_test.lua template_test.lua timer.lua websocket.lua
iniparser
.github
ISSUE_TEMPLATE config.yml
workflows disable-pull-requests.yml trigger-gitlab-ci.yml
cmake JoinPaths.cmake config.cmake.in pc.in
example iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.ini
src dictionary.c dictionary.h iniparser.c iniparser.h
test
ressources
bad_ini ends_well.ini twisted-errors.ini twisted-ofkey.ini twisted-ofval.ini
good_ini empty.ini spaced.ini spaced2.ini twisted.ini
gruezi.ini old.ini quotes.ini utf8.ini
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.h
.cmake-format.py .gitignore .gitlab-ci.yml .gitmessage .travis.yml AUTHORS CMakeLists.txt FAQ-en.md FAQ-zhcn.md INSTALL LICENSE README.md compile_commands.json
jinjac
example CMakeLists.txt example.c
jinjac_test_app CMakeLists.txt jinjac_test_app.c
libjinjac
include jinjac.h
src CMakeLists.txt ast.c ast.h block_statement.c block_statement.h buffer.c buffer.h buildin.c buildin.h common.h convert.c convert.h flex_decl.h jfunction.c jfunction.h jinja_expression.l jinja_expression.y jinjac_parse.c jinjac_parse.h jinjac_stream.c jinjac_stream.h jlist.c jlist.h jobject.c jobject.h parameter.c parameter.h str_obj.c str_obj.h trace.c trace.h
CMakeLists.txt
test .gitignore CMakeLists.txt autotest.rb test_01.expected test_01.jinja test_01b.expected test_01b.jinja test_01c.expected test_01c.jinja test_01d.expected test_01d.jinja test_02.expected test_02.jinja test_03.expected test_03.jinja test_04.expected test_04.jinja test_05.expected test_05.jinja test_06.expected test_06.jinja test_07.expected test_07.jinja test_08.expected test_08.jinja test_08b.expected test_08b.jinja test_09.expected test_09.jinja test_10.expected test_10.jinja test_11.expected test_11.jinja test_12.expected test_12.jinja test_13.expected test_13.jinja test_14.expected test_14.jinja test_15.expected test_15.jinja test_16.expected test_16.jinja test_17.expected test_17.jinja test_18.expected test_18.jinja test_18b.expected test_18b.jinja test_18c.expected test_18c.jinja test_19.expected test_19.jinja test_19b.expected test_19b.jinja test_19c.expected test_19c.jinja test_19d.expected test_19d.jinja test_19e.expected test_19e.jinja test_19f.expected test_19f.jinja test_20.expected test_20.jinja test_21.expected test_21.jinja test_22.expected test_22.jinja test_22a.expected test_22a.jinja test_22b.expected test_22b.jinja test_23.expected test_23.jinja test_24.expected test_24.jinja
.gitignore CMakeLists.txt LICENSE.txt README.md build_coverage.sh build_debug.sh build_release.sh cppcheck_analysis.sh
libev Changes LICENSE Makefile Makefile.am Makefile.in README Symbols.ev Symbols.event aclocal.m4 autogen.sh compile config.guess config.h config.h.in config.status config.sub configure configure.ac depcomp ev++.h ev.3 ev.c ev.h ev.pod ev_epoll.c ev_kqueue.c ev_poll.c ev_port.c ev_select.c ev_vars.h ev_win32.c ev_wrap.h event.c event.h install-sh libev.m4 libtool ltmain.sh missing mkinstalldirs stamp-h1
luajit
doc
img contact.png
bluequad-print.css bluequad.css contact.html ext_buffer.html ext_c_api.html ext_ffi.html ext_ffi_api.html ext_ffi_semantics.html ext_ffi_tutorial.html ext_jit.html ext_profiler.html extensions.html install.html luajit.html running.html
dynasm dasm_arm.h dasm_arm.lua dasm_arm64.h dasm_arm64.lua dasm_mips.h dasm_mips.lua dasm_mips64.lua dasm_ppc.h dasm_ppc.lua dasm_proto.h dasm_x64.lua dasm_x86.h dasm_x86.lua dynasm.lua
etc luajit.1 luajit.pc
src
host .gitignore README buildvm.c buildvm.h buildvm_asm.c buildvm_fold.c buildvm_lib.c buildvm_libbc.h buildvm_peobj.c genlibbc.lua genminilua.lua genversion.lua minilua.c
jit .gitignore bc.lua bcsave.lua dis_arm.lua dis_arm64.lua dis_arm64be.lua dis_mips.lua dis_mips64.lua dis_mips64el.lua dis_mips64r6.lua dis_mips64r6el.lua dis_mipsel.lua dis_ppc.lua dis_x64.lua dis_x86.lua dump.lua p.lua v.lua zone.lua
.gitignore Makefile Makefile.dep lauxlib.h lib_aux.c lib_base.c lib_bit.c lib_buffer.c lib_debug.c lib_ffi.c lib_init.c lib_io.c lib_jit.c lib_math.c lib_os.c lib_package.c lib_string.c lib_table.c lj_alloc.c lj_alloc.h lj_api.c lj_arch.h lj_asm.c lj_asm.h lj_asm_arm.h lj_asm_arm64.h lj_asm_mips.h lj_asm_ppc.h lj_asm_x86.h lj_assert.c lj_bc.c lj_bc.h lj_bcdump.h lj_bcread.c lj_bcwrite.c lj_buf.c lj_buf.h lj_carith.c lj_carith.h lj_ccall.c lj_ccall.h lj_ccallback.c lj_ccallback.h lj_cconv.c lj_cconv.h lj_cdata.c lj_cdata.h lj_char.c lj_char.h lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_crecord.c lj_crecord.h lj_ctype.c lj_ctype.h lj_debug.c lj_debug.h lj_def.h lj_dispatch.c lj_dispatch.h lj_emit_arm.h lj_emit_arm64.h lj_emit_mips.h lj_emit_ppc.h lj_emit_x86.h lj_err.c lj_err.h lj_errmsg.h lj_ff.h lj_ffrecord.c lj_ffrecord.h lj_frame.h lj_func.c lj_func.h lj_gc.c lj_gc.h lj_gdbjit.c lj_gdbjit.h lj_ir.c lj_ir.h lj_ircall.h lj_iropt.h lj_jit.h lj_lex.c lj_lex.h lj_lib.c lj_lib.h lj_load.c lj_mcode.c lj_mcode.h lj_meta.c lj_meta.h lj_obj.c lj_obj.h lj_opt_dce.c lj_opt_fold.c lj_opt_loop.c lj_opt_mem.c lj_opt_narrow.c lj_opt_sink.c lj_opt_split.c lj_parse.c lj_parse.h lj_prng.c lj_prng.h lj_profile.c lj_profile.h lj_record.c lj_record.h lj_serialize.c lj_serialize.h lj_snap.c lj_snap.h lj_state.c lj_state.h lj_str.c lj_str.h lj_strfmt.c lj_strfmt.h lj_strfmt_num.c lj_strscan.c lj_strscan.h lj_tab.c lj_tab.h lj_target.h lj_target_arm.h lj_target_arm64.h lj_target_mips.h lj_target_ppc.h lj_target_x86.h lj_trace.c lj_trace.h lj_traceerr.h lj_udata.c lj_udata.h lj_vm.h lj_vmevent.c lj_vmevent.h lj_vmmath.c ljamalg.c lua.h lua.hpp luaconf.h luajit.c luajit_rolling.h lualib.h msvcbuild.bat nxbuild.bat ps4build.bat ps5build.bat psvitabuild.bat vm_arm.dasc vm_arm64.dasc vm_mips.dasc vm_mips64.dasc vm_ppc.dasc vm_x64.dasc vm_x86.dasc xb1build.bat xedkbuild.bat
.gitattributes .gitignore .relver COPYRIGHT Makefile README
sqlite shell.c sqlite3.c sqlite3.h sqlite3ext.h
wolfssl
.github
ISSUE_TEMPLATE bug_report.yaml other.yaml
actions
install-apt-deps action.yml
scripts
zephyr-4.x external_libc.conf zephyr-test.sh
openssl-ech.sh tls-anvil-test.sh
workflows
disabled haproxy.yml hitch.yml hostap.yml
hostap-files
configs
07c9f183ea744ac04585fb6dd10220c75a5e2e74 hostapd.config tests wpa_supplicant.config
b607d2723e927a3446d89aed813f1aa6068186bb hostapd.config tests wpa_supplicant.config
hostap_2_10 extra.patch hostapd.config tests wpa_supplicant.config
Makefile README dbus-wpa_supplicant.conf
ada.yml arduino.yml async-examples.yml async.yml atecc608-sim.yml bind.yml cmake-autoconf.yml cmake.yml codespell.yml coverity-scan-fixes.yml cryptocb-only.yml curl.yml cyrus-sasl.yml disable-pk-algs.yml docker-Espressif.yml docker-OpenWrt.yml emnet-nonblock.yml fil-c.yml freertos-mem-track.yml gencertbuf.yml grpc.yml haproxy.yml hostap-vm.yml intelasm-c-fallback.yml ipmitool.yml jwt-cpp.yml krb5.yml libspdm.yml libssh2.yml libvncserver.yml linuxkm.yml macos-apple-native-cert-validation.yml mbedtls.sh mbedtls.yml membrowse-comment.yml membrowse-onboard.yml membrowse-report.yml memcached.sh memcached.yml mono.yml mosquitto.yml msmtp.yml msys2.yml multi-arch.yml multi-compiler.yml net-snmp.yml nginx.yml no-malloc.yml no-tls.yml nss.sh nss.yml ntp.yml ocsp.yml openldap.yml openssh.yml openssl-ech.yml opensslcoexist.yml openvpn.yml os-check.yml packaging.yml pam-ipmi.yml pq-all.yml pr-commit-check.yml psk.yml puf.yml python.yml rng-tools.yml rust-wrapper.yml se050-sim.yml smallStackSize.yml socat.yml softhsm.yml sssd.yml stm32-sim.yml stsafe-a120-sim.yml stunnel.yml symbol-prefixes.yml threadx.yml tls-anvil.yml trackmemory.yml watcomc.yml win-csharp-test.yml wolfCrypt-Wconversion.yml wolfboot-integration.yml wolfsm.yml xcode.yml zephyr-4.x.yml zephyr.yml
PULL_REQUEST_TEMPLATE.md SECURITY.md membrowse-targets.json
Docker
OpenWrt Dockerfile README.md runTests.sh
packaging
debian Dockerfile
fedora Dockerfile
wolfCLU Dockerfile README.md
yocto Dockerfile buildAndPush.sh
Dockerfile Dockerfile.cross-compiler README.md buildAndPush.sh include.am run.sh
IDE
ARDUINO
sketches
wolfssl_client README.md
wolfssl_server README.md
wolfssl_version README.md
README.md
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.h
AURIX Cpu0_Main.c README.md include.am user_settings.h wolf_main.c
Android Android.bp README.md include.am user_settings.h
CRYPTOCELL README.md include.am main.c user_settings.h
CSBENCH include.am user_settings.h
ECLIPSE
DEOS
deos_wolfssl .options
README.md deos_malloc.c include.am tls_wolfssl.c tls_wolfssl.h user_settings.h
MICRIUM README.md client_wolfssl.c client_wolfssl.h include.am server_wolfssl.c server_wolfssl.h user_settings.h wolfsslRunTests.c
RTTHREAD README.md include.am user_settings.h wolfssl_test.c
SIFIVE README.md include.am
Espressif
ESP-IDF
examples
template
VisualGDB wolfssl_template_IDF_v5.1_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_benchmark
VisualGDB wolfssl_benchmark_IDF_v4.4_ESP32.sln wolfssl_benchmark_IDF_v4.4_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32.sln wolfssl_benchmark_IDF_v5_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32C3.sln wolfssl_benchmark_IDF_v5_ESP32C3.vgdbproj wolfssl_benchmark_IDF_v5_ESP32S3.sln wolfssl_benchmark_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_client
VisualGDB README.md wolfssl_client_IDF_v5_ESP32.sln wolfssl_client_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include client-tls.h main.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild client-tls.c component.mk main.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbproj
wolfssl_server
VisualGDB README.md wolfssl_server_IDF_v5_ESP32.sln wolfssl_server_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h server-tls.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild component.mk main.c server-tls.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbproj
wolfssl_test
VisualGDB wolfssl_test-IDF_v5_ESP32.sln wolfssl_test-IDF_v5_ESP32.vgdbproj wolfssl_test-IDF_v5_ESP32C3.sln wolfssl_test-IDF_v5_ESP32C3.vgdbproj wolfssl_test-IDF_v5_ESP32C6.sln wolfssl_test-IDF_v5_ESP32C6.vgdbproj wolfssl_test_IDF_v5_ESP32S3.sln wolfssl_test_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32 sdkconfig.defaults.esp32c3 sdkconfig.defaults.esp32c6 sdkconfig.defaults.esp32h2 sdkconfig.defaults.esp32s2 sdkconfig.defaults.esp32s3 sdkconfig.defaults.esp8266 testAll.sh testMonitor.sh wolfssl_test_ESP8266.sln wolfssl_test_ESP8266.vgdbproj
wolfssl_test_idf
VisualGDB VisualGDB_wolfssl_test_idf.sln VisualGDB_wolfssl_test_idf.vgdbproj
main CMakeLists.txt Kconfig.projbuild component.mk main.c main_wip.c.ex time_helper.c time_helper.h
CMakeLists.txt Kconfig.projbuild README.md component.mk sdkconfig.defaults
README.md
libs CMakeLists.txt README.md component.mk tigard.cfg
test CMakeLists.txt README.md component.mk test_wolfssl.c
README.md README_32se.md UPDATE.md compileAllExamples.sh dummy_config_h dummy_test_paths.h setup.sh setup_win.bat user_settings.h
README.md include.am
GCC-ARM
Header user_settings.h
Source armtarget.c benchmark_main.c test_main.c tls_client.c tls_server.c wolf_main.c
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ld
Gaisler-BCC README.md include.am
HEXAGON
DSP Makefile wolfssl_dsp.idl
Makefile README.md build.sh ecc-verify-benchmark.c ecc-verify.c include.am user_settings.h
HEXIWEAR
wolfSSL_HW .cwGeneratedFileSetLog user_settings.h
IAR-EWARM
Projects
benchmark benchmark-main.c current_time.c wolfCrypt-benchmark.ewd wolfCrypt-benchmark.ewp
common minimum-startup.c wolfssl.icf
lib wolfSSL-Lib.ewd wolfSSL-Lib.ewp
test test-main.c wolfCrypt-test.ewd wolfCrypt-test.ewp
user_settings.h wolfssl.eww
embOS
SAMV71_XULT
embOS_SAMV71_XULT_Linker_Script samv71q21_wolfssl.icf
embOS_SAMV71_XULT_user_settings user_settings.h user_settings_simple_example.h user_settings_verbose_example.h
embOS_wolfcrypt_benchmark_SAMV71_XULT
Application runBenchmarks.c
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewp
embOS_wolfcrypt_lib_SAMV71_XULT README_wolfcrypt_lib wolfcrypt_lib.ewd wolfcrypt_lib.ewp
embOS_wolfcrypt_test_SAMV71_XULT
Application runWolfcryptTests.c
README_wolfcrypt_test wolfcrypt_test.ewd wolfcrypt_test.ewp
README_SAMV71
custom_port
custom_port_Linker_Script samv71q21_wolfssl.icf
custom_port_user_settings user_settings.h
wolfcrypt_benchmark_custom_port
Application runBenchmarks.c
wolfcrypt_test_custom_port
Application runWolfcryptTests.c
README_custom_port
extract_trial_here README_extract_trial_here
README
.gitignore README
IAR-MSP430 Makefile README.md include.am main.c user_settings.h
INTIME-RTOS Makefile README.md include.am libwolfssl.c libwolfssl.vcxproj user_settings.h wolfExamples.c wolfExamples.h wolfExamples.sln wolfExamples.vcxproj wolfssl-lib.sln wolfssl-lib.vcxproj
Infineon README.md include.am user_settings.h
KDS
config user_settings.h
include.am
LINUX-SGX README.md build.sh clean.sh include.am sgx_t_static.mk
LPCXPRESSO
lib_wolfssl lpc_18xx_port.c user_settings.h
wolf_example
src lpc_18xx_startup.c wolfssl_example.c
readme.txt
README.md
M68K
benchmark Makefile main.cpp
testwolfcrypt Makefile main.cpp
Makefile README.md include.am user_settings.h
MCUEXPRESSO
RT1170 fsl_caam_c.patch fsl_caam_h.patch user_settings.h
benchmark
source run_benchmark.c
wolfssl liblinks.xml
README.md include.am user_settings.h wolfcrypt_test.c
MDK-ARM
LPC43xx time-LCP43xx.c
MDK-ARM
wolfSSL Retarget.c cert_data.c cert_data.h config-BARE-METAL.h config-FS.h config-RTX-TCP-FS.h config-WOLFLIB.h main.c shell.c time-CortexM3-4.c time-dummy.c wolfssl_MDK_ARM.c wolfssl_MDK_ARM.h
STM32F2xx_StdPeriph_Lib time-STM32F2xx.c
MDK5-ARM
Conf user_settings.h
Inc wolfssl_MDK_ARM.h
Projects
CryptBenchmark Abstract.txt CryptBenchmark.sct CryptBenchmark.uvoptx CryptBenchmark.uvprojx main.c
CryptTest Abstract.txt CryptTest.sct CryptTest.uvoptx CryptTest.uvprojx main.c
EchoClient Abstract.txt EchoClient.uvoptx EchoClient.uvprojx main.c wolfssl-link.sct
EchoServer Abstract.txt EchoServer.uvoptx EchoServer.uvprojx main.c wolfssl-link.sct
SimpleClient Abstract.txt SimpleClient.uvoptx SimpleClient.uvprojx main.c wolfssl-link.sct
SimpleServer Abstract.txt SimpleServer.uvoptx SimpleServer.uvprojx main.c wolfssl-link.sct
wolfSSL-Full Abstract.txt main.c shell.c time-CortexM3-4.c wolfsslFull.uvoptx wolfsslFull.uvprojx
wolfSSL-Lib Abstract.txt wolfSSL-Lib.uvoptx wolfSSL-Lib.uvprojx
Src ssl-dummy.c
README.md include.am
MPLABX16
wolfcrypt_test.X
nbproject
private configurations.xml private.xml
configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
README.md include.am main.c user_settings.h
MQX Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.h
MSVS-2019-AZSPHERE
client client.c client.h
server server.c server.h
shared util.h
wolfssl_new_azsphere
HardwareDefinitions
avnet_mt3620_sk
inc
hw template_appliance.h
template_appliance.json
mt3620_rdb
inc
hw template_appliance.h
template_appliance.json
seeed_mt3620_mdb
inc
hw template_appliance.h
template_appliance.json
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.c
README.md include.am user_settings.h
MYSQL CMakeLists_wolfCrypt.txt CMakeLists_wolfSSL.txt do.sh
NDS README.md
NETOS Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.c
OPENSTM32 README.md
PlatformIO
examples
wolfssl_benchmark
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspace
wolfssl_test
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_test.code-workspace
README.md wolfssl_platformio.code-workspace
README.md include.am
QNX
CAAM-DRIVER Makefile
example-client Makefile client-tls.c
example-cmac Makefile cmac-test.c
example-server Makefile server-tls.c
testwolfcrypt Makefile
wolfssl Makefile user_settings.h
README.md include.am
RISCV
SIFIVE-HIFIVE1 Makefile README.md include.am main.c user_settings.h
SIFIVE-UNLEASHED README.md include.am
include.am
ROWLEY-CROSSWORKS-ARM Kinetis_FlashPlacement.xml README.md arm_startup.c benchmark_main.c hw.h include.am kinetis_hw.c retarget.c test_main.c user_settings.h wolfssl.hzp wolfssl_ltc.hzp
Renesas
cs+
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
t4_demo README_en.txt README_jp.txt t4_demo.mtpj wolf_client.c wolf_demo.h wolf_main.c wolf_server.c
test test.mtpj test_main.c
wolfssl_lib wolfssl_lib.mtpj
README include.am
e2studio
DK-S7G2
benchmark-template
src app_entry.c
example_server-template
src app_entry.c
wolfcrypttest-template
src app_entry.c
wolfssl-template-project configuration.xml
README.md include.am user_settings.h
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
tools generate_rsa_keypair.sh genhexbuf.pl rsa_pss_sign.sh
wolfssl
src .gitkeep
wolfcrypt
src .gitkeep
README include.am
RA6M3
benchmark-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
client-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
common
ra6m3g README.md
src freertos_tcp_port.c
user_settings.h util.h
server-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
test-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl
src .gitkeep
wolfcrypt .gitkeep
README.md README_APRA6M_en.md README_APRA6M_jp.md include.am
RA6M3G README.md
RA6M4
common user_settings.h wolfssl_demo.h
test
key_data key_data.h key_data_sce.c
src
SEGGER_RTT myprint.c
common .gitignore
test_main.c wolf_client.c wolfssl_sce_unit_test.c
test_RA6M4Debug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
README.md include.am
RX65N
GR-ROSE
common strings.h unistd.h user_settings.h wolfssl_dummy.c
smc smc.scfg
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
test.rcpc test_HardwareDebug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
README_EN.md README_JP.md include.am
RSK
resource section.esi
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h
InstructionManualForExample_RSK+RX65N-2MB_EN.pdf InstructionManualForExample_RSK+RX65N-2MB_JP.pdf README_EN.md README_JP.md include.am
RX72N
EnvisionKit
Simple
common sectioninfo.esi wolfssl_dummy.c
test
src
client simple_tcp_client.c simple_tls_tsip_client.c
server simple_tcp_server.c simple_tls_server.c
test_main.c wolfssl_simple_demo.h
test.rcpc test.scfg test_HardwareDebug.launch
wolfssl wolfssl.rcpc
README_EN.md README_JP.md
resource section.esi
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.c
InstructionManualForExample_RX72N_EnvisonKit_EN.pdf InstructionManualForExample_RX72N_EnvisonKit_JP.pdf README_EN.md README_JP.md include.am
RZN2L
common user_settings.h wolfssl_demo.h
test
src
serial_io app_print.c
test wolf_client.c wolf_server.c wolfssl_rsip_unit_test.c
wolfCrypt .gitignore
wolfSSL .gitignore
local_system_init.c rzn2l_tst_thread_entry.c wolfssl_dummy.c
README.md include.am
SK-S7G2
common user_settings.h
wolfssl_lib configuration.xml
.gitignore README.md include.am
STARCORE README.txt include.am starcore_test.c user_settings.h
STM32Cube README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.h
SimplicityStudio README.md include.am test_wolf.c user_settings.h
TRUESTUDIO
wolfssl user_settings.h
README include.am
VS-ARM README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VS-AZURE-SPHERE
client app_manifest.json client.c client.h client.vcxproj
server app_manifest.json server.c server.h server.vcxproj
shared util.h
wolfcrypt_test app_manifest.json wolfcrypt_test.vcxproj
README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VisualDSP include.am user_settings.h wolf_tasks.c
WICED-STUDIO README include.am user_settings.h
WIN README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxproj
WIN-SGX ReadMe.txt include.am wolfSSL_SGX.edl wolfSSL_SGX.sln wolfSSL_SGX.vcxproj
WIN-SRTP-KDF-140-3 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WIN10 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WINCE README.md include.am user_settings.h user_settings.h.140-2-deprecated
WORKBENCH README.md include.am
XCODE
Benchmark
wolfBench
Assets.xcassets
AppIcon.appiconset Contents.json
Base.lproj LaunchScreen.storyboard Main.storyboard
AppDelegate.h AppDelegate.m Info.plist ViewController.h ViewController.m main.m
wolfBench.xcodeproj project.pbxproj
include.am
wolfssl-FIPS.xcodeproj project.pbxproj
wolfssl.xcodeproj project.pbxproj
wolfssl_testsuite.xcodeproj project.pbxproj
README.md build-for-i386.sh include.am user_settings.h
XCODE-FIPSv2
macOS-C++
Intel user_settings.h
M1 user_settings.h
include.am user_settings.h
XCODE-FIPSv5 README include.am user_settings.h
XCODE-FIPSv6 README include.am user_settings.h
XilinxSDK
2018_2 lscript.ld
2019_2
wolfCrypt_example
src lscript.ld
wolfCrypt_example_system wolfCrypt_example_system.sprj
2022_1
wolfCrypt_FreeRTOS_example wolfCrypt_FreeRTOS_example.prj
wolfCrypt_FreeRTOS_example_system wolfCrypt_FreeRTOS_example_system.sprj
wolfCrypt_example wolfCrypt_example.prj
wolfCrypt_example_system wolfCrypt_example_system.sprj
.gitignore
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.c
apple-universal
wolfssl-multiplatform
wolfssl-multiplatform
Assets.xcassets
AccentColor.colorset Contents.json
AppIcon.appiconset Contents.json
Contents.json
ContentView.swift simple_client_example.c simple_client_example.h wolfssl-multiplatform-Bridging-Header.h wolfssl_multiplatform.entitlements wolfssl_multiplatformApp.swift wolfssl_test_driver.c wolfssl_test_driver.h
wolfssl-multiplatform.xcodeproj project.pbxproj
.gitignore README.md build-wolfssl-framework.sh include.am
iotsafe Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.h
iotsafe-raspberrypi Makefile README.md client-tls13.c include.am main.c
mynewt README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.sh
zephyr README.md include.am
include.am
RTOS
nuttx
wolfssl .gitignore Kconfig Make.defs Makefile README.md setup-wolfssl.sh user_settings.h
include.am
bsdkm Makefile README.md bsdkm_wc_port.h include.am wolfkmod.c wolfkmod_aes.c x86_vecreg.c
certs
1024 ca-cert.der ca-cert.pem ca-key.der ca-key.pem client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der dh1024.der dh1024.pem dsa-pub-1024.pem dsa1024.der dsa1024.pem include.am rsa1024.der server-cert.der server-cert.pem server-key.der server-key.pem
3072 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
4096 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
acert
rsa_pss acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem
acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem include.am
aia ca-issuers-cert.pem multi-aia-cert.pem overflow-aia-cert.pem
crl
extra-crls ca-int-cert-revoked.pem claim-root.pem crl_critical_entry.pem crlnum_57oct.pem crlnum_64oct.pem general-server-crl.pem large_crlnum.pem large_crlnum2.pem
hash_der 0fdb2da4.r0
hash_pem 0fdb2da4.r0
bad_time_fmt.pem ca-int-ecc.pem ca-int.pem ca-int2-ecc.pem ca-int2.pem caEcc384Crl.pem caEccCrl.der caEccCrl.pem cliCrl.pem client-int-ecc.pem client-int.pem crl.der crl.pem crl.revoked crl2.der crl2.pem crl_reason.pem crl_rsapss.pem eccCliCRL.pem eccSrvCRL.pem gencrls.sh include.am server-goodaltCrl.pem server-goodaltwildCrl.pem server-goodcnCrl.pem server-goodcnwildCrl.pem server-int-ecc.pem server-int.pem wolfssl.cnf
dilithium bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.am
ecc bp256r1-key.der bp256r1-key.pem ca-secp256k1-cert.pem ca-secp256k1-key.pem client-bp256r1-cert.der client-bp256r1-cert.pem client-secp256k1-cert.der client-secp256k1-cert.pem genecc.sh include.am secp256k1-key.der secp256k1-key.pem secp256k1-param.pem secp256k1-privkey.der secp256k1-privkey.pem server-bp256r1-cert.der server-bp256r1-cert.pem server-secp256k1-cert.der server-secp256k1-cert.pem server2-secp256k1-cert.der server2-secp256k1-cert.pem wolfssl.cnf wolfssl_384.cnf
ed25519 ca-ed25519-key.der ca-ed25519-key.pem ca-ed25519-priv.der ca-ed25519-priv.pem ca-ed25519.der ca-ed25519.pem client-ed25519-key.der client-ed25519-key.pem client-ed25519-priv.der client-ed25519-priv.pem client-ed25519.der client-ed25519.pem eddsa-ed25519.der eddsa-ed25519.pem gen-ed25519-certs.sh gen-ed25519-keys.sh gen-ed25519.sh include.am root-ed25519-key.der root-ed25519-key.pem root-ed25519-priv.der root-ed25519-priv.pem root-ed25519.der root-ed25519.pem server-ed25519-cert.pem server-ed25519-key.der server-ed25519-key.pem server-ed25519-priv.der server-ed25519-priv.pem server-ed25519.der server-ed25519.pem
ed448 ca-ed448-key.der ca-ed448-key.pem ca-ed448-priv.der ca-ed448-priv.pem ca-ed448.der ca-ed448.pem client-ed448-key.der client-ed448-key.pem client-ed448-priv.der client-ed448-priv.pem client-ed448.der client-ed448.pem gen-ed448-certs.sh gen-ed448-keys.sh include.am root-ed448-key.der root-ed448-key.pem root-ed448-priv.der root-ed448-priv.pem root-ed448.der root-ed448.pem server-ed448-cert.pem server-ed448-key.der server-ed448-key.pem server-ed448-priv.der server-ed448-priv.pem server-ed448.der server-ed448.pem
external DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.am
falcon bench_falcon_level1_key.der bench_falcon_level5_key.der include.am
intermediate
ca_false_intermediate gentestcert.sh int_ca.key server.key test_ca.key test_ca.pem test_int_not_cacert.pem test_sign_bynoca_srv.pem wolfssl_base.conf wolfssl_srv.conf
ca-ecc-bad-aki.der ca-ecc-bad-aki.pem ca-int-cert.der ca-int-cert.pem ca-int-ecc-cert.der ca-int-ecc-cert.pem ca-int-ecc-key.der ca-int-ecc-key.pem ca-int-key.der ca-int-key.pem ca-int2-cert.der ca-int2-cert.pem ca-int2-ecc-cert.der ca-int2-ecc-cert.pem ca-int2-ecc-key.der ca-int2-ecc-key.pem ca-int2-key.der ca-int2-key.pem client-chain-alt-ecc.pem client-chain-alt.pem client-chain-ecc.der client-chain-ecc.pem client-chain.der client-chain.pem client-int-cert.der client-int-cert.pem client-int-ecc-cert.der client-int-ecc-cert.pem genintcerts.sh include.am server-chain-alt-ecc.pem server-chain-alt.pem server-chain-ecc.der server-chain-ecc.pem server-chain-short.pem server-chain.der server-chain.pem server-int-cert.der server-int-cert.pem server-int-ecc-cert.der server-int-ecc-cert.pem
lms bc_hss_L2_H5_W8_root.der bc_hss_L3_H5_W4_root.der bc_lms_chain_ca.der bc_lms_chain_leaf.der bc_lms_native_bc_root.der bc_lms_sha256_h10_w8_root.der bc_lms_sha256_h5_w4_root.der include.am
mldsa README.txt include.am mldsa44-cert.der mldsa44-cert.pem mldsa44-key.pem mldsa44_bare-priv.der mldsa44_bare-seed.der mldsa44_oqskeypair.der mldsa44_priv-only.der mldsa44_pub-spki.der mldsa44_seed-only.der mldsa44_seed-priv.der mldsa65-cert.der mldsa65-cert.pem mldsa65-key.pem mldsa65_bare-priv.der mldsa65_bare-seed.der mldsa65_oqskeypair.der mldsa65_priv-only.der mldsa65_pub-spki.der mldsa65_seed-only.der mldsa65_seed-priv.der mldsa87-cert.der mldsa87-cert.pem mldsa87-key.pem mldsa87_bare-priv.der mldsa87_bare-seed.der mldsa87_oqskeypair.der mldsa87_priv-only.der mldsa87_pub-spki.der mldsa87_seed-only.der mldsa87_seed-priv.der
ocsp imposter-root-ca-cert.der imposter-root-ca-cert.pem imposter-root-ca-key.der imposter-root-ca-key.pem include.am index-ca-and-intermediate-cas.txt index-ca-and-intermediate-cas.txt.attr index-intermediate1-ca-issued-certs.txt index-intermediate1-ca-issued-certs.txt.attr index-intermediate2-ca-issued-certs.txt index-intermediate2-ca-issued-certs.txt.attr index-intermediate3-ca-issued-certs.txt index-intermediate3-ca-issued-certs.txt.attr intermediate1-ca-cert.der intermediate1-ca-cert.pem intermediate1-ca-key.der intermediate1-ca-key.pem intermediate2-ca-cert.der intermediate2-ca-cert.pem intermediate2-ca-key.der intermediate2-ca-key.pem intermediate3-ca-cert.der intermediate3-ca-cert.pem intermediate3-ca-key.der intermediate3-ca-key.pem ocsp-responder-cert.der ocsp-responder-cert.pem ocsp-responder-key.der ocsp-responder-key.pem openssl.cnf renewcerts-for-test.sh renewcerts.sh root-ca-cert.der root-ca-cert.pem root-ca-crl.pem root-ca-key.der root-ca-key.pem server1-cert.der server1-cert.pem server1-chain-noroot.pem server1-key.der server1-key.pem server2-cert.der server2-cert.pem server2-key.der server2-key.pem server3-cert.der server3-cert.pem server3-key.der server3-key.pem server4-cert.der server4-cert.pem server4-key.der server4-key.pem server5-cert.der server5-cert.pem server5-key.der server5-key.pem test-leaf-response.der test-multi-response.der test-response-nointern.der test-response-rsapss.der test-response.der
p521 ca-p521-key.der ca-p521-key.pem ca-p521-priv.der ca-p521-priv.pem ca-p521.der ca-p521.pem client-p521-key.der client-p521-key.pem client-p521-priv.der client-p521-priv.pem client-p521.der client-p521.pem gen-p521-certs.sh gen-p521-keys.sh include.am root-p521-key.der root-p521-key.pem root-p521-priv.der root-p521-priv.pem root-p521.der root-p521.pem server-p521-cert.pem server-p521-key.der server-p521-key.pem server-p521-priv.der server-p521-priv.pem server-p521.der server-p521.pem
renewcerts wolfssl.cnf
rpk client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.der
rsapss ca-3072-rsapss-key.der ca-3072-rsapss-key.pem ca-3072-rsapss-priv.der ca-3072-rsapss-priv.pem ca-3072-rsapss.der ca-3072-rsapss.pem ca-rsapss-key.der ca-rsapss-key.pem ca-rsapss-priv.der ca-rsapss-priv.pem ca-rsapss.der ca-rsapss.pem client-3072-rsapss-key.der client-3072-rsapss-key.pem client-3072-rsapss-priv.der client-3072-rsapss-priv.pem client-3072-rsapss.der client-3072-rsapss.pem client-rsapss-key.der client-rsapss-key.pem client-rsapss-priv.der client-rsapss-priv.pem client-rsapss.der client-rsapss.pem gen-rsapss-keys.sh include.am renew-rsapss-certs.sh root-3072-rsapss-key.der root-3072-rsapss-key.pem root-3072-rsapss-priv.der root-3072-rsapss-priv.pem root-3072-rsapss.der root-3072-rsapss.pem root-rsapss-key.der root-rsapss-key.pem root-rsapss-priv.der root-rsapss-priv.pem root-rsapss.der root-rsapss.pem server-3072-rsapss-cert.pem server-3072-rsapss-key.der server-3072-rsapss-key.pem server-3072-rsapss-priv.der server-3072-rsapss-priv.pem server-3072-rsapss.der server-3072-rsapss.pem server-mix-rsapss-cert.pem server-rsapss-cert.pem server-rsapss-key.der server-rsapss-key.pem server-rsapss-priv.der server-rsapss-priv.pem server-rsapss.der server-rsapss.pem
sia timestamping-sia-cert.pem
slhdsa bench_slhdsa_sha2_128f_key.der bench_slhdsa_sha2_128s_key.der bench_slhdsa_sha2_192f_key.der bench_slhdsa_sha2_192s_key.der bench_slhdsa_sha2_256f_key.der bench_slhdsa_sha2_256s_key.der bench_slhdsa_shake128f_key.der bench_slhdsa_shake128s_key.der bench_slhdsa_shake192f_key.der bench_slhdsa_shake192s_key.der bench_slhdsa_shake256f_key.der bench_slhdsa_shake256s_key.der client-mldsa44-priv.pem client-mldsa44-sha2.der client-mldsa44-sha2.pem client-mldsa44-shake.der client-mldsa44-shake.pem gen-slhdsa-mldsa-certs.sh include.am root-slhdsa-sha2-128s-priv.der root-slhdsa-sha2-128s-priv.pem root-slhdsa-sha2-128s.der root-slhdsa-sha2-128s.pem root-slhdsa-shake-128s-priv.der root-slhdsa-shake-128s-priv.pem root-slhdsa-shake-128s.der root-slhdsa-shake-128s.pem server-mldsa44-priv.pem server-mldsa44-sha2.der server-mldsa44-sha2.pem server-mldsa44-shake.der server-mldsa44-shake.pem
sm2 ca-sm2-key.der ca-sm2-key.pem ca-sm2-priv.der ca-sm2-priv.pem ca-sm2.der ca-sm2.pem client-sm2-key.der client-sm2-key.pem client-sm2-priv.der client-sm2-priv.pem client-sm2.der client-sm2.pem fix_sm2_spki.py gen-sm2-certs.sh gen-sm2-keys.sh include.am root-sm2-key.der root-sm2-key.pem root-sm2-priv.der root-sm2-priv.pem root-sm2.der root-sm2.pem self-sm2-cert.pem self-sm2-key.pem self-sm2-priv.pem server-sm2-cert.der server-sm2-cert.pem server-sm2-key.der server-sm2-key.pem server-sm2-priv.der server-sm2-priv.pem server-sm2.der server-sm2.pem
statickeys dh-ffdhe2048-params.pem dh-ffdhe2048-pub.der dh-ffdhe2048-pub.pem dh-ffdhe2048.der dh-ffdhe2048.pem ecc-secp256r1.der ecc-secp256r1.pem gen-static.sh include.am x25519-pub.der x25519-pub.pem x25519.der x25519.pem
test
expired expired-ca.der expired-ca.pem expired-cert.der expired-cert.pem
catalog.txt cert-bad-neg-int.der cert-bad-oid.der cert-bad-utf8.der cert-ext-ia.cfg cert-ext-ia.der cert-ext-ia.pem cert-ext-joi.cfg cert-ext-joi.der cert-ext-joi.pem cert-ext-mnc.der cert-ext-multiple.cfg cert-ext-multiple.der cert-ext-multiple.pem cert-ext-nc-combined.der cert-ext-nc-combined.pem cert-ext-nc.cfg cert-ext-nc.der cert-ext-nc.pem cert-ext-ncdns.der cert-ext-ncdns.pem cert-ext-ncip.der cert-ext-ncip.pem cert-ext-ncmixed.der cert-ext-ncmulti.der cert-ext-ncmulti.pem cert-ext-ncrid.der cert-ext-ncrid.pem cert-ext-nct.cfg cert-ext-nct.der cert-ext-nct.pem cert-ext-ndir-exc.cfg cert-ext-ndir-exc.der cert-ext-ndir-exc.pem cert-ext-ndir.cfg cert-ext-ndir.der cert-ext-ndir.pem cert-ext-ns.der cert-over-max-altnames.cfg cert-over-max-altnames.der cert-over-max-altnames.pem cert-over-max-nc.cfg cert-over-max-nc.der cert-over-max-nc.pem client-ecc-cert-ski.hex cn-ip-literal.der cn-ip-wildcard.der crit-cert.pem crit-key.pem dh1024.der dh1024.pem dh512.der dh512.pem digsigku.pem encrypteddata.msg gen-badsig.sh gen-ext-certs.sh gen-testcerts.sh include.am kari-keyid-cms.msg ktri-keyid-cms.msg ossl-trusted-cert.pem server-badaltname.der server-badaltname.pem server-badaltnull.der server-badaltnull.pem server-badcn.der server-badcn.pem server-badcnnull.der server-badcnnull.pem server-cert-ecc-badsig.der server-cert-ecc-badsig.pem server-cert-rsa-badsig.der server-cert-rsa-badsig.pem server-duplicate-policy.pem server-garbage.der server-garbage.pem server-goodalt.der server-goodalt.pem server-goodaltwild.der server-goodaltwild.pem server-goodcn.der server-goodcn.pem server-goodcnwild.der server-goodcnwild.pem server-localhost.der server-localhost.pem smime-test-canon.p7s smime-test-multipart-badsig.p7s smime-test-multipart.p7s smime-test.p7s
test-pathlen assemble-chains.sh chainA-ICA1-key.pem chainA-ICA1-pathlen0.pem chainA-assembled.pem chainA-entity-key.pem chainA-entity.pem chainB-ICA1-key.pem chainB-ICA1-pathlen0.pem chainB-ICA2-key.pem chainB-ICA2-pathlen1.pem chainB-assembled.pem chainB-entity-key.pem chainB-entity.pem chainC-ICA1-key.pem chainC-ICA1-pathlen1.pem chainC-assembled.pem chainC-entity-key.pem chainC-entity.pem chainD-ICA1-key.pem chainD-ICA1-pathlen127.pem chainD-assembled.pem chainD-entity-key.pem chainD-entity.pem chainE-ICA1-key.pem chainE-ICA1-pathlen128.pem chainE-assembled.pem chainE-entity-key.pem chainE-entity.pem chainF-ICA1-key.pem chainF-ICA1-pathlen1.pem chainF-ICA2-key.pem chainF-ICA2-pathlen0.pem chainF-assembled.pem chainF-entity-key.pem chainF-entity.pem chainG-ICA1-key.pem chainG-ICA1-pathlen0.pem chainG-ICA2-key.pem chainG-ICA2-pathlen1.pem chainG-ICA3-key.pem chainG-ICA3-pathlen99.pem chainG-ICA4-key.pem chainG-ICA4-pathlen5.pem chainG-ICA5-key.pem chainG-ICA5-pathlen20.pem chainG-ICA6-key.pem chainG-ICA6-pathlen10.pem chainG-ICA7-key.pem chainG-ICA7-pathlen100.pem chainG-assembled.pem chainG-entity-key.pem chainG-entity.pem chainH-ICA1-key.pem chainH-ICA1-pathlen0.pem chainH-ICA2-key.pem chainH-ICA2-pathlen2.pem chainH-ICA3-key.pem chainH-ICA3-pathlen2.pem chainH-ICA4-key.pem chainH-ICA4-pathlen2.pem chainH-assembled.pem chainH-entity-key.pem chainH-entity.pem chainI-ICA1-key.pem chainI-ICA1-no_pathlen.pem chainI-ICA2-key.pem chainI-ICA2-no_pathlen.pem chainI-ICA3-key.pem chainI-ICA3-pathlen2.pem chainI-assembled.pem chainI-entity-key.pem chainI-entity.pem chainJ-ICA1-key.pem chainJ-ICA1-no_pathlen.pem chainJ-ICA2-key.pem chainJ-ICA2-no_pathlen.pem chainJ-ICA3-key.pem chainJ-ICA3-no_pathlen.pem chainJ-ICA4-key.pem chainJ-ICA4-pathlen2.pem chainJ-assembled.pem chainJ-entity-key.pem chainJ-entity.pem include.am refreshkeys.sh
test-serial0 ee_normal.pem ee_serial0.pem generate_certs.sh include.am intermediate_serial0.pem root_serial0.pem root_serial0_key.pem selfsigned_nonca_serial0.pem
xmss bc_xmss_chain_ca.der bc_xmss_chain_leaf.der bc_xmss_sha2_10_256_root.der bc_xmss_sha2_16_256_root.der bc_xmssmt_sha2_20_2_256_root.der bc_xmssmt_sha2_20_4_256_root.der bc_xmssmt_sha2_40_8_256_root.der include.am
ca-cert-chain.der ca-cert.der ca-cert.pem ca-ecc-cert.der ca-ecc-cert.pem ca-ecc-key.der ca-ecc-key.pem ca-ecc384-cert.der ca-ecc384-cert.pem ca-ecc384-key.der ca-ecc384-key.pem ca-key-pkcs8-attribute.der ca-key.der ca-key.pem check_dates.sh client-absolute-urn.pem client-ca-cert.der client-ca-cert.pem client-ca.pem client-cert-ext.der client-cert-ext.pem client-cert.der client-cert.pem client-crl-dist.der client-crl-dist.pem client-ecc-ca-cert.der client-ecc-ca-cert.pem client-ecc-cert.der client-ecc-cert.pem client-ecc384-cert.der client-ecc384-cert.pem client-ecc384-key.der client-ecc384-key.pem client-key.der client-key.pem client-keyEnc.pem client-keyPub.der client-keyPub.pem client-relative-uri.pem client-uri-cert.pem csr.attr.der csr.dsa.der csr.dsa.pem csr.ext.der csr.signed.der dh-priv-2048.der dh-priv-2048.pem dh-pub-2048.der dh-pub-2048.pem dh-pubkey-2048.der dh2048.der dh2048.pem dh3072.der dh3072.pem dh4096.der dh4096.pem dsa-pubkey-2048.der dsa2048.der dsa2048.pem dsa3072.der dsaparams.der dsaparams.pem ecc-client-key.der ecc-client-key.pem ecc-client-keyPub.der ecc-client-keyPub.pem ecc-key-comp.pem ecc-keyPkcs8.der ecc-keyPkcs8.pem ecc-keyPkcs8Enc.der ecc-keyPkcs8Enc.pem ecc-keyPub.der ecc-keyPub.pem ecc-params.der ecc-params.pem ecc-privOnlyCert.pem ecc-privOnlyKey.pem ecc-privkey.der ecc-privkey.pem ecc-privkeyPkcs8.der ecc-privkeyPkcs8.pem ecc-rsa-server.p12 empty-issuer-cert.pem entity-no-ca-bool-cert.pem entity-no-ca-bool-key.pem fpki-cert.der fpki-certpol-cert.der gen_revoked.sh include.am renewcerts.sh rid-cert.der rsa-pub-2048.pem rsa2048.der rsa3072.der server-cert-chain.der server-cert.der server-cert.pem server-ecc-comp.der server-ecc-comp.pem server-ecc-rsa.der server-ecc-rsa.pem server-ecc-self.der server-ecc-self.pem server-ecc.der server-ecc.pem server-ecc384-cert.der server-ecc384-cert.pem server-ecc384-key.der server-ecc384-key.pem server-key.der server-key.pem server-keyEnc.pem server-keyPkcs8.der server-keyPkcs8.pem server-keyPkcs8Enc.der server-keyPkcs8Enc.pem server-keyPkcs8Enc12.pem server-keyPkcs8Enc2.pem server-keyPub.der server-keyPub.pem server-revoked-cert.pem server-revoked-key.pem taoCert.txt test-ber-exp02-05-2022.p7b test-degenerate.p7b test-multiple-recipients.p7b test-servercert-rc2.p12 test-servercert.p12 test-stream-dec.p7b test-stream-sign.p7b wolfssl-website-ca.pem x942dh2048.der x942dh2048.pem
cmake
consumer CMakeLists.txt README.md main.c
modules FindARIA.cmake FindOQS.cmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.in
debian
source format
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.in
doc
dox_comments
header_files aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h puf.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wc_she.h wc_slhdsa.h wolfio.h
header_files-ja aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wolfio.h
formats
html
html_changes
search search.css search.js
customdoxygen.css doxygen.css menu.js menudata.js tabs.css
Doxyfile footer.html header.html mainpage.dox
pdf Doxyfile header.tex
images wolfssl_logo.png
QUIC.md README.txt README_DOXYGEN check_api.sh generate_documentation.sh include.am
examples
asn1 asn1.c dumpasn1.cfg gen_oid_names.rb include.am oid_names.h
async Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.h
benchmark include.am tls_bench.c tls_bench.h
client client.c client.h client.sln client.vcproj client.vcxproj include.am
configs README.md include.am user_settings_EBSnet.h user_settings_all.h user_settings_arduino.h user_settings_baremetal.h user_settings_ca.h user_settings_curve25519nonblock.h user_settings_dtls13.h user_settings_eccnonblock.h user_settings_espressif.h user_settings_fipsv2.h user_settings_fipsv5.h user_settings_min_ecc.h user_settings_openssl_compat.h user_settings_pkcs7.h user_settings_platformio.h user_settings_pq.h user_settings_rsa_only.h user_settings_stm32.h user_settings_template.h user_settings_tls12.h user_settings_tls13.h user_settings_wolfboot_keytools.h user_settings_wolfssh.h user_settings_wolftpm.h
crypto_policies
default wolfssl.txt
future wolfssl.txt
legacy wolfssl.txt
echoclient echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quit
echoserver echoserver.c echoserver.h echoserver.sln echoserver.vcproj echoserver.vcxproj include.am
ocsp_responder include.am ocsp_responder.c ocsp_responder.h
pem include.am pem.c
sctp include.am sctp-client-dtls.c sctp-client.c sctp-server-dtls.c sctp-server.c
server include.am server.c server.h server.sln server.vcproj server.vcxproj
README.md include.am
linuxkm
patches
5.10.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v17.patch
5.10.236 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v236.patch
5.14.0-570.58.1.el9_6 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v14-570v58v1-el9_6.patch
5.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v15.patch
5.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17.patch
5.17-ubuntu-jammy-tegra WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17-ubuntu-jammy-tegra.patch
6.1.73 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v1v73.patch
6.12 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v12.patch
6.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v15.patch
7.0 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-7v0.patch
regen-patches.sh
Kbuild Makefile README.md get_thread_size.c include.am linuxkm-fips-hash-wrapper.sh linuxkm-fips-hash.c linuxkm_memory.c linuxkm_memory.h linuxkm_wc_port.h lkcapi_aes_glue.c lkcapi_dh_glue.c lkcapi_ecdh_glue.c lkcapi_ecdsa_glue.c lkcapi_glue.c lkcapi_rsa_glue.c lkcapi_sha_glue.c module_exports.c.template module_hooks.c pie_redirect_table.c wolfcrypt.lds x86_vector_register_glue.c
m4 ax_add_am_macro.m4 ax_am_jobserver.m4 ax_am_macros.m4 ax_append_compile_flags.m4 ax_append_flag.m4 ax_append_link_flags.m4 ax_append_to_file.m4 ax_atomic.m4 ax_bsdkm.m4 ax_check_compile_flag.m4 ax_check_link_flag.m4 ax_compiler_version.m4 ax_count_cpus.m4 ax_create_generic_config.m4 ax_debug.m4 ax_file_escapes.m4 ax_harden_compiler_flags.m4 ax_linuxkm.m4 ax_print_to_file.m4 ax_pthread.m4 ax_require_defined.m4 ax_tls.m4 ax_vcs_checkout.m4 hexversion.m4 lib_socket_nsl.m4 visibility.m4
mcapi
wolfcrypt_mcapi.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
zlib.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README crypto.c crypto.h include.am mcapi_test.c user_settings.h
mplabx
wolfcrypt_benchmark.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README benchmark_main.c include.am test_main.c user_settings.h
mqx
util_lib
Sources include.am util.c util.h
wolfcrypt_benchmark
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfcrypt_test
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfssl include.am
wolfssl_client
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfssl_client_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
README
rpm include.am spec.in
scripts
bench bench_functions.sh
aria-cmake-build-test.sh asn1_oid_sum.pl benchmark.test benchmark_compare.sh cleanup_testfiles.sh crl-gen-openssl.test crl-revoked.test dertoc.pl dtls.test dtlscid.test external.test google.test include.am makedistsmall.sh memtest.sh ocsp-responder-openssl-interop.test ocsp-stapling-with-ca-as-responder.test ocsp-stapling-with-wolfssl-responder.test ocsp-stapling.test ocsp-stapling2.test ocsp-stapling_tls13multi.test ocsp.test openssl.test openssl_srtp.test pem.test ping.test pkcallbacks.test psk.test resume.test rsapss.test sniffer-gen.sh sniffer-ipv6.pcap sniffer-static-rsa.pcap sniffer-testsuite.test sniffer-tls12-keylog.out sniffer-tls12-keylog.pcap sniffer-tls12-keylog.sslkeylog sniffer-tls13-dh-resume.pcap sniffer-tls13-dh.pcap sniffer-tls13-ecc-resume.pcap sniffer-tls13-ecc.pcap sniffer-tls13-hrr.pcap sniffer-tls13-keylog.out sniffer-tls13-keylog.pcap sniffer-tls13-keylog.sslkeylog sniffer-tls13-x25519-resume.pcap sniffer-tls13-x25519.pcap stm32l4-v4_0_1_build.sh tls13.test trusted_peer.test unit.test.in user_settings_asm.sh
src bio.c conf.c crl.c dtls.c dtls13.c include.am internal.c keys.c ocsp.c pk.c pk_ec.c pk_rsa.c quic.c sniffer.c ssl.c ssl_api_cert.c ssl_api_crl_ocsp.c ssl_api_pk.c ssl_asn1.c ssl_bn.c ssl_certman.c ssl_crypto.c ssl_ech.c ssl_load.c ssl_misc.c ssl_p7p12.c ssl_sess.c ssl_sk.c tls.c tls13.c wolfio.c x509.c x509_str.c
sslSniffer
sslSnifferTest README_WIN.md include.am snifftest.c sslSniffTest.vcproj sslSniffTest.vcxproj
README.md sslSniffer.vcproj sslSniffer.vcxproj
support gen-debug-trace-error-codes.sh include.am wolfssl.pc.in
tests
api api.h api_decl.h create_ocsp_test_blobs.py include.am test_aes.c test_aes.h test_arc4.c test_arc4.h test_ascon.c test_ascon.h test_ascon_kats.h test_asn.c test_asn.h test_blake2.c test_blake2.h test_camellia.c test_camellia.h test_certman.c test_certman.h test_chacha.c test_chacha.h test_chacha20_poly1305.c test_chacha20_poly1305.h test_cmac.c test_cmac.h test_curve25519.c test_curve25519.h test_curve448.c test_curve448.h test_des3.c test_des3.h test_dh.c test_dh.h test_digest.h test_dsa.c test_dsa.h test_dtls.c test_dtls.h test_ecc.c test_ecc.h test_ed25519.c test_ed25519.h test_ed448.c test_ed448.h test_evp.c test_evp.h test_evp_cipher.c test_evp_cipher.h test_evp_digest.c test_evp_digest.h test_evp_pkey.c test_evp_pkey.h test_hash.c test_hash.h test_hmac.c test_hmac.h test_md2.c test_md2.h test_md4.c test_md4.h test_md5.c test_md5.h test_mldsa.c test_mldsa.h test_mlkem.c test_mlkem.h test_ocsp.c test_ocsp.h test_ocsp_test_blobs.h test_ossl_asn1.c test_ossl_asn1.h test_ossl_bio.c test_ossl_bio.h test_ossl_bn.c test_ossl_bn.h test_ossl_cipher.c test_ossl_cipher.h test_ossl_dgst.c test_ossl_dgst.h test_ossl_dh.c test_ossl_dh.h test_ossl_dsa.c test_ossl_dsa.h test_ossl_ec.c test_ossl_ec.h test_ossl_ecx.c test_ossl_ecx.h test_ossl_mac.c test_ossl_mac.h test_ossl_obj.c test_ossl_obj.h test_ossl_p7p12.c test_ossl_p7p12.h test_ossl_pem.c test_ossl_pem.h test_ossl_rand.c test_ossl_rand.h test_ossl_rsa.c test_ossl_rsa.h test_ossl_sk.c test_ossl_sk.h test_ossl_x509.c test_ossl_x509.h test_ossl_x509_acert.c test_ossl_x509_acert.h test_ossl_x509_crypto.c test_ossl_x509_crypto.h test_ossl_x509_ext.c test_ossl_x509_ext.h test_ossl_x509_info.c test_ossl_x509_info.h test_ossl_x509_io.c test_ossl_x509_io.h test_ossl_x509_lu.c test_ossl_x509_lu.h test_ossl_x509_name.c test_ossl_x509_name.h test_ossl_x509_pk.c test_ossl_x509_pk.h test_ossl_x509_str.c test_ossl_x509_str.h test_ossl_x509_vp.c test_ossl_x509_vp.h test_pkcs12.c test_pkcs12.h test_pkcs7.c test_pkcs7.h test_poly1305.c test_poly1305.h test_random.c test_random.h test_rc2.c test_rc2.h test_ripemd.c test_ripemd.h test_rsa.c test_rsa.h test_sha.c test_sha.h test_sha256.c test_sha256.h test_sha3.c test_sha3.h test_sha512.c test_sha512.h test_she.c test_she.h test_signature.c test_signature.h test_slhdsa.c test_slhdsa.h test_sm2.c test_sm2.h test_sm3.c test_sm3.h test_sm4.c test_sm4.h test_tls.c test_tls.h test_tls13.c test_tls13.h test_tls_ext.c test_tls_ext.h test_wc_encrypt.c test_wc_encrypt.h test_wolfmath.c test_wolfmath.h test_x509.c test_x509.h
emnet
IP IP.h
Makefile emnet_nonblock_test.c emnet_shim.c
freertos-mem-track-repro FreeRTOS.h repro.c run.sh semphr.h task.h user_settings.h
swdev .gitignore Makefile README.md swdev.c swdev.h swdev_loader.c swdev_loader.h user_settings.h
CONF_FILES_README.md NCONF_test.cnf README TXT_DB.txt api.c include.am quic.c srp.c suites.c test-altchains.conf test-chains.conf test-dhprime.conf test-dtls-downgrade.conf test-dtls-fails-cipher.conf test-dtls-fails.conf test-dtls-group.conf test-dtls-mtu.conf test-dtls-reneg-client.conf test-dtls-reneg-server.conf test-dtls-resume.conf test-dtls-sha2.conf test-dtls-srtp-fails.conf test-dtls-srtp.conf test-dtls.conf test-dtls13-cid.conf test-dtls13-downgrade-fails.conf test-dtls13-downgrade.conf test-dtls13-pq-hybrid-extra-frag.conf test-dtls13-pq-hybrid-extra.conf test-dtls13-pq-hybrid-frag.conf test-dtls13-pq-standalone-frag.conf test-dtls13-pq-standalone.conf test-dtls13-psk.conf test-dtls13.conf test-ecc-cust-curves.conf test-ed25519.conf test-ed448.conf test-enckeys.conf test-fails.conf test-maxfrag-dtls.conf test-maxfrag.conf test-p521.conf test-psk-no-id-sha2.conf test-psk-no-id.conf test-psk.conf test-rsapss.conf test-sctp-sha2.conf test-sctp.conf test-sha2.conf test-sig.conf test-sm2.conf test-tls-downgrade.conf test-tls13-down.conf test-tls13-ecc.conf test-tls13-pq-hybrid-extra.conf test-tls13-pq-hybrid.conf test-tls13-pq-standalone.conf test-tls13-psk-certs.conf test-tls13-psk.conf test-tls13-slhdsa-fail.conf test-tls13-slhdsa-sha2.conf test-tls13-slhdsa-shake.conf test-tls13.conf test-trustpeer.conf test.conf unit.c unit.h utils.c utils.h w64wrapper.c
testsuite include.am testsuite.c testsuite.sln testsuite.vcproj testsuite.vcxproj utils.c utils.h
tirtos
packages
ti
net
wolfssl
tests
EK_TM4C1294XL
wolfcrypt
benchmark TM4C1294NC.icf benchmark.cfg main.c package.bld.hide package.xdc
test TM4C1294NC.icf main.c package.bld.hide package.xdc test.cfg
package.bld package.xdc package.xs
.gitignore README include.am products.mak wolfssl.bld wolfssl.mak
wolfcrypt
benchmark README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.am
src
port
Espressif
esp_crt_bundle README.md cacrt_all.pem cacrt_deprecated.pem cacrt_local.pem esp_crt_bundle.c gen_crt_bundle.py pio_install_cryptography.py
README.md esp32_aes.c esp32_mp.c esp32_sha.c esp32_util.c esp_sdk_mem_lib.c esp_sdk_time_lib.c esp_sdk_wifi_lib.c
Renesas README.md renesas_common.c renesas_fspsm_aes.c renesas_fspsm_rsa.c renesas_fspsm_sha.c renesas_fspsm_util.c renesas_rx64_hw_sha.c renesas_rx64_hw_util.c renesas_tsip_aes.c renesas_tsip_rsa.c renesas_tsip_sha.c renesas_tsip_util.c
af_alg afalg_aes.c afalg_hash.c wc_afalg.c
aria aria-crypt.c aria-cryptocb.c
arm armv8-32-aes-asm.S armv8-32-aes-asm_c.c armv8-32-chacha-asm.S armv8-32-chacha-asm_c.c armv8-32-curve25519.S armv8-32-curve25519_c.c armv8-32-mlkem-asm.S armv8-32-mlkem-asm_c.c armv8-32-poly1305-asm.S armv8-32-poly1305-asm_c.c armv8-32-sha256-asm.S armv8-32-sha256-asm_c.c armv8-32-sha3-asm.S armv8-32-sha3-asm_c.c armv8-32-sha512-asm.S armv8-32-sha512-asm_c.c armv8-aes-asm.S armv8-aes-asm_c.c armv8-aes.c armv8-chacha-asm.S armv8-chacha-asm_c.c armv8-curve25519.S armv8-curve25519_c.c armv8-mlkem-asm.S armv8-mlkem-asm_c.c armv8-poly1305-asm.S armv8-poly1305-asm_c.c armv8-sha256-asm.S armv8-sha256-asm_c.c armv8-sha256.c armv8-sha3-asm.S armv8-sha3-asm_c.c armv8-sha512-asm.S armv8-sha512-asm_c.c armv8-sha512.c cryptoCell.c cryptoCellHash.c thumb2-aes-asm.S thumb2-aes-asm_c.c thumb2-chacha-asm.S thumb2-chacha-asm_c.c thumb2-curve25519.S thumb2-curve25519_c.c thumb2-mlkem-asm.S thumb2-mlkem-asm_c.c thumb2-poly1305-asm.S thumb2-poly1305-asm_c.c thumb2-sha256-asm.S thumb2-sha256-asm_c.c thumb2-sha3-asm.S thumb2-sha3-asm_c.c thumb2-sha512-asm.S thumb2-sha512-asm_c.c
atmel README.md atmel.c
autosar README.md cryif.c crypto.c csm.c include.am test.c
caam README.md caam_aes.c caam_doc.pdf caam_driver.c caam_error.c caam_integrity.c caam_qnx.c caam_sha.c wolfcaam_aes.c wolfcaam_cmac.c wolfcaam_ecdsa.c wolfcaam_fsl_nxp.c wolfcaam_hash.c wolfcaam_hmac.c wolfcaam_init.c wolfcaam_qnx.c wolfcaam_rsa.c wolfcaam_seco.c wolfcaam_x25519.c
cavium README.md README_Octeon.md cavium_nitrox.c cavium_octeon_sync.c
cuda README.md aes-cuda.cu
cypress README.md psoc6_crypto.c
devcrypto README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.c
intel README.md quickassist.c quickassist_mem.c quickassist_sync.c
iotsafe iotsafe.c
kcapi README.md kcapi_aes.c kcapi_dh.c kcapi_ecc.c kcapi_hash.c kcapi_hmac.c kcapi_rsa.c
liboqs liboqs.c
maxim README.md max3266x.c maxq10xx.c
mynewt mynewt_port.c
nxp README.md README_SE050.md casper_port.c dcp_port.c hashcrypt_port.c ksdk_port.c se050_port.c
pic32 pic32mz-crypt.c
ppc32 ppc32-sha256-asm.S ppc32-sha256-asm_c.c ppc32-sha256-asm_cr.c
psa README.md psa.c psa_aes.c psa_hash.c psa_pkcbs.c
riscv riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.c
rpi_pico README.md pico.c
silabs README.md silabs_aes.c silabs_ecc.c silabs_hash.c silabs_random.c
st README.md STM32MP13.md STM32MP25.md stm32.c stsafe.c
ti ti-aes.c ti-ccm.c ti-des3.c ti-hash.c
tropicsquare README.md tropic01.c
xilinx xil-aesgcm.c xil-sha3.c xil-versal-glue.c xil-versal-trng.c
nrf51.c
ASN_TEMPLATE.md aes.c aes_asm.S aes_asm.asm aes_gcm_asm.S aes_gcm_asm.asm aes_gcm_x86_asm.S aes_xts_asm.S aes_xts_asm.asm arc4.c ascon.c asm.c asn.c asn_orig.c async.c blake2b.c blake2s.c camellia.c chacha.c chacha20_poly1305.c chacha_asm.S chacha_asm.asm cmac.c coding.c compress.c cpuid.c cryptocb.c curve25519.c curve448.c des3.c dh.c dilithium.c dsa.c ecc.c ecc_fp.c eccsi.c ed25519.c ed448.c error.c evp.c evp_pk.c falcon.c fe_448.c fe_low_mem.c fe_operations.c fe_x25519_128.h fe_x25519_asm.S fp_mont_small.i fp_mul_comba_12.i fp_mul_comba_17.i fp_mul_comba_20.i fp_mul_comba_24.i fp_mul_comba_28.i fp_mul_comba_3.i fp_mul_comba_32.i fp_mul_comba_4.i fp_mul_comba_48.i fp_mul_comba_6.i fp_mul_comba_64.i fp_mul_comba_7.i fp_mul_comba_8.i fp_mul_comba_9.i fp_mul_comba_small_set.i fp_sqr_comba_12.i fp_sqr_comba_17.i fp_sqr_comba_20.i fp_sqr_comba_24.i fp_sqr_comba_28.i fp_sqr_comba_3.i fp_sqr_comba_32.i fp_sqr_comba_4.i fp_sqr_comba_48.i fp_sqr_comba_6.i fp_sqr_comba_64.i fp_sqr_comba_7.i fp_sqr_comba_8.i fp_sqr_comba_9.i fp_sqr_comba_small_set.i ge_448.c ge_low_mem.c ge_operations.c hash.c hmac.c hpke.c include.am integer.c kdf.c logging.c md2.c md4.c md5.c memory.c misc.c pkcs12.c pkcs7.c poly1305.c poly1305_asm.S poly1305_asm.asm puf.c pwdbased.c random.c rc2.c ripemd.c rng_bank.c rsa.c sakke.c sha.c sha256.c sha256_asm.S sha3.c sha3_asm.S sha512.c sha512_asm.S signature.c siphash.c sm2.c sm3.c sm3_asm.S sm4.c sp_arm32.c sp_arm64.c sp_armthumb.c sp_c32.c sp_c64.c sp_cortexm.c sp_dsp32.c sp_int.c sp_sm2_arm32.c sp_sm2_arm64.c sp_sm2_armthumb.c sp_sm2_c32.c sp_sm2_c64.c sp_sm2_cortexm.c sp_sm2_x86_64.c sp_sm2_x86_64_asm.S sp_x86_64.c sp_x86_64_asm.S sp_x86_64_asm.asm srp.c tfm.c wc_dsp.c wc_encrypt.c wc_lms.c wc_lms_impl.c wc_mldsa_asm.S wc_mlkem.c wc_mlkem_asm.S wc_mlkem_poly.c wc_pkcs11.c wc_port.c wc_she.c wc_slhdsa.c wc_xmss.c wc_xmss_impl.c wolfentropy.c wolfevent.c wolfmath.c
test README.md include.am test-VS2022.sln test-VS2022.vcxproj test-VS2022.vcxproj.user test.c test.h test.sln test.vcproj test_paths.h.in
wolfssl
openssl aes.h asn1.h asn1t.h bio.h bn.h buffer.h camellia.h cmac.h cms.h compat_types.h conf.h crypto.h des.h dh.h dsa.h ec.h ec25519.h ec448.h ecdh.h ecdsa.h ed25519.h ed448.h engine.h err.h evp.h fips_rand.h hmac.h include.am kdf.h lhash.h md4.h md5.h modes.h obj_mac.h objects.h ocsp.h opensslconf.h opensslv.h ossl_typ.h pem.h pkcs12.h pkcs7.h rand.h rc4.h ripemd.h rsa.h safestack.h sha.h sha3.h srp.h ssl.h ssl23.h stack.h tls1.h txt_db.h ui.h x509.h x509_vfy.h x509v3.h
wolfcrypt
port
Espressif esp-sdk-lib.h esp32-crypt.h esp_crt_bundle.h
Renesas renesas-fspsm-crypt.h renesas-fspsm-types.h renesas-rx64-hw-crypt.h renesas-tsip-crypt.h renesas_cmn.h renesas_fspsm_internal.h renesas_sync.h renesas_tsip_internal.h renesas_tsip_types.h
af_alg afalg_hash.h wc_afalg.h
aria aria-crypt.h aria-cryptocb.h
arm cryptoCell.h
atmel atmel.h
autosar CryIf.h Crypto.h Csm.h StandardTypes.h
caam caam_driver.h caam_error.h caam_qnx.h wolfcaam.h wolfcaam_aes.h wolfcaam_cmac.h wolfcaam_ecdsa.h wolfcaam_fsl_nxp.h wolfcaam_hash.h wolfcaam_qnx.h wolfcaam_rsa.h wolfcaam_seco.h wolfcaam_sha.h wolfcaam_x25519.h
cavium cavium_nitrox.h cavium_octeon_sync.h
cypress psoc6_crypto.h
devcrypto wc_devcrypto.h
intel quickassist.h quickassist_mem.h quickassist_sync.h
iotsafe iotsafe.h
kcapi kcapi_dh.h kcapi_ecc.h kcapi_hash.h kcapi_hmac.h kcapi_rsa.h wc_kcapi.h
liboqs liboqs.h
maxim max3266x-cryptocb.h max3266x.h maxq10xx.h
nxp casper_port.h dcp_port.h hashcrypt_port.h ksdk_port.h se050_port.h
pic32 pic32mz-crypt.h
psa psa.h
riscv riscv-64-asm.h
rpi_pico pico.h
silabs silabs_aes.h silabs_ecc.h silabs_hash.h silabs_random.h
st stm32.h stsafe.h
ti ti-ccm.h ti-hash.h
tropicsquare tropic01.h
xilinx xil-sha3.h xil-versal-glue.h xil-versal-trng.h
nrf51.h
aes.h arc4.h ascon.h asn.h asn_public.h async.h blake2-impl.h blake2-int.h blake2.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cpuid.h cryptocb.h curve25519.h curve448.h des3.h dh.h dilithium.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h falcon.h fe_448.h fe_operations.h fips_test.h ge_448.h ge_operations.h hash.h hmac.h hpke.h include.am integer.h kdf.h libwolfssl_sources.h libwolfssl_sources_asm.h logging.h md2.h md4.h md5.h mem_track.h memory.h misc.h mpi_class.h mpi_superclass.h oid_sum.h pkcs11.h pkcs12.h pkcs7.h poly1305.h puf.h pwdbased.h random.h rc2.h ripemd.h rng_bank.h rsa.h sakke.h selftest.h settings.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h sm2.h sm3.h sm4.h sp.h sp_int.h srp.h tfm.h types.h visibility.h wc_encrypt.h wc_lms.h wc_mlkem.h wc_pkcs11.h wc_port.h wc_she.h wc_slhdsa.h wc_xmss.h wolfentropy.h wolfevent.h wolfmath.h
callbacks.h certs_test.h certs_test_sm.h crl.h error-ssl.h include.am internal.h ocsp.h options.h.in quic.h sniffer.h sniffer_error.h sniffer_error.rc ssl.h test.h version.h version.h.in wolfio.h
wrapper
Ada
examples
src aes_verify_main.adb rsa_verify_main.adb sha256_main.adb spark_sockets.adb spark_sockets.ads spark_terminal.adb spark_terminal.ads tls_client.adb tls_client.ads tls_client_main.adb tls_server.adb tls_server.ads tls_server_main.adb
.gitignore alire.toml examples.gpr
tests
src
support test_support.adb test_support.ads tests_root_suite.adb tests_root_suite.ads
aes_bindings_tests.adb aes_bindings_tests.ads rsa_verify_bindings_tests.adb rsa_verify_bindings_tests.ads sha256_bindings_tests.adb sha256_bindings_tests.ads tests.adb
.gitignore README.md alire.toml tests.gpr valgrind.supp
.gitignore README.md ada_binding.c alire.toml default.gpr include.am restricted.adc user_settings.h wolfssl-full_runtime.adb wolfssl-full_runtime.ads wolfssl.adb wolfssl.ads wolfssl.gpr
CSharp
wolfCrypt-Test
Properties AssemblyInfo.cs
App.config wolfCrypt-Test.cs wolfCrypt-Test.csproj
wolfSSL-DTLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-PSK-Server.cs wolfSSL-DTLS-PSK-Server.csproj
wolfSSL-DTLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-Server.cs wolfSSL-DTLS-Server.csproj
wolfSSL-Example-IOCallbacks
Properties AssemblyInfo.cs
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csproj
wolfSSL-TLS-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Client.cs wolfSSL-TLS-Client.csproj
wolfSSL-TLS-PSK-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Client.cs wolfSSL-TLS-PSK-Client.csproj
wolfSSL-TLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Server.cs wolfSSL-TLS-PSK-Server.csproj
wolfSSL-TLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Server.cs wolfSSL-TLS-Server.csproj
wolfSSL-TLS-ServerThreaded
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csproj
wolfSSL_CSharp
Properties AssemblyInfo.cs Resources.Designer.cs Resources.resx
X509.cs wolfCrypt.cs wolfSSL.cs wolfSSL_CSharp.csproj
README.md include.am user_settings.h wolfSSL_CSharp.sln wolfssl.vcxproj
python README.md
rust
wolfssl-wolfcrypt
src aes.rs blake2.rs chacha20_poly1305.rs cmac.rs cmac_mac.rs curve25519.rs dh.rs dilithium.rs ecc.rs ecdsa.rs ed25519.rs ed448.rs fips.rs hkdf.rs hmac.rs hmac_mac.rs kdf.rs lib.rs lms.rs mlkem.rs mlkem_kem.rs pbkdf2_password_hash.rs prf.rs random.rs rsa.rs rsa_pkcs1v15.rs sha.rs sha_digest.rs sys.rs
tests
common mod.rs
test_aes.rs test_blake2.rs test_chacha20_poly1305.rs test_cmac.rs test_cmac_mac.rs test_curve25519.rs test_dh.rs test_dilithium.rs test_ecc.rs test_ecdsa.rs test_ed25519.rs test_ed448.rs test_hkdf.rs test_hmac.rs test_hmac_mac.rs test_kdf.rs test_lms.rs test_mlkem.rs test_mlkem_kem.rs test_pbkdf2_password_hash.rs test_prf.rs test_random.rs test_rsa.rs test_rsa_pkcs1v15.rs test_sha.rs test_sha_digest.rs test_wolfcrypt.rs
CHANGELOG.md Cargo.lock Cargo.toml Makefile README.md build.rs headers.h
Makefile README.md include.am
include.am
zephyr
samples
wolfssl_benchmark
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_test
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_sock
boards native_sim.conf
src tls_sock.c
CMakeLists.txt README install_sample.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_thread
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
src tls_threaded.c
CMakeLists.txt README install_sample.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl options.h
CMakeLists.txt Kconfig Kconfig.tls-generic README.md include.am module.yml user_settings-no-malloc.h user_settings.h zephyr_init.c
.codespellexcludelines .cyignore .editorconfig .gitignore .wolfssl_known_macro_extras AUTHORS CMakeLists.txt CMakePresets.json CMakeSettings.json COPYING ChangeLog.md INSTALL LICENSING LPCExpresso.cproject LPCExpresso.project Makefile.am README README-async.md README.md SCRIPTS-LIST SECURITY-POLICY.md SECURITY-REPORT-TEMPLATE.md Vagrantfile autogen.sh commit-tests.sh configure.ac fips-check.sh fips-hash.sh gencertbuf.pl input pull_to_vagrant.sh quit resource.h stamp-h.in valgrind-bash.supp valgrind-error.sh wnr-example.conf wolfssl-VS2022.vcxproj wolfssl.rc wolfssl.vcproj wolfssl.vcxproj wolfssl64.sln
.clangd .gitignore DOCS.md Makefile README.md assert.c core.c crypto.c env.c fs.c http.c ini.c json.c log.c luna.h main.c makext.mk path.c process.c request.c sqlite.c stash.c template.c util.c
sqlite/sqlite3.h raw
    1/*
    2** 2001-09-15
    3**
    4** The author disclaims copyright to this source code.  In place of
    5** a legal notice, here is a blessing:
    6**
    7**    May you do good and not evil.
    8**    May you find forgiveness for yourself and forgive others.
    9**    May you share freely, never taking more than you give.
   10**
   11*************************************************************************
   12** This header file defines the interface that the SQLite library
   13** presents to client programs.  If a C-function, structure, datatype,
   14** or constant definition does not appear in this file, then it is
   15** not a published API of SQLite, is subject to change without
   16** notice, and should not be referenced by programs that use SQLite.
   17**
   18** Some of the definitions that are in this file are marked as
   19** "experimental".  Experimental interfaces are normally new
   20** features recently added to SQLite.  We do not anticipate changes
   21** to experimental interfaces but reserve the right to make minor changes
   22** if experience from use "in the wild" suggest such changes are prudent.
   23**
   24** The official C-language API documentation for SQLite is derived
   25** from comments in this file.  This file is the authoritative source
   26** on how SQLite interfaces are supposed to operate.
   27**
   28** The name of this file under configuration management is "sqlite.h.in".
   29** The makefile makes some minor changes to this file (such as inserting
   30** the version number) and changes its name to "sqlite3.h" as
   31** part of the build process.
   32*/
   33#ifndef SQLITE3_H
   34#define SQLITE3_H
   35#include <stdarg.h>     /* Needed for the definition of va_list */
   36
   37/*
   38** Make sure we can call this stuff from C++.
   39*/
   40#ifdef __cplusplus
   41extern "C" {
   42#endif
   43
   44
   45/*
   46** Facilitate override of interface linkage and calling conventions.
   47** Be aware that these macros may not be used within this particular
   48** translation of the amalgamation and its associated header file.
   49**
   50** The SQLITE_EXTERN and SQLITE_API macros are used to instruct the
   51** compiler that the target identifier should have external linkage.
   52**
   53** The SQLITE_CDECL macro is used to set the calling convention for
   54** public functions that accept a variable number of arguments.
   55**
   56** The SQLITE_APICALL macro is used to set the calling convention for
   57** public functions that accept a fixed number of arguments.
   58**
   59** The SQLITE_STDCALL macro is no longer used and is now deprecated.
   60**
   61** The SQLITE_CALLBACK macro is used to set the calling convention for
   62** function pointers.
   63**
   64** The SQLITE_SYSAPI macro is used to set the calling convention for
   65** functions provided by the operating system.
   66**
   67** Currently, the SQLITE_CDECL, SQLITE_APICALL, SQLITE_CALLBACK, and
   68** SQLITE_SYSAPI macros are used only when building for environments
   69** that require non-default calling conventions.
   70*/
   71#ifndef SQLITE_EXTERN
   72# define SQLITE_EXTERN extern
   73#endif
   74#ifndef SQLITE_API
   75# define SQLITE_API
   76#endif
   77#ifndef SQLITE_CDECL
   78# define SQLITE_CDECL
   79#endif
   80#ifndef SQLITE_APICALL
   81# define SQLITE_APICALL
   82#endif
   83#ifndef SQLITE_STDCALL
   84# define SQLITE_STDCALL SQLITE_APICALL
   85#endif
   86#ifndef SQLITE_CALLBACK
   87# define SQLITE_CALLBACK
   88#endif
   89#ifndef SQLITE_SYSAPI
   90# define SQLITE_SYSAPI
   91#endif
   92
   93/*
   94** These no-op macros are used in front of interfaces to mark those
   95** interfaces as either deprecated or experimental.  New applications
   96** should not use deprecated interfaces - they are supported for backwards
   97** compatibility only.  Application writers should be aware that
   98** experimental interfaces are subject to change in point releases.
   99**
  100** These macros used to resolve to various kinds of compiler magic that
  101** would generate warning messages when they were used.  But that
  102** compiler magic ended up generating such a flurry of bug reports
  103** that we have taken it all out and gone back to using simple
  104** noop macros.
  105*/
  106#define SQLITE_DEPRECATED
  107#define SQLITE_EXPERIMENTAL
  108
  109/*
  110** Ensure these symbols were not defined by some previous header file.
  111*/
  112#ifdef SQLITE_VERSION
  113# undef SQLITE_VERSION
  114#endif
  115#ifdef SQLITE_VERSION_NUMBER
  116# undef SQLITE_VERSION_NUMBER
  117#endif
  118
  119/*
  120** CAPI3REF: Compile-Time Library Version Numbers
  121**
  122** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header
  123** evaluates to a string literal that is the SQLite version in the
  124** format "X.Y.Z" where X is the major version number (always 3 for
  125** SQLite3) and Y is the minor version number and Z is the release number.)^
  126** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer
  127** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
  128** numbers used in [SQLITE_VERSION].)^
  129** The SQLITE_VERSION_NUMBER for any given release of SQLite will also
  130** be larger than the release from which it is derived.  Either Y will
  131** be held constant and Z will be incremented or else Y will be incremented
  132** and Z will be reset to zero.
  133**
  134** Since [version 3.6.18] ([dateof:3.6.18]),
  135** SQLite source code has been stored in the
  136** <a href="http://fossil-scm.org/">Fossil configuration management
  137** system</a>.  ^The SQLITE_SOURCE_ID macro evaluates to
  138** a string which identifies a particular check-in of SQLite
  139** within its configuration management system.  ^The SQLITE_SOURCE_ID
  140** string contains the date and time of the check-in (UTC) and a SHA1
  141** or SHA3-256 hash of the entire source tree.  If the source code has
  142** been edited in any way since it was last checked in, then the last
  143** four hexadecimal digits of the hash may be modified.
  144**
  145** See also: [sqlite3_libversion()],
  146** [sqlite3_libversion_number()], [sqlite3_sourceid()],
  147** [sqlite_version()] and [sqlite_source_id()].
  148*/
  149#define SQLITE_VERSION        "3.53.1"
  150#define SQLITE_VERSION_NUMBER 3053001
  151#define SQLITE_SOURCE_ID      "2026-05-05 10:34:17 c88b22011a54b4f6fbd149e9f8e4de77658ce58143a1af0e3785e4e6475127e9"
  152#define SQLITE_SCM_BRANCH     "branch-3.53"
  153#define SQLITE_SCM_TAGS       "release version-3.53.1"
  154#define SQLITE_SCM_DATETIME   "2026-05-05T10:34:17.344Z"
  155
  156/*
  157** CAPI3REF: Run-Time Library Version Numbers
  158** KEYWORDS: sqlite3_version sqlite3_sourceid
  159**
  160** These interfaces provide the same information as the [SQLITE_VERSION],
  161** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
  162** but are associated with the library instead of the header file.  ^(Cautious
  163** programmers might include assert() statements in their application to
  164** verify that values returned by these interfaces match the macros in
  165** the header, and thus ensure that the application is
  166** compiled with matching library and header files.
  167**
  168** <blockquote><pre>
  169** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
  170** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
  171** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
  172** </pre></blockquote>)^
  173**
  174** ^The sqlite3_version[] string constant contains the text of the
  175** [SQLITE_VERSION] macro.  ^The sqlite3_libversion() function returns a
  176** pointer to the sqlite3_version[] string constant.  The sqlite3_libversion()
  177** function is provided for use in DLLs since DLL users usually do not have
  178** direct access to string constants within the DLL.  ^The
  179** sqlite3_libversion_number() function returns an integer equal to
  180** [SQLITE_VERSION_NUMBER].  ^(The sqlite3_sourceid() function returns
  181** a pointer to a string constant whose value is the same as the
  182** [SQLITE_SOURCE_ID] C preprocessor macro.  Except if SQLite is built
  183** using an edited copy of [the amalgamation], then the last four characters
  184** of the hash might be different from [SQLITE_SOURCE_ID].)^
  185**
  186** See also: [sqlite_version()] and [sqlite_source_id()].
  187*/
  188SQLITE_API SQLITE_EXTERN const char sqlite3_version[];
  189SQLITE_API const char *sqlite3_libversion(void);
  190SQLITE_API const char *sqlite3_sourceid(void);
  191SQLITE_API int sqlite3_libversion_number(void);
  192
  193/*
  194** CAPI3REF: Run-Time Library Compilation Options Diagnostics
  195**
  196** ^The sqlite3_compileoption_used() function returns 0 or 1
  197** indicating whether the specified option was defined at
  198** compile time.  ^The SQLITE_ prefix may be omitted from the
  199** option name passed to sqlite3_compileoption_used().
  200**
  201** ^The sqlite3_compileoption_get() function allows iterating
  202** over the list of options that were defined at compile time by
  203** returning the N-th compile time option string.  ^If N is out of range,
  204** sqlite3_compileoption_get() returns a NULL pointer.  ^The SQLITE_
  205** prefix is omitted from any strings returned by
  206** sqlite3_compileoption_get().
  207**
  208** ^Support for the diagnostic functions sqlite3_compileoption_used()
  209** and sqlite3_compileoption_get() may be omitted by specifying the
  210** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time.
  211**
  212** See also: SQL functions [sqlite_compileoption_used()] and
  213** [sqlite_compileoption_get()] and the [compile_options pragma].
  214*/
  215#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
  216SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
  217SQLITE_API const char *sqlite3_compileoption_get(int N);
  218#else
  219# define sqlite3_compileoption_used(X) 0
  220# define sqlite3_compileoption_get(X)  ((void*)0)
  221#endif
  222
  223/*
  224** CAPI3REF: Test To See If The Library Is Threadsafe
  225**
  226** ^The sqlite3_threadsafe() function returns zero if and only if
  227** SQLite was compiled with mutexing code omitted due to the
  228** [SQLITE_THREADSAFE] compile-time option being set to 0.
  229**
  230** SQLite can be compiled with or without mutexes.  When
  231** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes
  232** are enabled and SQLite is threadsafe.  When the
  233** [SQLITE_THREADSAFE] macro is 0,
  234** the mutexes are omitted.  Without the mutexes, it is not safe
  235** to use SQLite concurrently from more than one thread.
  236**
  237** Enabling mutexes incurs a measurable performance penalty.
  238** So if speed is of utmost importance, it makes sense to disable
  239** the mutexes.  But for maximum safety, mutexes should be enabled.
  240** ^The default behavior is for mutexes to be enabled.
  241**
  242** This interface can be used by an application to make sure that the
  243** version of SQLite that it is linking against was compiled with
  244** the desired setting of the [SQLITE_THREADSAFE] macro.
  245**
  246** This interface only reports on the compile-time mutex setting
  247** of the [SQLITE_THREADSAFE] flag.  If SQLite is compiled with
  248** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
  249** can be fully or partially disabled using a call to [sqlite3_config()]
  250** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD],
  251** or [SQLITE_CONFIG_SERIALIZED].  ^(The return value of the
  252** sqlite3_threadsafe() function shows only the compile-time setting of
  253** thread safety, not any run-time changes to that setting made by
  254** sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
  255** is unchanged by calls to sqlite3_config().)^
  256**
  257** See the [threading mode] documentation for additional information.
  258*/
  259SQLITE_API int sqlite3_threadsafe(void);
  260
  261/*
  262** CAPI3REF: Database Connection Handle
  263** KEYWORDS: {database connection} {database connections}
  264**
  265** Each open SQLite database is represented by a pointer to an instance of
  266** the opaque structure named "sqlite3".  It is useful to think of an sqlite3
  267** pointer as an object.  The [sqlite3_open()], [sqlite3_open16()], and
  268** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()]
  269** and [sqlite3_close_v2()] are its destructors.  There are many other
  270** interfaces (such as
  271** [sqlite3_prepare_v2()], [sqlite3_create_function()], and
  272** [sqlite3_busy_timeout()] to name but three) that are methods on an
  273** sqlite3 object.
  274*/
  275typedef struct sqlite3 sqlite3;
  276
  277/*
  278** CAPI3REF: 64-Bit Integer Types
  279** KEYWORDS: sqlite_int64 sqlite_uint64
  280**
  281** Because there is no cross-platform way to specify 64-bit integer types
  282** SQLite includes typedefs for 64-bit signed and unsigned integers.
  283**
  284** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
  285** The sqlite_int64 and sqlite_uint64 types are supported for backwards
  286** compatibility only.
  287**
  288** ^The sqlite3_int64 and sqlite_int64 types can store integer values
  289** between -9223372036854775808 and +9223372036854775807 inclusive.  ^The
  290** sqlite3_uint64 and sqlite_uint64 types can store integer values
  291** between 0 and +18446744073709551615 inclusive.
  292*/
  293#ifdef SQLITE_INT64_TYPE
  294  typedef SQLITE_INT64_TYPE sqlite_int64;
  295# ifdef SQLITE_UINT64_TYPE
  296    typedef SQLITE_UINT64_TYPE sqlite_uint64;
  297# else
  298    typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
  299# endif
  300#elif defined(_MSC_VER) || defined(__BORLANDC__)
  301  typedef __int64 sqlite_int64;
  302  typedef unsigned __int64 sqlite_uint64;
  303#else
  304  typedef long long int sqlite_int64;
  305  typedef unsigned long long int sqlite_uint64;
  306#endif
  307typedef sqlite_int64 sqlite3_int64;
  308typedef sqlite_uint64 sqlite3_uint64;
  309
  310/*
  311** If compiling for a processor that lacks floating point support,
  312** substitute integer for floating-point.
  313*/
  314#ifdef SQLITE_OMIT_FLOATING_POINT
  315# define double sqlite3_int64
  316#endif
  317
  318/*
  319** CAPI3REF: Closing A Database Connection
  320** DESTRUCTOR: sqlite3
  321**
  322** ^The sqlite3_close() and sqlite3_close_v2() routines are destructors
  323** for the [sqlite3] object.
  324** ^Calls to sqlite3_close() and sqlite3_close_v2() return [SQLITE_OK] if
  325** the [sqlite3] object is successfully destroyed and all associated
  326** resources are deallocated.
  327**
  328** Ideally, applications should [sqlite3_finalize | finalize] all
  329** [prepared statements], [sqlite3_blob_close | close] all [BLOB handles], and
  330** [sqlite3_backup_finish | finish] all [sqlite3_backup] objects associated
  331** with the [sqlite3] object prior to attempting to close the object.
  332** ^If the database connection is associated with unfinalized prepared
  333** statements, BLOB handlers, and/or unfinished sqlite3_backup objects then
  334** sqlite3_close() will leave the database connection open and return
  335** [SQLITE_BUSY]. ^If sqlite3_close_v2() is called with unfinalized prepared
  336** statements, unclosed BLOB handlers, and/or unfinished sqlite3_backups,
  337** it returns [SQLITE_OK] regardless, but instead of deallocating the database
  338** connection immediately, it marks the database connection as an unusable
  339** "zombie" and makes arrangements to automatically deallocate the database
  340** connection after all prepared statements are finalized, all BLOB handles
  341** are closed, and all backups have finished. The sqlite3_close_v2() interface
  342** is intended for use with host languages that are garbage collected, and
  343** where the order in which destructors are called is arbitrary.
  344**
  345** ^If an [sqlite3] object is destroyed while a transaction is open,
  346** the transaction is automatically rolled back.
  347**
  348** The C parameter to [sqlite3_close(C)] and [sqlite3_close_v2(C)]
  349** must be either a NULL
  350** pointer or an [sqlite3] object pointer obtained
  351** from [sqlite3_open()], [sqlite3_open16()], or
  352** [sqlite3_open_v2()], and not previously closed.
  353** ^Calling sqlite3_close() or sqlite3_close_v2() with a NULL pointer
  354** argument is a harmless no-op.
  355*/
  356SQLITE_API int sqlite3_close(sqlite3*);
  357SQLITE_API int sqlite3_close_v2(sqlite3*);
  358
  359/*
  360** The type for a callback function.
  361** This is legacy and deprecated.  It is included for historical
  362** compatibility and is not documented.
  363*/
  364typedef int (*sqlite3_callback)(void*,int,char**, char**);
  365
  366/*
  367** CAPI3REF: One-Step Query Execution Interface
  368** METHOD: sqlite3
  369**
  370** The sqlite3_exec() interface is a convenience wrapper around
  371** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
  372** that allows an application to run multiple statements of SQL
  373** without having to use a lot of C code.
  374**
  375** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded,
  376** semicolon-separated SQL statements passed into its 2nd argument,
  377** in the context of the [database connection] passed in as its 1st
  378** argument.  ^If the callback function of the 3rd argument to
  379** sqlite3_exec() is not NULL, then it is invoked for each result row
  380** coming out of the evaluated SQL statements.  ^The 4th argument to
  381** sqlite3_exec() is relayed through to the 1st argument of each
  382** callback invocation.  ^If the callback pointer to sqlite3_exec()
  383** is NULL, then no callback is ever invoked and result rows are
  384** ignored.
  385**
  386** ^If an error occurs while evaluating the SQL statements passed into
  387** sqlite3_exec(), then execution of the current statement stops and
  388** subsequent statements are skipped.  ^If the 5th parameter to sqlite3_exec()
  389** is not NULL then any error message is written into memory obtained
  390** from [sqlite3_malloc()] and passed back through the 5th parameter.
  391** To avoid memory leaks, the application should invoke [sqlite3_free()]
  392** on error message strings returned through the 5th parameter of
  393** sqlite3_exec() after the error message string is no longer needed.
  394** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors
  395** occur, then sqlite3_exec() sets the pointer in its 5th parameter to
  396** NULL before returning.
  397**
  398** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
  399** routine returns SQLITE_ABORT without invoking the callback again and
  400** without running any subsequent SQL statements.
  401**
  402** ^The 2nd argument to the sqlite3_exec() callback function is the
  403** number of columns in the result.  ^The 3rd argument to the sqlite3_exec()
  404** callback is an array of pointers to strings obtained as if from
  405** [sqlite3_column_text()], one for each column.  ^If an element of a
  406** result row is NULL then the corresponding string pointer for the
  407** sqlite3_exec() callback is a NULL pointer.  ^The 4th argument to the
  408** sqlite3_exec() callback is an array of pointers to strings where each
  409** entry represents the name of a corresponding result column as obtained
  410** from [sqlite3_column_name()].
  411**
  412** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
  413** to an empty string, or a pointer that contains only whitespace and/or
  414** SQL comments, then no SQL statements are evaluated and the database
  415** is not changed.
  416**
  417** Restrictions:
  418**
  419** <ul>
  420** <li> The application must ensure that the 1st parameter to sqlite3_exec()
  421**      is a valid and open [database connection].
  422** <li> The application must not close the [database connection] specified by
  423**      the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
  424** <li> The application must not modify the SQL statement text passed into
  425**      the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
  426** <li> The application must not dereference the arrays or string pointers
  427**       passed as the 3rd and 4th callback parameters after it returns.
  428** </ul>
  429*/
  430SQLITE_API int sqlite3_exec(
  431  sqlite3*,                                  /* An open database */
  432  const char *sql,                           /* SQL to be evaluated */
  433  int (*callback)(void*,int,char**,char**),  /* Callback function */
  434  void *,                                    /* 1st argument to callback */
  435  char **errmsg                              /* Error msg written here */
  436);
  437
  438/*
  439** CAPI3REF: Result Codes
  440** KEYWORDS: {result code definitions}
  441**
  442** Many SQLite functions return an integer result code from the set shown
  443** here in order to indicate success or failure.
  444**
  445** New error codes may be added in future versions of SQLite.
  446**
  447** See also: [extended result code definitions]
  448*/
  449#define SQLITE_OK           0   /* Successful result */
  450/* beginning-of-error-codes */
  451#define SQLITE_ERROR        1   /* Generic error */
  452#define SQLITE_INTERNAL     2   /* Internal logic error in SQLite */
  453#define SQLITE_PERM         3   /* Access permission denied */
  454#define SQLITE_ABORT        4   /* Callback routine requested an abort */
  455#define SQLITE_BUSY         5   /* The database file is locked */
  456#define SQLITE_LOCKED       6   /* A table in the database is locked */
  457#define SQLITE_NOMEM        7   /* A malloc() failed */
  458#define SQLITE_READONLY     8   /* Attempt to write a readonly database */
  459#define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite3_interrupt()*/
  460#define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
  461#define SQLITE_CORRUPT     11   /* The database disk image is malformed */
  462#define SQLITE_NOTFOUND    12   /* Unknown opcode in sqlite3_file_control() */
  463#define SQLITE_FULL        13   /* Insertion failed because database is full */
  464#define SQLITE_CANTOPEN    14   /* Unable to open the database file */
  465#define SQLITE_PROTOCOL    15   /* Database lock protocol error */
  466#define SQLITE_EMPTY       16   /* Internal use only */
  467#define SQLITE_SCHEMA      17   /* The database schema changed */
  468#define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
  469#define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
  470#define SQLITE_MISMATCH    20   /* Data type mismatch */
  471#define SQLITE_MISUSE      21   /* Library used incorrectly */
  472#define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
  473#define SQLITE_AUTH        23   /* Authorization denied */
  474#define SQLITE_FORMAT      24   /* Not used */
  475#define SQLITE_RANGE       25   /* 2nd parameter to sqlite3_bind out of range */
  476#define SQLITE_NOTADB      26   /* File opened that is not a database file */
  477#define SQLITE_NOTICE      27   /* Notifications from sqlite3_log() */
  478#define SQLITE_WARNING     28   /* Warnings from sqlite3_log() */
  479#define SQLITE_ROW         100  /* sqlite3_step() has another row ready */
  480#define SQLITE_DONE        101  /* sqlite3_step() has finished executing */
  481/* end-of-error-codes */
  482
  483/*
  484** CAPI3REF: Extended Result Codes
  485** KEYWORDS: {extended result code definitions}
  486**
  487** In its default configuration, SQLite API routines return one of 30 integer
  488** [result codes].  However, experience has shown that many of
  489** these result codes are too coarse-grained.  They do not provide as
  490** much information about problems as programmers might like.  In an effort to
  491** address this, newer versions of SQLite (version 3.3.8 [dateof:3.3.8]
  492** and later) include
  493** support for additional result codes that provide more detailed information
  494** about errors. These [extended result codes] are enabled or disabled
  495** on a per database connection basis using the
  496** [sqlite3_extended_result_codes()] API.  Or, the extended code for
  497** the most recent error can be obtained using
  498** [sqlite3_extended_errcode()].
  499*/
  500#define SQLITE_ERROR_MISSING_COLLSEQ   (SQLITE_ERROR | (1<<8))
  501#define SQLITE_ERROR_RETRY             (SQLITE_ERROR | (2<<8))
  502#define SQLITE_ERROR_SNAPSHOT          (SQLITE_ERROR | (3<<8))
  503#define SQLITE_ERROR_RESERVESIZE       (SQLITE_ERROR | (4<<8))
  504#define SQLITE_ERROR_KEY               (SQLITE_ERROR | (5<<8))
  505#define SQLITE_ERROR_UNABLE            (SQLITE_ERROR | (6<<8))
  506#define SQLITE_IOERR_READ              (SQLITE_IOERR | (1<<8))
  507#define SQLITE_IOERR_SHORT_READ        (SQLITE_IOERR | (2<<8))
  508#define SQLITE_IOERR_WRITE             (SQLITE_IOERR | (3<<8))
  509#define SQLITE_IOERR_FSYNC             (SQLITE_IOERR | (4<<8))
  510#define SQLITE_IOERR_DIR_FSYNC         (SQLITE_IOERR | (5<<8))
  511#define SQLITE_IOERR_TRUNCATE          (SQLITE_IOERR | (6<<8))
  512#define SQLITE_IOERR_FSTAT             (SQLITE_IOERR | (7<<8))
  513#define SQLITE_IOERR_UNLOCK            (SQLITE_IOERR | (8<<8))
  514#define SQLITE_IOERR_RDLOCK            (SQLITE_IOERR | (9<<8))
  515#define SQLITE_IOERR_DELETE            (SQLITE_IOERR | (10<<8))
  516#define SQLITE_IOERR_BLOCKED           (SQLITE_IOERR | (11<<8))
  517#define SQLITE_IOERR_NOMEM             (SQLITE_IOERR | (12<<8))
  518#define SQLITE_IOERR_ACCESS            (SQLITE_IOERR | (13<<8))
  519#define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8))
  520#define SQLITE_IOERR_LOCK              (SQLITE_IOERR | (15<<8))
  521#define SQLITE_IOERR_CLOSE             (SQLITE_IOERR | (16<<8))
  522#define SQLITE_IOERR_DIR_CLOSE         (SQLITE_IOERR | (17<<8))
  523#define SQLITE_IOERR_SHMOPEN           (SQLITE_IOERR | (18<<8))
  524#define SQLITE_IOERR_SHMSIZE           (SQLITE_IOERR | (19<<8))
  525#define SQLITE_IOERR_SHMLOCK           (SQLITE_IOERR | (20<<8))
  526#define SQLITE_IOERR_SHMMAP            (SQLITE_IOERR | (21<<8))
  527#define SQLITE_IOERR_SEEK              (SQLITE_IOERR | (22<<8))
  528#define SQLITE_IOERR_DELETE_NOENT      (SQLITE_IOERR | (23<<8))
  529#define SQLITE_IOERR_MMAP              (SQLITE_IOERR | (24<<8))
  530#define SQLITE_IOERR_GETTEMPPATH       (SQLITE_IOERR | (25<<8))
  531#define SQLITE_IOERR_CONVPATH          (SQLITE_IOERR | (26<<8))
  532#define SQLITE_IOERR_VNODE             (SQLITE_IOERR | (27<<8))
  533#define SQLITE_IOERR_AUTH              (SQLITE_IOERR | (28<<8))
  534#define SQLITE_IOERR_BEGIN_ATOMIC      (SQLITE_IOERR | (29<<8))
  535#define SQLITE_IOERR_COMMIT_ATOMIC     (SQLITE_IOERR | (30<<8))
  536#define SQLITE_IOERR_ROLLBACK_ATOMIC   (SQLITE_IOERR | (31<<8))
  537#define SQLITE_IOERR_DATA              (SQLITE_IOERR | (32<<8))
  538#define SQLITE_IOERR_CORRUPTFS         (SQLITE_IOERR | (33<<8))
  539#define SQLITE_IOERR_IN_PAGE           (SQLITE_IOERR | (34<<8))
  540#define SQLITE_IOERR_BADKEY            (SQLITE_IOERR | (35<<8))
  541#define SQLITE_IOERR_CODEC             (SQLITE_IOERR | (36<<8))
  542#define SQLITE_LOCKED_SHAREDCACHE      (SQLITE_LOCKED |  (1<<8))
  543#define SQLITE_LOCKED_VTAB             (SQLITE_LOCKED |  (2<<8))
  544#define SQLITE_BUSY_RECOVERY           (SQLITE_BUSY   |  (1<<8))
  545#define SQLITE_BUSY_SNAPSHOT           (SQLITE_BUSY   |  (2<<8))
  546#define SQLITE_BUSY_TIMEOUT            (SQLITE_BUSY   |  (3<<8))
  547#define SQLITE_CANTOPEN_NOTEMPDIR      (SQLITE_CANTOPEN | (1<<8))
  548#define SQLITE_CANTOPEN_ISDIR          (SQLITE_CANTOPEN | (2<<8))
  549#define SQLITE_CANTOPEN_FULLPATH       (SQLITE_CANTOPEN | (3<<8))
  550#define SQLITE_CANTOPEN_CONVPATH       (SQLITE_CANTOPEN | (4<<8))
  551#define SQLITE_CANTOPEN_DIRTYWAL       (SQLITE_CANTOPEN | (5<<8)) /* Not Used */
  552#define SQLITE_CANTOPEN_SYMLINK        (SQLITE_CANTOPEN | (6<<8))
  553#define SQLITE_CORRUPT_VTAB            (SQLITE_CORRUPT | (1<<8))
  554#define SQLITE_CORRUPT_SEQUENCE        (SQLITE_CORRUPT | (2<<8))
  555#define SQLITE_CORRUPT_INDEX           (SQLITE_CORRUPT | (3<<8))
  556#define SQLITE_READONLY_RECOVERY       (SQLITE_READONLY | (1<<8))
  557#define SQLITE_READONLY_CANTLOCK       (SQLITE_READONLY | (2<<8))
  558#define SQLITE_READONLY_ROLLBACK       (SQLITE_READONLY | (3<<8))
  559#define SQLITE_READONLY_DBMOVED        (SQLITE_READONLY | (4<<8))
  560#define SQLITE_READONLY_CANTINIT       (SQLITE_READONLY | (5<<8))
  561#define SQLITE_READONLY_DIRECTORY      (SQLITE_READONLY | (6<<8))
  562#define SQLITE_ABORT_ROLLBACK          (SQLITE_ABORT | (2<<8))
  563#define SQLITE_CONSTRAINT_CHECK        (SQLITE_CONSTRAINT | (1<<8))
  564#define SQLITE_CONSTRAINT_COMMITHOOK   (SQLITE_CONSTRAINT | (2<<8))
  565#define SQLITE_CONSTRAINT_FOREIGNKEY   (SQLITE_CONSTRAINT | (3<<8))
  566#define SQLITE_CONSTRAINT_FUNCTION     (SQLITE_CONSTRAINT | (4<<8))
  567#define SQLITE_CONSTRAINT_NOTNULL      (SQLITE_CONSTRAINT | (5<<8))
  568#define SQLITE_CONSTRAINT_PRIMARYKEY   (SQLITE_CONSTRAINT | (6<<8))
  569#define SQLITE_CONSTRAINT_TRIGGER      (SQLITE_CONSTRAINT | (7<<8))
  570#define SQLITE_CONSTRAINT_UNIQUE       (SQLITE_CONSTRAINT | (8<<8))
  571#define SQLITE_CONSTRAINT_VTAB         (SQLITE_CONSTRAINT | (9<<8))
  572#define SQLITE_CONSTRAINT_ROWID        (SQLITE_CONSTRAINT |(10<<8))
  573#define SQLITE_CONSTRAINT_PINNED       (SQLITE_CONSTRAINT |(11<<8))
  574#define SQLITE_CONSTRAINT_DATATYPE     (SQLITE_CONSTRAINT |(12<<8))
  575#define SQLITE_NOTICE_RECOVER_WAL      (SQLITE_NOTICE | (1<<8))
  576#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
  577#define SQLITE_NOTICE_RBU              (SQLITE_NOTICE | (3<<8))
  578#define SQLITE_WARNING_AUTOINDEX       (SQLITE_WARNING | (1<<8))
  579#define SQLITE_AUTH_USER               (SQLITE_AUTH | (1<<8))
  580#define SQLITE_OK_LOAD_PERMANENTLY     (SQLITE_OK | (1<<8))
  581#define SQLITE_OK_SYMLINK              (SQLITE_OK | (2<<8)) /* internal only */
  582
  583/*
  584** CAPI3REF: Flags For File Open Operations
  585**
  586** These bit values are intended for use in the
  587** 3rd parameter to the [sqlite3_open_v2()] interface and
  588** in the 4th parameter to the [sqlite3_vfs.xOpen] method.
  589**
  590** Only those flags marked as "Ok for sqlite3_open_v2()" may be
  591** used as the third argument to the [sqlite3_open_v2()] interface.
  592** The other flags have historically been ignored by sqlite3_open_v2(),
  593** though future versions of SQLite might change so that an error is
  594** raised if any of the disallowed bits are passed into sqlite3_open_v2().
  595** Applications should not depend on the historical behavior.
  596**
  597** Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into
  598** [sqlite3_open_v2()] does *not* cause the underlying database file
  599** to be opened using O_EXCL.  Passing SQLITE_OPEN_EXCLUSIVE into
  600** [sqlite3_open_v2()] has historically been a no-op and might become an
  601** error in future versions of SQLite.
  602*/
  603#define SQLITE_OPEN_READONLY         0x00000001  /* Ok for sqlite3_open_v2() */
  604#define SQLITE_OPEN_READWRITE        0x00000002  /* Ok for sqlite3_open_v2() */
  605#define SQLITE_OPEN_CREATE           0x00000004  /* Ok for sqlite3_open_v2() */
  606#define SQLITE_OPEN_DELETEONCLOSE    0x00000008  /* VFS only */
  607#define SQLITE_OPEN_EXCLUSIVE        0x00000010  /* VFS only */
  608#define SQLITE_OPEN_AUTOPROXY        0x00000020  /* VFS only */
  609#define SQLITE_OPEN_URI              0x00000040  /* Ok for sqlite3_open_v2() */
  610#define SQLITE_OPEN_MEMORY           0x00000080  /* Ok for sqlite3_open_v2() */
  611#define SQLITE_OPEN_MAIN_DB          0x00000100  /* VFS only */
  612#define SQLITE_OPEN_TEMP_DB          0x00000200  /* VFS only */
  613#define SQLITE_OPEN_TRANSIENT_DB     0x00000400  /* VFS only */
  614#define SQLITE_OPEN_MAIN_JOURNAL     0x00000800  /* VFS only */
  615#define SQLITE_OPEN_TEMP_JOURNAL     0x00001000  /* VFS only */
  616#define SQLITE_OPEN_SUBJOURNAL       0x00002000  /* VFS only */
  617#define SQLITE_OPEN_SUPER_JOURNAL    0x00004000  /* VFS only */
  618#define SQLITE_OPEN_NOMUTEX          0x00008000  /* Ok for sqlite3_open_v2() */
  619#define SQLITE_OPEN_FULLMUTEX        0x00010000  /* Ok for sqlite3_open_v2() */
  620#define SQLITE_OPEN_SHAREDCACHE      0x00020000  /* Ok for sqlite3_open_v2() */
  621#define SQLITE_OPEN_PRIVATECACHE     0x00040000  /* Ok for sqlite3_open_v2() */
  622#define SQLITE_OPEN_WAL              0x00080000  /* VFS only */
  623#define SQLITE_OPEN_NOFOLLOW         0x01000000  /* Ok for sqlite3_open_v2() */
  624#define SQLITE_OPEN_EXRESCODE        0x02000000  /* Extended result codes */
  625
  626/* Reserved:                         0x00F00000 */
  627/* Legacy compatibility: */
  628#define SQLITE_OPEN_MASTER_JOURNAL   0x00004000  /* VFS only */
  629
  630
  631/*
  632** CAPI3REF: Device Characteristics
  633**
  634** The xDeviceCharacteristics method of the [sqlite3_io_methods]
  635** object returns an integer which is a vector of these
  636** bit values expressing I/O characteristics of the mass storage
  637** device that holds the file that the [sqlite3_io_methods]
  638** refers to.
  639**
  640** The SQLITE_IOCAP_ATOMIC property means that all writes of
  641** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
  642** mean that writes of blocks that are nnn bytes in size and
  643** are aligned to an address which is an integer multiple of
  644** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
  645** that when data is appended to a file, the data is appended
  646** first then the size of the file is extended, never the other
  647** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
  648** information is written to disk in the same order as calls
  649** to xWrite().  The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
  650** after reboot following a crash or power loss, the only bytes in a
  651** file that were written at the application level might have changed
  652** and that adjacent bytes, even bytes within the same sector are
  653** guaranteed to be unchanged.  The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
  654** flag indicates that a file cannot be deleted when open.  The
  655** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
  656** read-only media and cannot be changed even by processes with
  657** elevated privileges.
  658**
  659** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
  660** filesystem supports doing multiple write operations atomically when those
  661** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
  662** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
  663**
  664** The SQLITE_IOCAP_SUBPAGE_READ property means that it is ok to read
  665** from the database file in amounts that are not a multiple of the
  666** page size and that do not begin at a page boundary.  Without this
  667** property, SQLite is careful to only do full-page reads and write
  668** on aligned pages, with the one exception that it will do a sub-page
  669** read of the first page to access the database header.
  670*/
  671#define SQLITE_IOCAP_ATOMIC                 0x00000001
  672#define SQLITE_IOCAP_ATOMIC512              0x00000002
  673#define SQLITE_IOCAP_ATOMIC1K               0x00000004
  674#define SQLITE_IOCAP_ATOMIC2K               0x00000008
  675#define SQLITE_IOCAP_ATOMIC4K               0x00000010
  676#define SQLITE_IOCAP_ATOMIC8K               0x00000020
  677#define SQLITE_IOCAP_ATOMIC16K              0x00000040
  678#define SQLITE_IOCAP_ATOMIC32K              0x00000080
  679#define SQLITE_IOCAP_ATOMIC64K              0x00000100
  680#define SQLITE_IOCAP_SAFE_APPEND            0x00000200
  681#define SQLITE_IOCAP_SEQUENTIAL             0x00000400
  682#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN  0x00000800
  683#define SQLITE_IOCAP_POWERSAFE_OVERWRITE    0x00001000
  684#define SQLITE_IOCAP_IMMUTABLE              0x00002000
  685#define SQLITE_IOCAP_BATCH_ATOMIC           0x00004000
  686#define SQLITE_IOCAP_SUBPAGE_READ           0x00008000
  687
  688/*
  689** CAPI3REF: File Locking Levels
  690**
  691** SQLite uses one of these integer values as the second
  692** argument to calls it makes to the xLock() and xUnlock() methods
  693** of an [sqlite3_io_methods] object.  These values are ordered from
  694** least restrictive to most restrictive.
  695**
  696** The argument to xLock() is always SHARED or higher.  The argument to
  697** xUnlock is either SHARED or NONE.
  698*/
  699#define SQLITE_LOCK_NONE          0       /* xUnlock() only */
  700#define SQLITE_LOCK_SHARED        1       /* xLock() or xUnlock() */
  701#define SQLITE_LOCK_RESERVED      2       /* xLock() only */
  702#define SQLITE_LOCK_PENDING       3       /* xLock() only */
  703#define SQLITE_LOCK_EXCLUSIVE     4       /* xLock() only */
  704
  705/*
  706** CAPI3REF: Synchronization Type Flags
  707**
  708** When SQLite invokes the xSync() method of an
  709** [sqlite3_io_methods] object it uses a combination of
  710** these integer values as the second argument.
  711**
  712** When the SQLITE_SYNC_DATAONLY flag is used, it means that the
  713** sync operation only needs to flush data to mass storage.  Inode
  714** information need not be flushed. If the lower four bits of the flag
  715** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
  716** If the lower four bits equal SQLITE_SYNC_FULL, that means
  717** to use Mac OS X style fullsync instead of fsync().
  718**
  719** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
  720** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
  721** settings.  The [synchronous pragma] determines when calls to the
  722** xSync VFS method occur and applies uniformly across all platforms.
  723** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
  724** energetic or rigorous or forceful the sync operations are and
  725** only make a difference on Mac OSX for the default SQLite code.
  726** (Third-party VFS implementations might also make the distinction
  727** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
  728** operating systems natively supported by SQLite, only Mac OSX
  729** cares about the difference.)
  730*/
  731#define SQLITE_SYNC_NORMAL        0x00002
  732#define SQLITE_SYNC_FULL          0x00003
  733#define SQLITE_SYNC_DATAONLY      0x00010
  734
  735/*
  736** CAPI3REF: OS Interface Open File Handle
  737**
  738** An [sqlite3_file] object represents an open file in the
  739** [sqlite3_vfs | OS interface layer].  Individual OS interface
  740** implementations will
  741** want to subclass this object by appending additional fields
  742** for their own use.  The pMethods entry is a pointer to an
  743** [sqlite3_io_methods] object that defines methods for performing
  744** I/O operations on the open file.
  745*/
  746typedef struct sqlite3_file sqlite3_file;
  747struct sqlite3_file {
  748  const struct sqlite3_io_methods *pMethods;  /* Methods for an open file */
  749};
  750
  751/*
  752** CAPI3REF: OS Interface File Virtual Methods Object
  753**
  754** Every file opened by the [sqlite3_vfs.xOpen] method populates an
  755** [sqlite3_file] object (or, more commonly, a subclass of the
  756** [sqlite3_file] object) with a pointer to an instance of this object.
  757** This object defines the methods used to perform various operations
  758** against the open file represented by the [sqlite3_file] object.
  759**
  760** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element
  761** to a non-NULL pointer, then the sqlite3_io_methods.xClose method
  762** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed.  The
  763** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen]
  764** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element
  765** to NULL.
  766**
  767** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
  768** [SQLITE_SYNC_FULL].  The first choice is the normal fsync().
  769** The second choice is a Mac OS X style fullsync.  The [SQLITE_SYNC_DATAONLY]
  770** flag may be ORed in to indicate that only the data of the file
  771** and not its inode needs to be synced.
  772**
  773** The integer values to xLock() and xUnlock() are one of
  774** <ul>
  775** <li> [SQLITE_LOCK_NONE],
  776** <li> [SQLITE_LOCK_SHARED],
  777** <li> [SQLITE_LOCK_RESERVED],
  778** <li> [SQLITE_LOCK_PENDING], or
  779** <li> [SQLITE_LOCK_EXCLUSIVE].
  780** </ul>
  781** xLock() upgrades the database file lock.  In other words, xLock() moves the
  782** database file lock in the direction NONE toward EXCLUSIVE. The argument to
  783** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
  784** SQLITE_LOCK_NONE.  If the database file lock is already at or above the
  785** requested lock, then the call to xLock() is a no-op.
  786** xUnlock() downgrades the database file lock to either SHARED or NONE.
  787** If the lock is already at or below the requested lock state, then the call
  788** to xUnlock() is a no-op.
  789** The xCheckReservedLock() method checks whether any database connection,
  790** either in this process or in some other process, is holding a RESERVED,
  791** PENDING, or EXCLUSIVE lock on the file.  It returns, via its output
  792** pointer parameter, true if such a lock exists and false otherwise.
  793**
  794** The xFileControl() method is a generic interface that allows custom
  795** VFS implementations to directly control an open file using the
  796** [sqlite3_file_control()] interface.  The second "op" argument is an
  797** integer opcode.  The third argument is a generic pointer intended to
  798** point to a structure that may contain arguments or space in which to
  799** write return values.  Potential uses for xFileControl() might be
  800** functions to enable blocking locks with timeouts, to change the
  801** locking strategy (for example to use dot-file locks), to inquire
  802** about the status of a lock, or to break stale locks.  The SQLite
  803** core reserves all opcodes less than 100 for its own use.
  804** A [file control opcodes | list of opcodes] less than 100 is available.
  805** Applications that define a custom xFileControl method should use opcodes
  806** greater than 100 to avoid conflicts.  VFS implementations should
  807** return [SQLITE_NOTFOUND] for file control opcodes that they do not
  808** recognize.
  809**
  810** The xSectorSize() method returns the sector size of the
  811** device that underlies the file.  The sector size is the
  812** minimum write that can be performed without disturbing
  813** other bytes in the file.  The xDeviceCharacteristics()
  814** method returns a bit vector describing behaviors of the
  815** underlying device:
  816**
  817** <ul>
  818** <li> [SQLITE_IOCAP_ATOMIC]
  819** <li> [SQLITE_IOCAP_ATOMIC512]
  820** <li> [SQLITE_IOCAP_ATOMIC1K]
  821** <li> [SQLITE_IOCAP_ATOMIC2K]
  822** <li> [SQLITE_IOCAP_ATOMIC4K]
  823** <li> [SQLITE_IOCAP_ATOMIC8K]
  824** <li> [SQLITE_IOCAP_ATOMIC16K]
  825** <li> [SQLITE_IOCAP_ATOMIC32K]
  826** <li> [SQLITE_IOCAP_ATOMIC64K]
  827** <li> [SQLITE_IOCAP_SAFE_APPEND]
  828** <li> [SQLITE_IOCAP_SEQUENTIAL]
  829** <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN]
  830** <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE]
  831** <li> [SQLITE_IOCAP_IMMUTABLE]
  832** <li> [SQLITE_IOCAP_BATCH_ATOMIC]
  833** <li> [SQLITE_IOCAP_SUBPAGE_READ]
  834** </ul>
  835**
  836** The SQLITE_IOCAP_ATOMIC property means that all writes of
  837** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
  838** mean that writes of blocks that are nnn bytes in size and
  839** are aligned to an address which is an integer multiple of
  840** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
  841** that when data is appended to a file, the data is appended
  842** first then the size of the file is extended, never the other
  843** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
  844** information is written to disk in the same order as calls
  845** to xWrite().
  846**
  847** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
  848** in the unread portions of the buffer with zeros.  A VFS that
  849** fails to zero-fill short reads might seem to work.  However,
  850** failure to zero-fill short reads will eventually lead to
  851** database corruption.
  852*/
  853typedef struct sqlite3_io_methods sqlite3_io_methods;
  854struct sqlite3_io_methods {
  855  int iVersion;
  856  int (*xClose)(sqlite3_file*);
  857  int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
  858  int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
  859  int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
  860  int (*xSync)(sqlite3_file*, int flags);
  861  int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
  862  int (*xLock)(sqlite3_file*, int);
  863  int (*xUnlock)(sqlite3_file*, int);
  864  int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
  865  int (*xFileControl)(sqlite3_file*, int op, void *pArg);
  866  int (*xSectorSize)(sqlite3_file*);
  867  int (*xDeviceCharacteristics)(sqlite3_file*);
  868  /* Methods above are valid for version 1 */
  869  int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
  870  int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
  871  void (*xShmBarrier)(sqlite3_file*);
  872  int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
  873  /* Methods above are valid for version 2 */
  874  int (*xFetch)(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp);
  875  int (*xUnfetch)(sqlite3_file*, sqlite3_int64 iOfst, void *p);
  876  /* Methods above are valid for version 3 */
  877  /* Additional methods may be added in future releases */
  878};
  879
  880/*
  881** CAPI3REF: Standard File Control Opcodes
  882** KEYWORDS: {file control opcodes} {file control opcode}
  883**
  884** These integer constants are opcodes for the xFileControl method
  885** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
  886** interface.
  887**
  888** <ul>
  889** <li>[[SQLITE_FCNTL_LOCKSTATE]]
  890** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging.  This
  891** opcode causes the xFileControl method to write the current state of
  892** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED],
  893** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE])
  894** into an integer that the pArg argument points to.
  895** This capability is only available if SQLite is compiled with [SQLITE_DEBUG].
  896**
  897** <li>[[SQLITE_FCNTL_SIZE_HINT]]
  898** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
  899** layer a hint of how large the database file will grow to be during the
  900** current transaction.  This hint is not guaranteed to be accurate but it
  901** is often close.  The underlying VFS might choose to preallocate database
  902** file space based on this hint in order to help writes to the database
  903** file run faster.
  904**
  905** <li>[[SQLITE_FCNTL_SIZE_LIMIT]]
  906** The [SQLITE_FCNTL_SIZE_LIMIT] opcode is used by in-memory VFS that
  907** implements [sqlite3_deserialize()] to set an upper bound on the size
  908** of the in-memory database.  The argument is a pointer to a [sqlite3_int64].
  909** If the integer pointed to is negative, then it is filled in with the
  910** current limit.  Otherwise the limit is set to the larger of the value
  911** of the integer pointed to and the current database size.  The integer
  912** pointed to is set to the new limit.
  913**
  914** <li>[[SQLITE_FCNTL_CHUNK_SIZE]]
  915** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
  916** extends and truncates the database file in chunks of a size specified
  917** by the user. The fourth argument to [sqlite3_file_control()] should
  918** point to an integer (type int) containing the new chunk-size to use
  919** for the nominated database. Allocating database file space in large
  920** chunks (say 1MB at a time), may reduce file-system fragmentation and
  921** improve performance on some systems.
  922**
  923** <li>[[SQLITE_FCNTL_FILE_POINTER]]
  924** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
  925** to the [sqlite3_file] object associated with a particular database
  926** connection.  See also [SQLITE_FCNTL_JOURNAL_POINTER].
  927**
  928** <li>[[SQLITE_FCNTL_JOURNAL_POINTER]]
  929** The [SQLITE_FCNTL_JOURNAL_POINTER] opcode is used to obtain a pointer
  930** to the [sqlite3_file] object associated with the journal file (either
  931** the [rollback journal] or the [write-ahead log]) for a particular database
  932** connection.  See also [SQLITE_FCNTL_FILE_POINTER].
  933**
  934** <li>[[SQLITE_FCNTL_SYNC_OMITTED]]
  935** The SQLITE_FCNTL_SYNC_OMITTED file-control is no longer used.
  936**
  937** <li>[[SQLITE_FCNTL_SYNC]]
  938** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and
  939** sent to the VFS immediately before the xSync method is invoked on a
  940** database file descriptor. Or, if the xSync method is not invoked
  941** because the user has configured SQLite with
  942** [PRAGMA synchronous | PRAGMA synchronous=OFF] it is invoked in place
  943** of the xSync method. In most cases, the pointer argument passed with
  944** this file-control is NULL. However, if the database file is being synced
  945** as part of a multi-database commit, the argument points to a nul-terminated
  946** string containing the transactions super-journal file name. VFSes that
  947** do not need this signal should silently ignore this opcode. Applications
  948** should not call [sqlite3_file_control()] with this opcode as doing so may
  949** disrupt the operation of the specialized VFSes that do require it.
  950**
  951** <li>[[SQLITE_FCNTL_COMMIT_PHASETWO]]
  952** The [SQLITE_FCNTL_COMMIT_PHASETWO] opcode is generated internally by SQLite
  953** and sent to the VFS after a transaction has been committed immediately
  954** but before the database is unlocked. VFSes that do not need this signal
  955** should silently ignore this opcode. Applications should not call
  956** [sqlite3_file_control()] with this opcode as doing so may disrupt the
  957** operation of the specialized VFSes that do require it.
  958**
  959** <li>[[SQLITE_FCNTL_WIN32_AV_RETRY]]
  960** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
  961** retry counts and intervals for certain disk I/O operations for the
  962** windows [VFS] in order to provide robustness in the presence of
  963** anti-virus programs.  By default, the windows VFS will retry file read,
  964** file write, and file delete operations up to 10 times, with a delay
  965** of 25 milliseconds before the first retry and with the delay increasing
  966** by an additional 25 milliseconds with each subsequent retry.  This
  967** opcode allows these two values (10 retries and 25 milliseconds of delay)
  968** to be adjusted.  The values are changed for all database connections
  969** within the same process.  The argument is a pointer to an array of two
  970** integers where the first integer is the new retry count and the second
  971** integer is the delay.  If either integer is negative, then the setting
  972** is not changed but instead the prior value of that setting is written
  973** into the array entry, allowing the current retry settings to be
  974** interrogated.  The zDbName parameter is ignored.
  975**
  976** <li>[[SQLITE_FCNTL_PERSIST_WAL]]
  977** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
  978** persistent [WAL | Write Ahead Log] setting.  By default, the auxiliary
  979** write ahead log ([WAL file]) and shared memory
  980** files used for transaction control
  981** are automatically deleted when the latest connection to the database
  982** closes.  Setting persistent WAL mode causes those files to persist after
  983** close.  Persisting the files is useful when other processes that do not
  984** have write permission on the directory containing the database file want
  985** to read the database file, as the WAL and shared memory files must exist
  986** in order for the database to be readable.  The fourth parameter to
  987** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
  988** That integer is 0 to disable persistent WAL mode or 1 to enable persistent
  989** WAL mode.  If the integer is -1, then it is overwritten with the current
  990** WAL persistence setting.
  991**
  992** <li>[[SQLITE_FCNTL_POWERSAFE_OVERWRITE]]
  993** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the
  994** persistent "powersafe-overwrite" or "PSOW" setting.  The PSOW setting
  995** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the
  996** xDeviceCharacteristics methods. The fourth parameter to
  997** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
  998** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage
  999** mode.  If the integer is -1, then it is overwritten with the current
 1000** zero-damage mode setting.
 1001**
 1002** <li>[[SQLITE_FCNTL_OVERWRITE]]
 1003** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening
 1004** a write transaction to indicate that, unless it is rolled back for some
 1005** reason, the entire database file will be overwritten by the current
 1006** transaction. This is used by VACUUM operations.
 1007**
 1008** <li>[[SQLITE_FCNTL_VFSNAME]]
 1009** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of
 1010** all [VFSes] in the VFS stack.  The names of all VFS shims and the
 1011** final bottom-level VFS are written into memory obtained from
 1012** [sqlite3_malloc()] and the result is stored in the char* variable
 1013** that the fourth parameter of [sqlite3_file_control()] points to.
 1014** The caller is responsible for freeing the memory when done.  As with
 1015** all file-control actions, there is no guarantee that this will actually
 1016** do anything.  Callers should initialize the char* variable to a NULL
 1017** pointer in case this file-control is not implemented.  This file-control
 1018** is intended for diagnostic use only.
 1019**
 1020** <li>[[SQLITE_FCNTL_VFS_POINTER]]
 1021** ^The [SQLITE_FCNTL_VFS_POINTER] opcode finds a pointer to the top-level
 1022** [VFSes] currently in use.  ^(The argument X in
 1023** sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be
 1024** of type "[sqlite3_vfs] **".  This opcode will set *X
 1025** to a pointer to the top-level VFS.)^
 1026** ^When there are multiple VFS shims in the stack, this opcode finds the
 1027** upper-most shim only.
 1028**
 1029** <li>[[SQLITE_FCNTL_PRAGMA]]
 1030** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA]
 1031** file control is sent to the open [sqlite3_file] object corresponding
 1032** to the database file to which the pragma statement refers. ^The argument
 1033** to the [SQLITE_FCNTL_PRAGMA] file control is an array of
 1034** pointers to strings (char**) in which the second element of the array
 1035** is the name of the pragma and the third element is the argument to the
 1036** pragma or NULL if the pragma has no argument.  ^The handler for an
 1037** [SQLITE_FCNTL_PRAGMA] file control can optionally make the first element
 1038** of the char** argument point to a string obtained from [sqlite3_mprintf()]
 1039** or the equivalent and that string will become the result of the pragma or
 1040** the error message if the pragma fails. ^If the
 1041** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal
 1042** [PRAGMA] processing continues.  ^If the [SQLITE_FCNTL_PRAGMA]
 1043** file control returns [SQLITE_OK], then the parser assumes that the
 1044** VFS has handled the PRAGMA itself and the parser generates a no-op
 1045** prepared statement if result string is NULL, or that returns a copy
 1046** of the result string if the string is non-NULL.
 1047** ^If the [SQLITE_FCNTL_PRAGMA] file control returns
 1048** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means
 1049** that the VFS encountered an error while handling the [PRAGMA] and the
 1050** compilation of the PRAGMA fails with an error.  ^The [SQLITE_FCNTL_PRAGMA]
 1051** file control occurs at the beginning of pragma statement analysis and so
 1052** it is able to override built-in [PRAGMA] statements.
 1053**
 1054** <li>[[SQLITE_FCNTL_BUSYHANDLER]]
 1055** ^The [SQLITE_FCNTL_BUSYHANDLER]
 1056** file-control may be invoked by SQLite on the database file handle
 1057** shortly after it is opened in order to provide a custom VFS with access
 1058** to the connection's busy-handler callback. The argument is of type (void**)
 1059** - an array of two (void *) values. The first (void *) actually points
 1060** to a function of type (int (*)(void *)). In order to invoke the connection's
 1061** busy-handler, this function should be invoked with the second (void *) in
 1062** the array as the only argument. If it returns non-zero, then the operation
 1063** should be retried. If it returns zero, the custom VFS should abandon the
 1064** current operation.
 1065**
 1066** <li>[[SQLITE_FCNTL_TEMPFILENAME]]
 1067** ^Applications can invoke the [SQLITE_FCNTL_TEMPFILENAME] file-control
 1068** to have SQLite generate a
 1069** temporary filename using the same algorithm that is followed to generate
 1070** temporary filenames for TEMP tables and other internal uses.  The
 1071** argument should be a char** which will be filled with the filename
 1072** written into memory obtained from [sqlite3_malloc()].  The caller should
 1073** invoke [sqlite3_free()] on the result to avoid a memory leak.
 1074**
 1075** <li>[[SQLITE_FCNTL_MMAP_SIZE]]
 1076** The [SQLITE_FCNTL_MMAP_SIZE] file control is used to query or set the
 1077** maximum number of bytes that will be used for memory-mapped I/O.
 1078** The argument is a pointer to a value of type sqlite3_int64 that
 1079** is an advisory maximum number of bytes in the file to memory map.  The
 1080** pointer is overwritten with the old value.  The limit is not changed if
 1081** the value originally pointed to is negative, and so the current limit
 1082** can be queried by passing in a pointer to a negative number.  This
 1083** file-control is used internally to implement [PRAGMA mmap_size].
 1084**
 1085** <li>[[SQLITE_FCNTL_TRACE]]
 1086** The [SQLITE_FCNTL_TRACE] file control provides advisory information
 1087** to the VFS about what the higher layers of the SQLite stack are doing.
 1088** This file control is used by some VFS activity tracing [shims].
 1089** The argument is a zero-terminated string.  Higher layers in the
 1090** SQLite stack may generate instances of this file control if
 1091** the [SQLITE_USE_FCNTL_TRACE] compile-time option is enabled.
 1092**
 1093** <li>[[SQLITE_FCNTL_HAS_MOVED]]
 1094** The [SQLITE_FCNTL_HAS_MOVED] file control interprets its argument as a
 1095** pointer to an integer and it writes a boolean into that integer depending
 1096** on whether or not the file has been renamed, moved, or deleted since it
 1097** was first opened.
 1098**
 1099** <li>[[SQLITE_FCNTL_WIN32_GET_HANDLE]]
 1100** The [SQLITE_FCNTL_WIN32_GET_HANDLE] opcode can be used to obtain the
 1101** underlying native file handle associated with a file handle.  This file
 1102** control interprets its argument as a pointer to a native file handle and
 1103** writes the resulting value there.
 1104**
 1105** <li>[[SQLITE_FCNTL_WIN32_SET_HANDLE]]
 1106** The [SQLITE_FCNTL_WIN32_SET_HANDLE] opcode is used for debugging.  This
 1107** opcode causes the xFileControl method to swap the file handle with the one
 1108** pointed to by the pArg argument.  This capability is used during testing
 1109** and only needs to be supported when SQLITE_TEST is defined.
 1110**
 1111** <li>[[SQLITE_FCNTL_NULL_IO]]
 1112** The [SQLITE_FCNTL_NULL_IO] opcode sets the low-level file descriptor
 1113** or file handle for the [sqlite3_file] object such that it will no longer
 1114** read or write to the database file.
 1115**
 1116** <li>[[SQLITE_FCNTL_WAL_BLOCK]]
 1117** The [SQLITE_FCNTL_WAL_BLOCK] is a signal to the VFS layer that it might
 1118** be advantageous to block on the next WAL lock if the lock is not immediately
 1119** available.  The WAL subsystem issues this signal during rare
 1120** circumstances in order to fix a problem with priority inversion.
 1121** Applications should <em>not</em> use this file-control.
 1122**
 1123** <li>[[SQLITE_FCNTL_ZIPVFS]]
 1124** The [SQLITE_FCNTL_ZIPVFS] opcode is implemented by zipvfs only. All other
 1125** VFS should return SQLITE_NOTFOUND for this opcode.
 1126**
 1127** <li>[[SQLITE_FCNTL_RBU]]
 1128** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by
 1129** the RBU extension only.  All other VFS should return SQLITE_NOTFOUND for
 1130** this opcode.
 1131**
 1132** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]]
 1133** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then
 1134** the file descriptor is placed in "batch write mode", which
 1135** means all subsequent write operations will be deferred and done
 1136** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].  Systems
 1137** that do not support batch atomic writes will return SQLITE_NOTFOUND.
 1138** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
 1139** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or
 1140** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make
 1141** no VFS interface calls on the same [sqlite3_file] file descriptor
 1142** except for calls to the xWrite method and the xFileControl method
 1143** with [SQLITE_FCNTL_SIZE_HINT].
 1144**
 1145** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]]
 1146** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write
 1147** operations since the previous successful call to
 1148** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically.
 1149** This file control returns [SQLITE_OK] if and only if the writes were
 1150** all performed successfully and have been committed to persistent storage.
 1151** ^Regardless of whether or not it is successful, this file control takes
 1152** the file descriptor out of batch write mode so that all subsequent
 1153** write operations are independent.
 1154** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
 1155** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
 1156**
 1157** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]]
 1158** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write
 1159** operations since the previous successful call to
 1160** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back.
 1161** ^This file control takes the file descriptor out of batch write mode
 1162** so that all subsequent write operations are independent.
 1163** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
 1164** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
 1165**
 1166** <li>[[SQLITE_FCNTL_LOCK_TIMEOUT]]
 1167** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode is used to configure a VFS
 1168** to block for up to M milliseconds before failing when attempting to
 1169** obtain a file lock using the xLock or xShmLock methods of the VFS.
 1170** The parameter is a pointer to a 32-bit signed integer that contains
 1171** the value that M is to be set to. Before returning, the 32-bit signed
 1172** integer is overwritten with the previous value of M.
 1173**
 1174** <li>[[SQLITE_FCNTL_BLOCK_ON_CONNECT]]
 1175** The [SQLITE_FCNTL_BLOCK_ON_CONNECT] opcode is used to configure the
 1176** VFS to block when taking a SHARED lock to connect to a wal mode database.
 1177** This is used to implement the functionality associated with
 1178** SQLITE_SETLK_BLOCK_ON_CONNECT.
 1179**
 1180** <li>[[SQLITE_FCNTL_DATA_VERSION]]
 1181** The [SQLITE_FCNTL_DATA_VERSION] opcode is used to detect changes to
 1182** a database file.  The argument is a pointer to a 32-bit unsigned integer.
 1183** The "data version" for the pager is written into the pointer.  The
 1184** "data version" changes whenever any change occurs to the corresponding
 1185** database file, either through SQL statements on the same database
 1186** connection or through transactions committed by separate database
 1187** connections possibly in other processes. The [sqlite3_total_changes()]
 1188** interface can be used to find if any database on the connection has changed,
 1189** but that interface responds to changes on TEMP as well as MAIN and does
 1190** not provide a mechanism to detect changes to MAIN only.  Also, the
 1191** [sqlite3_total_changes()] interface responds to internal changes only and
 1192** omits changes made by other database connections.  The
 1193** [PRAGMA data_version] command provides a mechanism to detect changes to
 1194** a single attached database that occur due to other database connections,
 1195** but omits changes implemented by the database connection on which it is
 1196** called.  This file control is the only mechanism to detect changes that
 1197** happen either internally or externally and that are associated with
 1198** a particular attached database.
 1199**
 1200** <li>[[SQLITE_FCNTL_CKPT_START]]
 1201** The [SQLITE_FCNTL_CKPT_START] opcode is invoked from within a checkpoint
 1202** in wal mode before the client starts to copy pages from the wal
 1203** file to the database file.
 1204**
 1205** <li>[[SQLITE_FCNTL_CKPT_DONE]]
 1206** The [SQLITE_FCNTL_CKPT_DONE] opcode is invoked from within a checkpoint
 1207** in wal mode after the client has finished copying pages from the wal
 1208** file to the database file, but before the *-shm file is updated to
 1209** record the fact that the pages have been checkpointed.
 1210**
 1211** <li>[[SQLITE_FCNTL_EXTERNAL_READER]]
 1212** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect
 1213** whether or not there is a database client in another process with a wal-mode
 1214** transaction open on the database or not. It is only available on unix. The
 1215** (void*) argument passed with this file-control should be a pointer to a
 1216** value of type (int). The integer value is set to 1 if the database is a wal
 1217** mode database and there exists at least one client in another process that
 1218** currently has an SQL transaction open on the database. It is set to 0 if
 1219** the database is not a wal-mode db, or if there is no such connection in any
 1220** other process. This opcode cannot be used to detect transactions opened
 1221** by clients within the current process, only within other processes.
 1222**
 1223** <li>[[SQLITE_FCNTL_CKSM_FILE]]
 1224** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use internally by the
 1225** [checksum VFS shim] only.
 1226**
 1227** <li>[[SQLITE_FCNTL_RESET_CACHE]]
 1228** If there is currently no transaction open on the database, and the
 1229** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control
 1230** purges the contents of the in-memory page cache. If there is an open
 1231** transaction, or if the db is a temp-db, this opcode is a no-op, not an error.
 1232**
 1233** <li>[[SQLITE_FCNTL_FILESTAT]]
 1234** The [SQLITE_FCNTL_FILESTAT] opcode returns low-level diagnostic information
 1235** about the [sqlite3_file] objects used access the database and journal files
 1236** for the given schema.  The fourth parameter to [sqlite3_file_control()]
 1237** should be an initialized [sqlite3_str] pointer.  JSON text describing
 1238** various aspects of the sqlite3_file object is appended to the sqlite3_str.
 1239** The SQLITE_FCNTL_FILESTAT opcode is usually a no-op, unless compile-time
 1240** options are used to enable it.
 1241** </ul>
 1242*/
 1243#define SQLITE_FCNTL_LOCKSTATE               1
 1244#define SQLITE_FCNTL_GET_LOCKPROXYFILE       2
 1245#define SQLITE_FCNTL_SET_LOCKPROXYFILE       3
 1246#define SQLITE_FCNTL_LAST_ERRNO              4
 1247#define SQLITE_FCNTL_SIZE_HINT               5
 1248#define SQLITE_FCNTL_CHUNK_SIZE              6
 1249#define SQLITE_FCNTL_FILE_POINTER            7
 1250#define SQLITE_FCNTL_SYNC_OMITTED            8
 1251#define SQLITE_FCNTL_WIN32_AV_RETRY          9
 1252#define SQLITE_FCNTL_PERSIST_WAL            10
 1253#define SQLITE_FCNTL_OVERWRITE              11
 1254#define SQLITE_FCNTL_VFSNAME                12
 1255#define SQLITE_FCNTL_POWERSAFE_OVERWRITE    13
 1256#define SQLITE_FCNTL_PRAGMA                 14
 1257#define SQLITE_FCNTL_BUSYHANDLER            15
 1258#define SQLITE_FCNTL_TEMPFILENAME           16
 1259#define SQLITE_FCNTL_MMAP_SIZE              18
 1260#define SQLITE_FCNTL_TRACE                  19
 1261#define SQLITE_FCNTL_HAS_MOVED              20
 1262#define SQLITE_FCNTL_SYNC                   21
 1263#define SQLITE_FCNTL_COMMIT_PHASETWO        22
 1264#define SQLITE_FCNTL_WIN32_SET_HANDLE       23
 1265#define SQLITE_FCNTL_WAL_BLOCK              24
 1266#define SQLITE_FCNTL_ZIPVFS                 25
 1267#define SQLITE_FCNTL_RBU                    26
 1268#define SQLITE_FCNTL_VFS_POINTER            27
 1269#define SQLITE_FCNTL_JOURNAL_POINTER        28
 1270#define SQLITE_FCNTL_WIN32_GET_HANDLE       29
 1271#define SQLITE_FCNTL_PDB                    30
 1272#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE     31
 1273#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE    32
 1274#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE  33
 1275#define SQLITE_FCNTL_LOCK_TIMEOUT           34
 1276#define SQLITE_FCNTL_DATA_VERSION           35
 1277#define SQLITE_FCNTL_SIZE_LIMIT             36
 1278#define SQLITE_FCNTL_CKPT_DONE              37
 1279#define SQLITE_FCNTL_RESERVE_BYTES          38
 1280#define SQLITE_FCNTL_CKPT_START             39
 1281#define SQLITE_FCNTL_EXTERNAL_READER        40
 1282#define SQLITE_FCNTL_CKSM_FILE              41
 1283#define SQLITE_FCNTL_RESET_CACHE            42
 1284#define SQLITE_FCNTL_NULL_IO                43
 1285#define SQLITE_FCNTL_BLOCK_ON_CONNECT       44
 1286#define SQLITE_FCNTL_FILESTAT               45
 1287
 1288/* deprecated names */
 1289#define SQLITE_GET_LOCKPROXYFILE      SQLITE_FCNTL_GET_LOCKPROXYFILE
 1290#define SQLITE_SET_LOCKPROXYFILE      SQLITE_FCNTL_SET_LOCKPROXYFILE
 1291#define SQLITE_LAST_ERRNO             SQLITE_FCNTL_LAST_ERRNO
 1292
 1293/* reserved file-control numbers:
 1294**                                         101
 1295**                                         102
 1296**                                         103
 1297*/
 1298
 1299
 1300/*
 1301** CAPI3REF: Mutex Handle
 1302**
 1303** The mutex module within SQLite defines [sqlite3_mutex] to be an
 1304** abstract type for a mutex object.  The SQLite core never looks
 1305** at the internal representation of an [sqlite3_mutex].  It only
 1306** deals with pointers to the [sqlite3_mutex] object.
 1307**
 1308** Mutexes are created using [sqlite3_mutex_alloc()].
 1309*/
 1310typedef struct sqlite3_mutex sqlite3_mutex;
 1311
 1312/*
 1313** CAPI3REF: Loadable Extension Thunk
 1314**
 1315** A pointer to the opaque sqlite3_api_routines structure is passed as
 1316** the third parameter to entry points of [loadable extensions].  This
 1317** structure must be typedefed in order to work around compiler warnings
 1318** on some platforms.
 1319*/
 1320typedef struct sqlite3_api_routines sqlite3_api_routines;
 1321
 1322/*
 1323** CAPI3REF: File Name
 1324**
 1325** Type [sqlite3_filename] is used by SQLite to pass filenames to the
 1326** xOpen method of a [VFS]. It may be cast to (const char*) and treated
 1327** as a normal, nul-terminated, UTF-8 buffer containing the filename, but
 1328** may also be passed to special APIs such as:
 1329**
 1330** <ul>
 1331** <li>  sqlite3_filename_database()
 1332** <li>  sqlite3_filename_journal()
 1333** <li>  sqlite3_filename_wal()
 1334** <li>  sqlite3_uri_parameter()
 1335** <li>  sqlite3_uri_boolean()
 1336** <li>  sqlite3_uri_int64()
 1337** <li>  sqlite3_uri_key()
 1338** </ul>
 1339*/
 1340typedef const char *sqlite3_filename;
 1341
 1342/*
 1343** CAPI3REF: OS Interface Object
 1344**
 1345** An instance of the sqlite3_vfs object defines the interface between
 1346** the SQLite core and the underlying operating system.  The "vfs"
 1347** in the name of the object stands for "virtual file system".  See
 1348** the [VFS | VFS documentation] for further information.
 1349**
 1350** The VFS interface is sometimes extended by adding new methods onto
 1351** the end.  Each time such an extension occurs, the iVersion field
 1352** is incremented.  The iVersion value started out as 1 in
 1353** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2
 1354** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased
 1355** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6].  Additional fields
 1356** may be appended to the sqlite3_vfs object and the iVersion value
 1357** may increase again in future versions of SQLite.
 1358** Note that due to an oversight, the structure
 1359** of the sqlite3_vfs object changed in the transition from
 1360** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0]
 1361** and yet the iVersion field was not increased.
 1362**
 1363** The szOsFile field is the size of the subclassed [sqlite3_file]
 1364** structure used by this VFS.  mxPathname is the maximum length of
 1365** a pathname in this VFS.
 1366**
 1367** Registered sqlite3_vfs objects are kept on a linked list formed by
 1368** the pNext pointer.  The [sqlite3_vfs_register()]
 1369** and [sqlite3_vfs_unregister()] interfaces manage this list
 1370** in a thread-safe way.  The [sqlite3_vfs_find()] interface
 1371** searches the list.  Neither the application code nor the VFS
 1372** implementation should use the pNext pointer.
 1373**
 1374** The pNext field is the only field in the sqlite3_vfs
 1375** structure that SQLite will ever modify.  SQLite will only access
 1376** or modify this field while holding a particular static mutex.
 1377** The application should never modify anything within the sqlite3_vfs
 1378** object once the object has been registered.
 1379**
 1380** The zName field holds the name of the VFS module.  The name must
 1381** be unique across all VFS modules.
 1382**
 1383** [[sqlite3_vfs.xOpen]]
 1384** ^SQLite guarantees that the zFilename parameter to xOpen
 1385** is either a NULL pointer or string obtained
 1386** from xFullPathname() with an optional suffix added.
 1387** ^If a suffix is added to the zFilename parameter, it will
 1388** consist of a single "-" character followed by no more than
 1389** 11 alphanumeric and/or "-" characters.
 1390** ^SQLite further guarantees that
 1391** the string will be valid and unchanged until xClose() is
 1392** called. Because of the previous sentence,
 1393** the [sqlite3_file] can safely store a pointer to the
 1394** filename if it needs to remember the filename for some reason.
 1395** If the zFilename parameter to xOpen is a NULL pointer then xOpen
 1396** must invent its own temporary name for the file.  ^Whenever the
 1397** xFilename parameter is NULL it will also be the case that the
 1398** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
 1399**
 1400** The flags argument to xOpen() includes all bits set in
 1401** the flags argument to [sqlite3_open_v2()].  Or if [sqlite3_open()]
 1402** or [sqlite3_open16()] is used, then flags includes at least
 1403** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE].
 1404** If xOpen() opens a file read-only then it sets *pOutFlags to
 1405** include [SQLITE_OPEN_READONLY].  Other bits in *pOutFlags may be set.
 1406**
 1407** ^(SQLite will also add one of the following flags to the xOpen()
 1408** call, depending on the object being opened:
 1409**
 1410** <ul>
 1411** <li>  [SQLITE_OPEN_MAIN_DB]
 1412** <li>  [SQLITE_OPEN_MAIN_JOURNAL]
 1413** <li>  [SQLITE_OPEN_TEMP_DB]
 1414** <li>  [SQLITE_OPEN_TEMP_JOURNAL]
 1415** <li>  [SQLITE_OPEN_TRANSIENT_DB]
 1416** <li>  [SQLITE_OPEN_SUBJOURNAL]
 1417** <li>  [SQLITE_OPEN_SUPER_JOURNAL]
 1418** <li>  [SQLITE_OPEN_WAL]
 1419** </ul>)^
 1420**
 1421** The file I/O implementation can use the object type flags to
 1422** change the way it deals with files.  For example, an application
 1423** that does not care about crash recovery or rollback might make
 1424** the open of a journal file a no-op.  Writes to this journal would
 1425** also be no-ops, and any attempt to read the journal would return
 1426** SQLITE_IOERR.  Or the implementation might recognize that a database
 1427** file will be doing page-aligned sector reads and writes in a random
 1428** order and set up its I/O subsystem accordingly.
 1429**
 1430** SQLite might also add one of the following flags to the xOpen method:
 1431**
 1432** <ul>
 1433** <li> [SQLITE_OPEN_DELETEONCLOSE]
 1434** <li> [SQLITE_OPEN_EXCLUSIVE]
 1435** </ul>
 1436**
 1437** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
 1438** deleted when it is closed.  ^The [SQLITE_OPEN_DELETEONCLOSE]
 1439** will be set for TEMP databases and their journals, transient
 1440** databases, and subjournals.
 1441**
 1442** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
 1443** with the [SQLITE_OPEN_CREATE] flag, which are both directly
 1444** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
 1445** API.  The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
 1446** SQLITE_OPEN_CREATE, is used to indicate that file should always
 1447** be created, and that it is an error if it already exists.
 1448** It is <i>not</i> used to indicate the file should be opened
 1449** for exclusive access.
 1450**
 1451** ^At least szOsFile bytes of memory are allocated by SQLite
 1452** to hold the [sqlite3_file] structure passed as the third
 1453** argument to xOpen.  The xOpen method does not have to
 1454** allocate the structure; it should just fill it in.  Note that
 1455** the xOpen method must set the sqlite3_file.pMethods to either
 1456** a valid [sqlite3_io_methods] object or to NULL.  xOpen must do
 1457** this even if the open fails.  SQLite expects that the sqlite3_file.pMethods
 1458** element will be valid after xOpen returns regardless of the success
 1459** or failure of the xOpen call.
 1460**
 1461** [[sqlite3_vfs.xAccess]]
 1462** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
 1463** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
 1464** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
 1465** to test whether a file is at least readable.  The SQLITE_ACCESS_READ
 1466** flag is never actually used and is not implemented in the built-in
 1467** VFSes of SQLite.  The file is named by the second argument and can be a
 1468** directory. The xAccess method returns [SQLITE_OK] on success or some
 1469** non-zero error code if there is an I/O error or if the name of
 1470** the file given in the second argument is illegal.  If SQLITE_OK
 1471** is returned, then non-zero or zero is written into *pResOut to indicate
 1472** whether or not the file is accessible.
 1473**
 1474** ^SQLite will always allocate at least mxPathname+1 bytes for the
 1475** output buffer xFullPathname.  The exact size of the output buffer
 1476** is also passed as a parameter to both  methods. If the output buffer
 1477** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
 1478** handled as a fatal error by SQLite, vfs implementations should endeavor
 1479** to prevent this by setting mxPathname to a sufficiently large value.
 1480**
 1481** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
 1482** interfaces are not strictly a part of the filesystem, but they are
 1483** included in the VFS structure for completeness.
 1484** The xRandomness() function attempts to return nBytes bytes
 1485** of good-quality randomness into zOut.  The return value is
 1486** the actual number of bytes of randomness obtained.
 1487** The xSleep() method causes the calling thread to sleep for at
 1488** least the number of microseconds given.  ^The xCurrentTime()
 1489** method returns a Julian Day Number for the current date and time as
 1490** a floating point value.
 1491** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
 1492** Day Number multiplied by 86400000 (the number of milliseconds in
 1493** a 24-hour day).
 1494** ^SQLite will use the xCurrentTimeInt64() method to get the current
 1495** date and time if that method is available (if iVersion is 2 or
 1496** greater and the function pointer is not NULL) and will fall back
 1497** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
 1498**
 1499** ^The xSetSystemCall(), xGetSystemCall(), and xNextSystemCall() interfaces
 1500** are not used by the SQLite core.  These optional interfaces are provided
 1501** by some VFSes to facilitate testing of the VFS code. By overriding
 1502** system calls with functions under its control, a test program can
 1503** simulate faults and error conditions that would otherwise be difficult
 1504** or impossible to induce.  The set of system calls that can be overridden
 1505** varies from one VFS to another, and from one version of the same VFS to the
 1506** next.  Applications that use these interfaces must be prepared for any
 1507** or all of these interfaces to be NULL or for their behavior to change
 1508** from one release to the next.  Applications must not attempt to access
 1509** any of these methods if the iVersion of the VFS is less than 3.
 1510*/
 1511typedef struct sqlite3_vfs sqlite3_vfs;
 1512typedef void (*sqlite3_syscall_ptr)(void);
 1513struct sqlite3_vfs {
 1514  int iVersion;            /* Structure version number (currently 3) */
 1515  int szOsFile;            /* Size of subclassed sqlite3_file */
 1516  int mxPathname;          /* Maximum file pathname length */
 1517  sqlite3_vfs *pNext;      /* Next registered VFS */
 1518  const char *zName;       /* Name of this virtual file system */
 1519  void *pAppData;          /* Pointer to application-specific data */
 1520  int (*xOpen)(sqlite3_vfs*, sqlite3_filename zName, sqlite3_file*,
 1521               int flags, int *pOutFlags);
 1522  int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
 1523  int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
 1524  int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
 1525  void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
 1526  void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
 1527  void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
 1528  void (*xDlClose)(sqlite3_vfs*, void*);
 1529  int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
 1530  int (*xSleep)(sqlite3_vfs*, int microseconds);
 1531  int (*xCurrentTime)(sqlite3_vfs*, double*);
 1532  int (*xGetLastError)(sqlite3_vfs*, int, char *);
 1533  /*
 1534  ** The methods above are in version 1 of the sqlite_vfs object
 1535  ** definition.  Those that follow are added in version 2 or later
 1536  */
 1537  int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
 1538  /*
 1539  ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
 1540  ** Those below are for version 3 and greater.
 1541  */
 1542  int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
 1543  sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
 1544  const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
 1545  /*
 1546  ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
 1547  ** New fields may be appended in future versions.  The iVersion
 1548  ** value will increment whenever this happens.
 1549  */
 1550};
 1551
 1552/*
 1553** CAPI3REF: Flags for the xAccess VFS method
 1554**
 1555** These integer constants can be used as the third parameter to
 1556** the xAccess method of an [sqlite3_vfs] object.  They determine
 1557** what kind of permissions the xAccess method is looking for.
 1558** With SQLITE_ACCESS_EXISTS, the xAccess method
 1559** simply checks whether the file exists.
 1560** With SQLITE_ACCESS_READWRITE, the xAccess method
 1561** checks whether the named directory is both readable and writable
 1562** (in other words, if files can be added, removed, and renamed within
 1563** the directory).
 1564** The SQLITE_ACCESS_READWRITE constant is currently used only by the
 1565** [temp_store_directory pragma], though this could change in a future
 1566** release of SQLite.
 1567** With SQLITE_ACCESS_READ, the xAccess method
 1568** checks whether the file is readable.  The SQLITE_ACCESS_READ constant is
 1569** currently unused, though it might be used in a future release of
 1570** SQLite.
 1571*/
 1572#define SQLITE_ACCESS_EXISTS    0
 1573#define SQLITE_ACCESS_READWRITE 1   /* Used by PRAGMA temp_store_directory */
 1574#define SQLITE_ACCESS_READ      2   /* Unused */
 1575
 1576/*
 1577** CAPI3REF: Flags for the xShmLock VFS method
 1578**
 1579** These integer constants define the various locking operations
 1580** allowed by the xShmLock method of [sqlite3_io_methods].  The
 1581** following are the only legal combinations of flags to the
 1582** xShmLock method:
 1583**
 1584** <ul>
 1585** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
 1586** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
 1587** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
 1588** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
 1589** </ul>
 1590**
 1591** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
 1592** was given on the corresponding lock.
 1593**
 1594** The xShmLock method can transition between unlocked and SHARED or
 1595** between unlocked and EXCLUSIVE.  It cannot transition between SHARED
 1596** and EXCLUSIVE.
 1597*/
 1598#define SQLITE_SHM_UNLOCK       1
 1599#define SQLITE_SHM_LOCK         2
 1600#define SQLITE_SHM_SHARED       4
 1601#define SQLITE_SHM_EXCLUSIVE    8
 1602
 1603/*
 1604** CAPI3REF: Maximum xShmLock index
 1605**
 1606** The xShmLock method on [sqlite3_io_methods] may use values
 1607** between 0 and this upper bound as its "offset" argument.
 1608** The SQLite core will never attempt to acquire or release a
 1609** lock outside of this range
 1610*/
 1611#define SQLITE_SHM_NLOCK        8
 1612
 1613
 1614/*
 1615** CAPI3REF: Initialize The SQLite Library
 1616**
 1617** ^The sqlite3_initialize() routine initializes the
 1618** SQLite library.  ^The sqlite3_shutdown() routine
 1619** deallocates any resources that were allocated by sqlite3_initialize().
 1620** These routines are designed to aid in process initialization and
 1621** shutdown on embedded systems.  Workstation applications using
 1622** SQLite normally do not need to invoke either of these routines.
 1623**
 1624** A call to sqlite3_initialize() is an "effective" call if it is
 1625** the first time sqlite3_initialize() is invoked during the lifetime of
 1626** the process, or if it is the first time sqlite3_initialize() is invoked
 1627** following a call to sqlite3_shutdown().  ^(Only an effective call
 1628** of sqlite3_initialize() does any initialization.  All other calls
 1629** are harmless no-ops.)^
 1630**
 1631** A call to sqlite3_shutdown() is an "effective" call if it is the first
 1632** call to sqlite3_shutdown() since the last sqlite3_initialize().  ^(Only
 1633** an effective call to sqlite3_shutdown() does any deinitialization.
 1634** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^
 1635**
 1636** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
 1637** is not.  The sqlite3_shutdown() interface must only be called from a
 1638** single thread.  All open [database connections] must be closed and all
 1639** other SQLite resources must be deallocated prior to invoking
 1640** sqlite3_shutdown().
 1641**
 1642** Among other things, ^sqlite3_initialize() will invoke
 1643** sqlite3_os_init().  Similarly, ^sqlite3_shutdown()
 1644** will invoke sqlite3_os_end().
 1645**
 1646** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success.
 1647** ^If for some reason, sqlite3_initialize() is unable to initialize
 1648** the library (perhaps it is unable to allocate a needed resource such
 1649** as a mutex) it returns an [error code] other than [SQLITE_OK].
 1650**
 1651** ^The sqlite3_initialize() routine is called internally by many other
 1652** SQLite interfaces so that an application usually does not need to
 1653** invoke sqlite3_initialize() directly.  For example, [sqlite3_open()]
 1654** calls sqlite3_initialize() so the SQLite library will be automatically
 1655** initialized when [sqlite3_open()] is called if it has not been initialized
 1656** already.  ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT]
 1657** compile-time option, then the automatic calls to sqlite3_initialize()
 1658** are omitted and the application must call sqlite3_initialize() directly
 1659** prior to using any other SQLite interface.  For maximum portability,
 1660** it is recommended that applications always invoke sqlite3_initialize()
 1661** directly prior to using any other SQLite interface.  Future releases
 1662** of SQLite may require this.  In other words, the behavior exhibited
 1663** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the
 1664** default behavior in some future release of SQLite.
 1665**
 1666** The sqlite3_os_init() routine does operating-system specific
 1667** initialization of the SQLite library.  The sqlite3_os_end()
 1668** routine undoes the effect of sqlite3_os_init().  Typical tasks
 1669** performed by these routines include allocation or deallocation
 1670** of static resources, initialization of global variables,
 1671** setting up a default [sqlite3_vfs] module, or setting up
 1672** a default configuration using [sqlite3_config()].
 1673**
 1674** The application should never invoke either sqlite3_os_init()
 1675** or sqlite3_os_end() directly.  The application should only invoke
 1676** sqlite3_initialize() and sqlite3_shutdown().  The sqlite3_os_init()
 1677** interface is called automatically by sqlite3_initialize() and
 1678** sqlite3_os_end() is called by sqlite3_shutdown().  Appropriate
 1679** implementations for sqlite3_os_init() and sqlite3_os_end()
 1680** are built into SQLite when it is compiled for Unix, Windows, or OS/2.
 1681** When [custom builds | built for other platforms]
 1682** (using the [SQLITE_OS_OTHER=1] compile-time
 1683** option) the application must supply a suitable implementation for
 1684** sqlite3_os_init() and sqlite3_os_end().  An application-supplied
 1685** implementation of sqlite3_os_init() or sqlite3_os_end()
 1686** must return [SQLITE_OK] on success and some other [error code] upon
 1687** failure.
 1688*/
 1689SQLITE_API int sqlite3_initialize(void);
 1690SQLITE_API int sqlite3_shutdown(void);
 1691SQLITE_API int sqlite3_os_init(void);
 1692SQLITE_API int sqlite3_os_end(void);
 1693
 1694/*
 1695** CAPI3REF: Configuring The SQLite Library
 1696**
 1697** The sqlite3_config() interface is used to make global configuration
 1698** changes to SQLite in order to tune SQLite to the specific needs of
 1699** the application.  The default configuration is recommended for most
 1700** applications and so this routine is usually not necessary.  It is
 1701** provided to support rare applications with unusual needs.
 1702**
 1703** <b>The sqlite3_config() interface is not threadsafe. The application
 1704** must ensure that no other SQLite interfaces are invoked by other
 1705** threads while sqlite3_config() is running.</b>
 1706**
 1707** The first argument to sqlite3_config() is an integer
 1708** [configuration option] that determines
 1709** what property of SQLite is to be configured.  Subsequent arguments
 1710** vary depending on the [configuration option]
 1711** in the first argument.
 1712**
 1713** For most configuration options, the sqlite3_config() interface
 1714** may only be invoked prior to library initialization using
 1715** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
 1716** The exceptional configuration options that may be invoked at any time
 1717** are called "anytime configuration options".
 1718** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
 1719** [sqlite3_shutdown()] with a first argument that is not an anytime
 1720** configuration option, then the sqlite3_config() call will
 1721** return SQLITE_MISUSE.
 1722** Note, however, that ^sqlite3_config() can be called as part of the
 1723** implementation of an application-defined [sqlite3_os_init()].
 1724**
 1725** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK].
 1726** ^If the option is unknown or SQLite is unable to set the option
 1727** then this routine returns a non-zero [error code].
 1728*/
 1729SQLITE_API int sqlite3_config(int, ...);
 1730
 1731/*
 1732** CAPI3REF: Configure database connections
 1733** METHOD: sqlite3
 1734**
 1735** The sqlite3_db_config() interface is used to make configuration
 1736** changes to a [database connection].  The interface is similar to
 1737** [sqlite3_config()] except that the changes apply to a single
 1738** [database connection] (specified in the first argument).
 1739**
 1740** The second argument to sqlite3_db_config(D,V,...)  is the
 1741** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code
 1742** that indicates what aspect of the [database connection] is being configured.
 1743** Subsequent arguments vary depending on the configuration verb.
 1744**
 1745** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if
 1746** the call is considered successful.
 1747*/
 1748SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
 1749
 1750/*
 1751** CAPI3REF: Memory Allocation Routines
 1752**
 1753** An instance of this object defines the interface between SQLite
 1754** and low-level memory allocation routines.
 1755**
 1756** This object is used in only one place in the SQLite interface.
 1757** A pointer to an instance of this object is the argument to
 1758** [sqlite3_config()] when the configuration option is
 1759** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].
 1760** By creating an instance of this object
 1761** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
 1762** during configuration, an application can specify an alternative
 1763** memory allocation subsystem for SQLite to use for all of its
 1764** dynamic memory needs.
 1765**
 1766** Note that SQLite comes with several [built-in memory allocators]
 1767** that are perfectly adequate for the overwhelming majority of applications
 1768** and that this object is only useful to a tiny minority of applications
 1769** with specialized memory allocation requirements.  This object is
 1770** also used during testing of SQLite in order to specify an alternative
 1771** memory allocator that simulates memory out-of-memory conditions in
 1772** order to verify that SQLite recovers gracefully from such
 1773** conditions.
 1774**
 1775** The xMalloc, xRealloc, and xFree methods must work like the
 1776** malloc(), realloc() and free() functions from the standard C library.
 1777** ^SQLite guarantees that the second argument to
 1778** xRealloc is always a value returned by a prior call to xRoundup.
 1779**
 1780** xSize should return the allocated size of a memory allocation
 1781** previously obtained from xMalloc or xRealloc.  The allocated size
 1782** is always at least as big as the requested size but may be larger.
 1783**
 1784** The xRoundup method returns what would be the allocated size of
 1785** a memory allocation given a particular requested size.  Most memory
 1786** allocators round up memory allocations at least to the next multiple
 1787** of 8.  Some allocators round up to a larger multiple or to a power of 2.
 1788** Every memory allocation request coming in through [sqlite3_malloc()]
 1789** or [sqlite3_realloc()] first calls xRoundup.  If xRoundup returns 0,
 1790** that causes the corresponding memory allocation to fail.
 1791**
 1792** The xInit method initializes the memory allocator.  For example,
 1793** it might allocate any required mutexes or initialize internal data
 1794** structures.  The xShutdown method is invoked (indirectly) by
 1795** [sqlite3_shutdown()] and should deallocate any resources acquired
 1796** by xInit.  The pAppData pointer is used as the only parameter to
 1797** xInit and xShutdown.
 1798**
 1799** SQLite holds the [SQLITE_MUTEX_STATIC_MAIN] mutex when it invokes
 1800** the xInit method, so the xInit method need not be threadsafe.  The
 1801** xShutdown method is only called from [sqlite3_shutdown()] so it does
 1802** not need to be threadsafe either.  For all other methods, SQLite
 1803** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
 1804** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
 1805** it is by default) and so the methods are automatically serialized.
 1806** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
 1807** methods must be threadsafe or else make their own arrangements for
 1808** serialization.
 1809**
 1810** SQLite will never invoke xInit() more than once without an intervening
 1811** call to xShutdown().
 1812*/
 1813typedef struct sqlite3_mem_methods sqlite3_mem_methods;
 1814struct sqlite3_mem_methods {
 1815  void *(*xMalloc)(int);         /* Memory allocation function */
 1816  void (*xFree)(void*);          /* Free a prior allocation */
 1817  void *(*xRealloc)(void*,int);  /* Resize an allocation */
 1818  int (*xSize)(void*);           /* Return the size of an allocation */
 1819  int (*xRoundup)(int);          /* Round up request size to allocation size */
 1820  int (*xInit)(void*);           /* Initialize the memory allocator */
 1821  void (*xShutdown)(void*);      /* Deinitialize the memory allocator */
 1822  void *pAppData;                /* Argument to xInit() and xShutdown() */
 1823};
 1824
 1825/*
 1826** CAPI3REF: Configuration Options
 1827** KEYWORDS: {configuration option}
 1828**
 1829** These constants are the available integer configuration options that
 1830** can be passed as the first argument to the [sqlite3_config()] interface.
 1831**
 1832** Most of the configuration options for sqlite3_config()
 1833** will only work if invoked prior to [sqlite3_initialize()] or after
 1834** [sqlite3_shutdown()].  The few exceptions to this rule are called
 1835** "anytime configuration options".
 1836** ^Calling [sqlite3_config()] with a first argument that is not an
 1837** anytime configuration option in between calls to [sqlite3_initialize()] and
 1838** [sqlite3_shutdown()] is a no-op that returns SQLITE_MISUSE.
 1839**
 1840** The set of anytime configuration options can change (by insertions
 1841** and/or deletions) from one release of SQLite to the next.
 1842** As of SQLite version 3.42.0, the complete set of anytime configuration
 1843** options is:
 1844** <ul>
 1845** <li> SQLITE_CONFIG_LOG
 1846** <li> SQLITE_CONFIG_PCACHE_HDRSZ
 1847** </ul>
 1848**
 1849** New configuration options may be added in future releases of SQLite.
 1850** Existing configuration options might be discontinued.  Applications
 1851** should check the return code from [sqlite3_config()] to make sure that
 1852** the call worked.  The [sqlite3_config()] interface will return a
 1853** non-zero [error code] if a discontinued or unsupported configuration option
 1854** is invoked.
 1855**
 1856** <dl>
 1857** [[SQLITE_CONFIG_SINGLETHREAD]] <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
 1858** <dd>There are no arguments to this option.  ^This option sets the
 1859** [threading mode] to Single-thread.  In other words, it disables
 1860** all mutexing and puts SQLite into a mode where it can only be used
 1861** by a single thread.   ^If SQLite is compiled with
 1862** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1863** it is not possible to change the [threading mode] from its default
 1864** value of Single-thread and so [sqlite3_config()] will return
 1865** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD
 1866** configuration option.</dd>
 1867**
 1868** [[SQLITE_CONFIG_MULTITHREAD]] <dt>SQLITE_CONFIG_MULTITHREAD</dt>
 1869** <dd>There are no arguments to this option.  ^This option sets the
 1870** [threading mode] to Multi-thread.  In other words, it disables
 1871** mutexing on [database connection] and [prepared statement] objects.
 1872** The application is responsible for serializing access to
 1873** [database connections] and [prepared statements].  But other mutexes
 1874** are enabled so that SQLite will be safe to use in a multi-threaded
 1875** environment as long as no two threads attempt to use the same
 1876** [database connection] at the same time.  ^If SQLite is compiled with
 1877** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1878** it is not possible to set the Multi-thread [threading mode] and
 1879** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
 1880** SQLITE_CONFIG_MULTITHREAD configuration option.</dd>
 1881**
 1882** [[SQLITE_CONFIG_SERIALIZED]] <dt>SQLITE_CONFIG_SERIALIZED</dt>
 1883** <dd>There are no arguments to this option.  ^This option sets the
 1884** [threading mode] to Serialized. In other words, this option enables
 1885** all mutexes including the recursive
 1886** mutexes on [database connection] and [prepared statement] objects.
 1887** In this mode (which is the default when SQLite is compiled with
 1888** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access
 1889** to [database connections] and [prepared statements] so that the
 1890** application is free to use the same [database connection] or the
 1891** same [prepared statement] in different threads at the same time.
 1892** ^If SQLite is compiled with
 1893** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 1894** it is not possible to set the Serialized [threading mode] and
 1895** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
 1896** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
 1897**
 1898** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
 1899** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
 1900** a pointer to an instance of the [sqlite3_mem_methods] structure.
 1901** The argument specifies
 1902** alternative low-level memory allocation routines to be used in place of
 1903** the memory allocation routines built into SQLite.)^ ^SQLite makes
 1904** its own private copy of the content of the [sqlite3_mem_methods] structure
 1905** before the [sqlite3_config()] call returns.</dd>
 1906**
 1907** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
 1908** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which
 1909** is a pointer to an instance of the [sqlite3_mem_methods] structure.
 1910** The [sqlite3_mem_methods]
 1911** structure is filled with the currently defined memory allocation routines.)^
 1912** This option can be used to overload the default memory allocation
 1913** routines with a wrapper that simulates memory allocation failure or
 1914** tracks memory usage, for example. </dd>
 1915**
 1916** [[SQLITE_CONFIG_SMALL_MALLOC]] <dt>SQLITE_CONFIG_SMALL_MALLOC</dt>
 1917** <dd> ^The SQLITE_CONFIG_SMALL_MALLOC option takes a single argument of
 1918** type int, interpreted as a boolean, which if true provides a hint to
 1919** SQLite that it should avoid large memory allocations if possible.
 1920** SQLite will run faster if it is free to make large memory allocations,
 1921** but some applications might prefer to run slower in exchange for
 1922** guarantees about memory fragmentation that are possible if large
 1923** allocations are avoided.  This hint is normally off.
 1924** </dd>
 1925**
 1926** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
 1927** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes a single argument of type int,
 1928** interpreted as a boolean, which enables or disables the collection of
 1929** memory allocation statistics. ^(When memory allocation statistics are
 1930** disabled, the following SQLite interfaces become non-operational:
 1931**   <ul>
 1932**   <li> [sqlite3_hard_heap_limit64()]
 1933**   <li> [sqlite3_memory_used()]
 1934**   <li> [sqlite3_memory_highwater()]
 1935**   <li> [sqlite3_soft_heap_limit64()]
 1936**   <li> [sqlite3_status64()]
 1937**   </ul>)^
 1938** ^Memory allocation statistics are enabled by default unless SQLite is
 1939** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
 1940** allocation statistics are disabled by default.
 1941** </dd>
 1942**
 1943** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
 1944** <dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
 1945** </dd>
 1946**
 1947** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
 1948** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a memory pool
 1949** that SQLite can use for the database page cache with the default page
 1950** cache implementation.
 1951** This configuration option is a no-op if an application-defined page
 1952** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2].
 1953** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to
 1954** 8-byte aligned memory (pMem), the size of each page cache line (sz),
 1955** and the number of cache lines (N).
 1956** The sz argument should be the size of the largest database page
 1957** (a power of two between 512 and 65536) plus some extra bytes for each
 1958** page header.  ^The number of extra bytes needed by the page header
 1959** can be determined using [SQLITE_CONFIG_PCACHE_HDRSZ].
 1960** ^It is harmless, apart from the wasted memory,
 1961** for the sz parameter to be larger than necessary.  The pMem
 1962** argument must be either a NULL pointer or a pointer to an 8-byte
 1963** aligned block of memory of at least sz*N bytes, otherwise
 1964** subsequent behavior is undefined.
 1965** ^When pMem is not NULL, SQLite will strive to use the memory provided
 1966** to satisfy page cache needs, falling back to [sqlite3_malloc()] if
 1967** a page cache line is larger than sz bytes or if all of the pMem buffer
 1968** is exhausted.
 1969** ^If pMem is NULL and N is non-zero, then each database connection
 1970** does an initial bulk allocation for page cache memory
 1971** from [sqlite3_malloc()] sufficient for N cache lines if N is positive or
 1972** of -1024*N bytes if N is negative. ^If additional
 1973** page cache memory is needed beyond what is provided by the initial
 1974** allocation, then SQLite goes to [sqlite3_malloc()] separately for each
 1975** additional cache line. </dd>
 1976**
 1977** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
 1978** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
 1979** that SQLite will use for all of its dynamic memory allocation needs
 1980** beyond those provided for by [SQLITE_CONFIG_PAGECACHE].
 1981** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
 1982** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
 1983** [SQLITE_ERROR] if invoked otherwise.
 1984** ^There are three arguments to SQLITE_CONFIG_HEAP:
 1985** An 8-byte aligned pointer to the memory,
 1986** the number of bytes in the memory buffer, and the minimum allocation size.
 1987** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
 1988** to using its default memory allocator (the system malloc() implementation),
 1989** undoing any prior invocation of [SQLITE_CONFIG_MALLOC].  ^If the
 1990** memory pointer is not NULL then the alternative memory
 1991** allocator is engaged to handle all of SQLites memory allocation needs.
 1992** The first pointer (the memory pointer) must be aligned to an 8-byte
 1993** boundary or subsequent behavior of SQLite will be undefined.
 1994** The minimum allocation size is capped at 2**12. Reasonable values
 1995** for the minimum allocation size are 2**5 through 2**8.</dd>
 1996**
 1997** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
 1998** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a
 1999** pointer to an instance of the [sqlite3_mutex_methods] structure.
 2000** The argument specifies alternative low-level mutex routines to be used
 2001** in place of the mutex routines built into SQLite.)^  ^SQLite makes a copy of
 2002** the content of the [sqlite3_mutex_methods] structure before the call to
 2003** [sqlite3_config()] returns. ^If SQLite is compiled with
 2004** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 2005** the entire mutexing subsystem is omitted from the build and hence calls to
 2006** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
 2007** return [SQLITE_ERROR].</dd>
 2008**
 2009** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
 2010** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which
 2011** is a pointer to an instance of the [sqlite3_mutex_methods] structure.  The
 2012** [sqlite3_mutex_methods]
 2013** structure is filled with the currently defined mutex routines.)^
 2014** This option can be used to overload the default mutex allocation
 2015** routines with a wrapper used to track mutex usage for performance
 2016** profiling or testing, for example.   ^If SQLite is compiled with
 2017** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
 2018** the entire mutexing subsystem is omitted from the build and hence calls to
 2019** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
 2020** return [SQLITE_ERROR].</dd>
 2021**
 2022** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
 2023** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
 2024** the default size of [lookaside memory] on each [database connection].
 2025** The first argument is the
 2026** size of each lookaside buffer slot ("sz") and the second is the number of
 2027** slots allocated to each database connection ("cnt").)^
 2028** ^(SQLITE_CONFIG_LOOKASIDE sets the <i>default</i> lookaside size.
 2029** The [SQLITE_DBCONFIG_LOOKASIDE] option to [sqlite3_db_config()] can
 2030** be used to change the lookaside configuration on individual connections.)^
 2031** The [-DSQLITE_DEFAULT_LOOKASIDE] option can be used to change the
 2032** default lookaside configuration at compile-time.
 2033** </dd>
 2034**
 2035** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
 2036** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
 2037** a pointer to an [sqlite3_pcache_methods2] object.  This object specifies
 2038** the interface to a custom page cache implementation.)^
 2039** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
 2040**
 2041** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
 2042** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
 2043** is a pointer to an [sqlite3_pcache_methods2] object.  SQLite copies off
 2044** the current page cache implementation into that object.)^ </dd>
 2045**
 2046** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
 2047** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
 2048** global [error log].
 2049** (^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
 2050** function with a call signature of void(*)(void*,int,const char*),
 2051** and a pointer to void. ^If the function pointer is not NULL, it is
 2052** invoked by [sqlite3_log()] to process each logging event.  ^If the
 2053** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
 2054** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is
 2055** passed through as the first parameter to the application-defined logger
 2056** function whenever that function is invoked.  ^The second parameter to
 2057** the logger function is a copy of the first parameter to the corresponding
 2058** [sqlite3_log()] call and is intended to be a [result code] or an
 2059** [extended result code].  ^The third parameter passed to the logger is
 2060** a log message after formatting via [sqlite3_snprintf()].
 2061** The SQLite logging interface is not reentrant; the logger function
 2062** supplied by the application must not invoke any SQLite interface.
 2063** In a multi-threaded application, the application-defined logger
 2064** function must be threadsafe. </dd>
 2065**
 2066** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
 2067** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int.
 2068** If non-zero, then URI handling is globally enabled. If the parameter is zero,
 2069** then URI handling is globally disabled.)^ ^If URI handling is globally
 2070** enabled, all filenames passed to [sqlite3_open()], [sqlite3_open_v2()],
 2071** [sqlite3_open16()] or
 2072** specified as part of [ATTACH] commands are interpreted as URIs, regardless
 2073** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
 2074** connection is opened. ^If it is globally disabled, filenames are
 2075** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
 2076** database connection is opened. ^(By default, URI handling is globally
 2077** disabled. The default value may be changed by compiling with the
 2078** [SQLITE_USE_URI] symbol defined.)^
 2079**
 2080** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
 2081** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
 2082** argument which is interpreted as a boolean in order to enable or disable
 2083** the use of covering indices for full table scans in the query optimizer.
 2084** ^The default setting is determined
 2085** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
 2086** if that compile-time option is omitted.
 2087** The ability to disable the use of covering indices for full table scans
 2088** is because some incorrectly coded legacy applications might malfunction
 2089** when the optimization is enabled.  Providing the ability to
 2090** disable the optimization allows the older, buggy application code to work
 2091** without change even with newer versions of SQLite.
 2092**
 2093** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]]
 2094** <dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE
 2095** <dd> These options are obsolete and should not be used by new code.
 2096** They are retained for backwards compatibility but are now no-ops.
 2097** </dd>
 2098**
 2099** [[SQLITE_CONFIG_SQLLOG]]
 2100** <dt>SQLITE_CONFIG_SQLLOG
 2101** <dd>This option is only available if sqlite is compiled with the
 2102** [SQLITE_ENABLE_SQLLOG] pre-processor macro defined. The first argument should
 2103** be a pointer to a function of type void(*)(void*,sqlite3*,const char*, int).
 2104** The second should be of type (void*). The callback is invoked by the library
 2105** in three separate circumstances, identified by the value passed as the
 2106** fourth parameter. If the fourth parameter is 0, then the database connection
 2107** passed as the second argument has just been opened. The third argument
 2108** points to a buffer containing the name of the main database file. If the
 2109** fourth parameter is 1, then the SQL statement that the third parameter
 2110** points to has just been executed. Or, if the fourth parameter is 2, then
 2111** the connection being passed as the second parameter is being closed. The
 2112** third parameter is passed NULL In this case.  An example of using this
 2113** configuration option can be seen in the "test_sqllog.c" source file in
 2114** the canonical SQLite source tree.</dd>
 2115**
 2116** [[SQLITE_CONFIG_MMAP_SIZE]]
 2117** <dt>SQLITE_CONFIG_MMAP_SIZE
 2118** <dd>^SQLITE_CONFIG_MMAP_SIZE takes two 64-bit integer (sqlite3_int64) values
 2119** that are the default mmap size limit (the default setting for
 2120** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
 2121** ^The default setting can be overridden by each database connection using
 2122** either the [PRAGMA mmap_size] command, or by using the
 2123** [SQLITE_FCNTL_MMAP_SIZE] file control.  ^(The maximum allowed mmap size
 2124** will be silently truncated if necessary so that it does not exceed the
 2125** compile-time maximum mmap size set by the
 2126** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
 2127** ^If either argument to this option is negative, then that argument is
 2128** changed to its compile-time default.
 2129**
 2130** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
 2131** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
 2132** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
 2133** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro
 2134** defined. ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
 2135** that specifies the maximum size of the created heap.
 2136**
 2137** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
 2138** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
 2139** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
 2140** is a pointer to an integer and writes into that integer the number of extra
 2141** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE].
 2142** The amount of extra space required can change depending on the compiler,
 2143** target platform, and SQLite version.
 2144**
 2145** [[SQLITE_CONFIG_PMASZ]]
 2146** <dt>SQLITE_CONFIG_PMASZ
 2147** <dd>^The SQLITE_CONFIG_PMASZ option takes a single parameter which
 2148** is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded
 2149** sorter to that integer.  The default minimum PMA Size is set by the
 2150** [SQLITE_SORTER_PMASZ] compile-time option.  New threads are launched
 2151** to help with sort operations when multithreaded sorting
 2152** is enabled (using the [PRAGMA threads] command) and the amount of content
 2153** to be sorted exceeds the page size times the minimum of the
 2154** [PRAGMA cache_size] setting and this value.
 2155**
 2156** [[SQLITE_CONFIG_STMTJRNL_SPILL]]
 2157** <dt>SQLITE_CONFIG_STMTJRNL_SPILL
 2158** <dd>^The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which
 2159** becomes the [statement journal] spill-to-disk threshold.
 2160** [Statement journals] are held in memory until their size (in bytes)
 2161** exceeds this threshold, at which point they are written to disk.
 2162** Or if the threshold is -1, statement journals are always held
 2163** exclusively in memory.
 2164** Since many statement journals never become large, setting the spill
 2165** threshold to a value such as 64KiB can greatly reduce the amount of
 2166** I/O required to support statement rollback.
 2167** The default value for this setting is controlled by the
 2168** [SQLITE_STMTJRNL_SPILL] compile-time option.
 2169**
 2170** [[SQLITE_CONFIG_SORTERREF_SIZE]]
 2171** <dt>SQLITE_CONFIG_SORTERREF_SIZE
 2172** <dd>The SQLITE_CONFIG_SORTERREF_SIZE option accepts a single parameter
 2173** of type (int) - the new value of the sorter-reference size threshold.
 2174** Usually, when SQLite uses an external sort to order records according
 2175** to an ORDER BY clause, all fields required by the caller are present in the
 2176** sorted records. However, if SQLite determines based on the declared type
 2177** of a table column that its values are likely to be very large - larger
 2178** than the configured sorter-reference size threshold - then a reference
 2179** is stored in each sorted record and the required column values loaded
 2180** from the database as records are returned in sorted order. The default
 2181** value for this option is to never use this optimization. Specifying a
 2182** negative value for this option restores the default behavior.
 2183** This option is only available if SQLite is compiled with the
 2184** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option.
 2185**
 2186** [[SQLITE_CONFIG_MEMDB_MAXSIZE]]
 2187** <dt>SQLITE_CONFIG_MEMDB_MAXSIZE
 2188** <dd>The SQLITE_CONFIG_MEMDB_MAXSIZE option accepts a single parameter
 2189** [sqlite3_int64] parameter which is the default maximum size for an in-memory
 2190** database created using [sqlite3_deserialize()].  This default maximum
 2191** size can be adjusted up or down for individual databases using the
 2192** [SQLITE_FCNTL_SIZE_LIMIT] [sqlite3_file_control|file-control].  If this
 2193** configuration setting is never used, then the default maximum is determined
 2194** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option.  If that
 2195** compile-time option is not set, then the default maximum is 1073741824.
 2196**
 2197** [[SQLITE_CONFIG_ROWID_IN_VIEW]]
 2198** <dt>SQLITE_CONFIG_ROWID_IN_VIEW
 2199** <dd>The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability
 2200** for VIEWs to have a ROWID.  The capability can only be enabled if SQLite is
 2201** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability
 2202** defaults to on.  This configuration option queries the current setting or
 2203** changes the setting to off or on.  The argument is a pointer to an integer.
 2204** If that integer initially holds a value of 1, then the ability for VIEWs to
 2205** have ROWIDs is activated.  If the integer initially holds zero, then the
 2206** ability is deactivated.  Any other initial value for the integer leaves the
 2207** setting unchanged.  After changes, if any, the integer is written with
 2208** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off.  If SQLite
 2209** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and
 2210** recommended case) then the integer is always filled with zero, regardless
 2211** if its initial value.
 2212** </dl>
 2213*/
 2214#define SQLITE_CONFIG_SINGLETHREAD         1  /* nil */
 2215#define SQLITE_CONFIG_MULTITHREAD          2  /* nil */
 2216#define SQLITE_CONFIG_SERIALIZED           3  /* nil */
 2217#define SQLITE_CONFIG_MALLOC               4  /* sqlite3_mem_methods* */
 2218#define SQLITE_CONFIG_GETMALLOC            5  /* sqlite3_mem_methods* */
 2219#define SQLITE_CONFIG_SCRATCH              6  /* No longer used */
 2220#define SQLITE_CONFIG_PAGECACHE            7  /* void*, int sz, int N */
 2221#define SQLITE_CONFIG_HEAP                 8  /* void*, int nByte, int min */
 2222#define SQLITE_CONFIG_MEMSTATUS            9  /* boolean */
 2223#define SQLITE_CONFIG_MUTEX               10  /* sqlite3_mutex_methods* */
 2224#define SQLITE_CONFIG_GETMUTEX            11  /* sqlite3_mutex_methods* */
 2225/* previously SQLITE_CONFIG_CHUNKALLOC    12 which is now unused. */
 2226#define SQLITE_CONFIG_LOOKASIDE           13  /* int int */
 2227#define SQLITE_CONFIG_PCACHE              14  /* no-op */
 2228#define SQLITE_CONFIG_GETPCACHE           15  /* no-op */
 2229#define SQLITE_CONFIG_LOG                 16  /* xFunc, void* */
 2230#define SQLITE_CONFIG_URI                 17  /* int */
 2231#define SQLITE_CONFIG_PCACHE2             18  /* sqlite3_pcache_methods2* */
 2232#define SQLITE_CONFIG_GETPCACHE2          19  /* sqlite3_pcache_methods2* */
 2233#define SQLITE_CONFIG_COVERING_INDEX_SCAN 20  /* int */
 2234#define SQLITE_CONFIG_SQLLOG              21  /* xSqllog, void* */
 2235#define SQLITE_CONFIG_MMAP_SIZE           22  /* sqlite3_int64, sqlite3_int64 */
 2236#define SQLITE_CONFIG_WIN32_HEAPSIZE      23  /* int nByte */
 2237#define SQLITE_CONFIG_PCACHE_HDRSZ        24  /* int *psz */
 2238#define SQLITE_CONFIG_PMASZ               25  /* unsigned int szPma */
 2239#define SQLITE_CONFIG_STMTJRNL_SPILL      26  /* int nByte */
 2240#define SQLITE_CONFIG_SMALL_MALLOC        27  /* boolean */
 2241#define SQLITE_CONFIG_SORTERREF_SIZE      28  /* int nByte */
 2242#define SQLITE_CONFIG_MEMDB_MAXSIZE       29  /* sqlite3_int64 */
 2243#define SQLITE_CONFIG_ROWID_IN_VIEW       30  /* int* */
 2244
 2245/*
 2246** CAPI3REF: Database Connection Configuration Options
 2247**
 2248** These constants are the available integer configuration options that
 2249** can be passed as the second parameter to the [sqlite3_db_config()] interface.
 2250**
 2251** The [sqlite3_db_config()] interface is a var-args function.  It takes a
 2252** variable number of parameters, though always at least two.  The number of
 2253** parameters passed into sqlite3_db_config() depends on which of these
 2254** constants is given as the second parameter.  This documentation page
 2255** refers to parameters beyond the second as "arguments".  Thus, when this
 2256** page says "the N-th argument" it means "the N-th parameter past the
 2257** configuration option" or "the (N+2)-th parameter to sqlite3_db_config()".
 2258**
 2259** New configuration options may be added in future releases of SQLite.
 2260** Existing configuration options might be discontinued.  Applications
 2261** should check the return code from [sqlite3_db_config()] to make sure that
 2262** the call worked.  ^The [sqlite3_db_config()] interface will return a
 2263** non-zero [error code] if a discontinued or unsupported configuration option
 2264** is invoked.
 2265**
 2266** <dl>
 2267** [[SQLITE_DBCONFIG_LOOKASIDE]]
 2268** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
 2269** <dd> The SQLITE_DBCONFIG_LOOKASIDE option is used to adjust the
 2270** configuration of the [lookaside memory allocator] within a database
 2271** connection.
 2272** The arguments to the SQLITE_DBCONFIG_LOOKASIDE option are <i>not</i>
 2273** in the [DBCONFIG arguments|usual format].
 2274** The SQLITE_DBCONFIG_LOOKASIDE option takes three arguments, not two,
 2275** so that a call to [sqlite3_db_config()] that uses SQLITE_DBCONFIG_LOOKASIDE
 2276** should have a total of five parameters.
 2277** <ol>
 2278** <li><p>The first argument ("buf") is a
 2279** pointer to a memory buffer to use for lookaside memory.
 2280** The first argument may be NULL in which case SQLite will allocate the
 2281** lookaside buffer itself using [sqlite3_malloc()].
 2282** <li><P>The second argument ("sz") is the
 2283** size of each lookaside buffer slot.  Lookaside is disabled if "sz"
 2284** is less than 8.  The "sz" argument should be a multiple of 8 less than
 2285** 65536.  If "sz" does not meet this constraint, it is reduced in size until
 2286** it does.
 2287** <li><p>The third argument ("cnt") is the number of slots.
 2288** Lookaside is disabled if "cnt"is less than 1.
 2289*  The "cnt" value will be reduced, if necessary, so
 2290** that the product of "sz" and "cnt" does not exceed 2,147,418,112. The "cnt"
 2291** parameter is usually chosen so that the product of "sz" and "cnt" is less
 2292** than 1,000,000.
 2293** </ol>
 2294** <p>If the "buf" argument is not NULL, then it must
 2295** point to a memory buffer with a size that is greater than
 2296** or equal to the product of "sz" and "cnt".
 2297** The buffer must be aligned to an 8-byte boundary.
 2298** The lookaside memory
 2299** configuration for a database connection can only be changed when that
 2300** connection is not currently using lookaside memory, or in other words
 2301** when the value returned by [SQLITE_DBSTATUS_LOOKASIDE_USED] is zero.
 2302** Any attempt to change the lookaside memory configuration when lookaside
 2303** memory is in use leaves the configuration unchanged and returns
 2304** [SQLITE_BUSY].
 2305** If the "buf" argument is NULL and an attempt
 2306** to allocate memory based on "sz" and "cnt" fails, then
 2307** lookaside is silently disabled.
 2308** <p>
 2309** The [SQLITE_CONFIG_LOOKASIDE] configuration option can be used to set the
 2310** default lookaside configuration at initialization.  The
 2311** [-DSQLITE_DEFAULT_LOOKASIDE] option can be used to set the default lookaside
 2312** configuration at compile-time.  Typical values for lookaside are 1200 for
 2313** "sz" and 40 to 100 for "cnt".
 2314** </dd>
 2315**
 2316** [[SQLITE_DBCONFIG_ENABLE_FKEY]]
 2317** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
 2318** <dd> ^This option is used to enable or disable the enforcement of
 2319** [foreign key constraints].  This is the same setting that is
 2320** enabled or disabled by the [PRAGMA foreign_keys] statement.
 2321** The first argument is an integer which is 0 to disable FK enforcement,
 2322** positive to enable FK enforcement or negative to leave FK enforcement
 2323** unchanged.  The second parameter is a pointer to an integer into which
 2324** is written 0 or 1 to indicate whether FK enforcement is off or on
 2325** following this call.  The second parameter may be a NULL pointer, in
 2326** which case the FK enforcement setting is not reported back. </dd>
 2327**
 2328** [[SQLITE_DBCONFIG_ENABLE_TRIGGER]]
 2329** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
 2330** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
 2331** There should be two additional arguments.
 2332** The first argument is an integer which is 0 to disable triggers,
 2333** positive to enable triggers or negative to leave the setting unchanged.
 2334** The second parameter is a pointer to an integer into which
 2335** is written 0 or 1 to indicate whether triggers are disabled or enabled
 2336** following this call.  The second parameter may be a NULL pointer, in
 2337** which case the trigger setting is not reported back.
 2338**
 2339** <p>Originally this option disabled all triggers.  ^(However, since
 2340** SQLite version 3.35.0, TEMP triggers are still allowed even if
 2341** this option is off.  So, in other words, this option now only disables
 2342** triggers in the main database schema or in the schemas of [ATTACH]-ed
 2343** databases.)^ </dd>
 2344**
 2345** [[SQLITE_DBCONFIG_ENABLE_VIEW]]
 2346** <dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt>
 2347** <dd> ^This option is used to enable or disable [CREATE VIEW | views].
 2348** There must be two additional arguments.
 2349** The first argument is an integer which is 0 to disable views,
 2350** positive to enable views or negative to leave the setting unchanged.
 2351** The second parameter is a pointer to an integer into which
 2352** is written 0 or 1 to indicate whether views are disabled or enabled
 2353** following this call.  The second parameter may be a NULL pointer, in
 2354** which case the view setting is not reported back.
 2355**
 2356** <p>Originally this option disabled all views.  ^(However, since
 2357** SQLite version 3.35.0, TEMP views are still allowed even if
 2358** this option is off.  So, in other words, this option now only disables
 2359** views in the main database schema or in the schemas of ATTACH-ed
 2360** databases.)^ </dd>
 2361**
 2362** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
 2363** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
 2364** <dd> ^This option is used to enable or disable using the
 2365** [fts3_tokenizer()] function - part of the [FTS3] full-text search engine
 2366** extension - without using bound parameters as the parameters. Doing so
 2367** is disabled by default. There must be two additional arguments. The first
 2368** argument is an integer. If it is passed 0, then using fts3_tokenizer()
 2369** without bound parameters is disabled. If it is passed a positive value,
 2370** then calling fts3_tokenizer without bound parameters is enabled. If it
 2371** is passed a negative value, this setting is not modified - this can be
 2372** used to query for the current setting. The second parameter is a pointer
 2373** to an integer into which is written 0 or 1 to indicate the current value
 2374** of this setting (after it is modified, if applicable).  The second
 2375** parameter may be a NULL pointer, in which case the value of the setting
 2376** is not reported back. Refer to [FTS3] documentation for further details.
 2377** </dd>
 2378**
 2379** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]]
 2380** <dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt>
 2381** <dd> ^This option is used to enable or disable the [sqlite3_load_extension()]
 2382** interface independently of the [load_extension()] SQL function.
 2383** The [sqlite3_enable_load_extension()] API enables or disables both the
 2384** C-API [sqlite3_load_extension()] and the SQL function [load_extension()].
 2385** There must be two additional arguments.
 2386** When the first argument to this interface is 1, then only the C-API is
 2387** enabled and the SQL function remains disabled.  If the first argument to
 2388** this interface is 0, then both the C-API and the SQL function are disabled.
 2389** If the first argument is -1, then no changes are made to the state of either
 2390** the C-API or the SQL function.
 2391** The second parameter is a pointer to an integer into which
 2392** is written 0 or 1 to indicate whether [sqlite3_load_extension()] interface
 2393** is disabled or enabled following this call.  The second parameter may
 2394** be a NULL pointer, in which case the new setting is not reported back.
 2395** </dd>
 2396**
 2397** [[SQLITE_DBCONFIG_MAINDBNAME]] <dt>SQLITE_DBCONFIG_MAINDBNAME</dt>
 2398** <dd> ^This option is used to change the name of the "main" database
 2399** schema.  This option does not follow the
 2400** [DBCONFIG arguments|usual SQLITE_DBCONFIG argument format].
 2401** This option takes exactly one additional argument so that the
 2402** [sqlite3_db_config()] call has a total of three parameters.  The
 2403** extra argument must be a pointer to a constant UTF8 string which
 2404** will become the new schema name in place of "main".  ^SQLite does
 2405** not make a copy of the new main schema name string, so the application
 2406** must ensure that the argument passed into SQLITE_DBCONFIG MAINDBNAME
 2407** is unchanged until after the database connection closes.
 2408** </dd>
 2409**
 2410** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]]
 2411** <dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt>
 2412** <dd> Usually, when a database in [WAL mode] is closed or detached from a
 2413** database handle, SQLite checks if if there are other connections to the
 2414** same database, and if there are no other database connection (if the
 2415** connection being closed is the last open connection to the database),
 2416** then SQLite performs a [checkpoint] before closing the connection and
 2417** deletes the WAL file.  The SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE option can
 2418** be used to override that behavior. The first argument passed to this
 2419** operation (the third parameter to [sqlite3_db_config()]) is an integer
 2420** which is positive to disable checkpoints-on-close, or zero (the default)
 2421** to enable them, and negative to leave the setting unchanged.
 2422** The second argument (the fourth parameter) is a pointer to an integer
 2423** into which is written 0 or 1 to indicate whether checkpoints-on-close
 2424** have been disabled - 0 if they are not disabled, 1 if they are.
 2425** </dd>
 2426**
 2427** [[SQLITE_DBCONFIG_ENABLE_QPSG]] <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
 2428** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
 2429** the [query planner stability guarantee] (QPSG).  When the QPSG is active,
 2430** a single SQL query statement will always use the same algorithm regardless
 2431** of values of [bound parameters].)^ The QPSG disables some query optimizations
 2432** that look at the values of bound parameters, which can make some queries
 2433** slower.  But the QPSG has the advantage of more predictable behavior.  With
 2434** the QPSG active, SQLite will always use the same query plan in the field as
 2435** was used during testing in the lab.
 2436** The first argument to this setting is an integer which is 0 to disable
 2437** the QPSG, positive to enable QPSG, or negative to leave the setting
 2438** unchanged. The second parameter is a pointer to an integer into which
 2439** is written 0 or 1 to indicate whether the QPSG is disabled or enabled
 2440** following this call.
 2441** </dd>
 2442**
 2443** [[SQLITE_DBCONFIG_TRIGGER_EQP]] <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
 2444** <dd> By default, the output of EXPLAIN QUERY PLAN commands does not
 2445** include output for any operations performed by trigger programs. This
 2446** option is used to set or clear (the default) a flag that governs this
 2447** behavior. The first parameter passed to this operation is an integer -
 2448** positive to enable output for trigger programs, or zero to disable it,
 2449** or negative to leave the setting unchanged.
 2450** The second parameter is a pointer to an integer into which is written
 2451** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if
 2452** it is not disabled, 1 if it is.
 2453** </dd>
 2454**
 2455** [[SQLITE_DBCONFIG_RESET_DATABASE]] <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
 2456** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
 2457** [VACUUM] in order to reset a database back to an empty database
 2458** with no schema and no content. The following process works even for
 2459** a badly corrupted database file:
 2460** <ol>
 2461** <li> If the database connection is newly opened, make sure it has read the
 2462**      database schema by preparing then discarding some query against the
 2463**      database, or calling sqlite3_table_column_metadata(), ignoring any
 2464**      errors.  This step is only necessary if the application desires to keep
 2465**      the database in WAL mode after the reset if it was in WAL mode before
 2466**      the reset.
 2467** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
 2468** <li> [sqlite3_exec](db, "[VACUUM]", 0, 0, 0);
 2469** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
 2470** </ol>
 2471** Because resetting a database is destructive and irreversible, the
 2472** process requires the use of this obscure API and multiple steps to
 2473** help ensure that it does not happen by accident. Because this
 2474** feature must be capable of resetting corrupt databases, and
 2475** shutting down virtual tables may require access to that corrupt
 2476** storage, the library must abandon any installed virtual tables
 2477** without calling their xDestroy() methods.
 2478**
 2479** [[SQLITE_DBCONFIG_DEFENSIVE]] <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
 2480** <dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
 2481** "defensive" flag for a database connection.  When the defensive
 2482** flag is enabled, language features that allow ordinary SQL to
 2483** deliberately corrupt the database file are disabled.  The disabled
 2484** features include but are not limited to the following:
 2485** <ul>
 2486** <li> The [PRAGMA writable_schema=ON] statement.
 2487** <li> The [PRAGMA journal_mode=OFF] statement.
 2488** <li> The [PRAGMA schema_version=N] statement.
 2489** <li> Writes to the [sqlite_dbpage] virtual table.
 2490** <li> Direct writes to [shadow tables].
 2491** </ul>
 2492** </dd>
 2493**
 2494** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]] <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
 2495** <dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
 2496** "writable_schema" flag. This has the same effect and is logically equivalent
 2497** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF].
 2498** The first argument to this setting is an integer which is 0 to disable
 2499** the writable_schema, positive to enable writable_schema, or negative to
 2500** leave the setting unchanged. The second parameter is a pointer to an
 2501** integer into which is written 0 or 1 to indicate whether the writable_schema
 2502** is enabled or disabled following this call.
 2503** </dd>
 2504**
 2505** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
 2506** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
 2507** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
 2508** the legacy behavior of the [ALTER TABLE RENAME] command such that it
 2509** behaves as it did prior to [version 3.24.0] (2018-06-04).  See the
 2510** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
 2511** additional information. This feature can also be turned on and off
 2512** using the [PRAGMA legacy_alter_table] statement.
 2513** </dd>
 2514**
 2515** [[SQLITE_DBCONFIG_DQS_DML]]
 2516** <dt>SQLITE_DBCONFIG_DQS_DML</dt>
 2517** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
 2518** the legacy [double-quoted string literal] misfeature for DML statements
 2519** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
 2520** default value of this setting is determined by the [-DSQLITE_DQS]
 2521** compile-time option.
 2522** </dd>
 2523**
 2524** [[SQLITE_DBCONFIG_DQS_DDL]]
 2525** <dt>SQLITE_DBCONFIG_DQS_DDL</dt>
 2526** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
 2527** the legacy [double-quoted string literal] misfeature for DDL statements,
 2528** such as CREATE TABLE and CREATE INDEX. The
 2529** default value of this setting is determined by the [-DSQLITE_DQS]
 2530** compile-time option.
 2531** </dd>
 2532**
 2533** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]]
 2534** <dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</dt>
 2535** <dd>The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to
 2536** assume that database schemas are untainted by malicious content.
 2537** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite
 2538** takes additional defensive steps to protect the application from harm
 2539** including:
 2540** <ul>
 2541** <li> Prohibit the use of SQL functions inside triggers, views,
 2542** CHECK constraints, DEFAULT clauses, expression indexes,
 2543** partial indexes, or generated columns
 2544** unless those functions are tagged with [SQLITE_INNOCUOUS].
 2545** <li> Prohibit the use of virtual tables inside of triggers or views
 2546** unless those virtual tables are tagged with [SQLITE_VTAB_INNOCUOUS].
 2547** </ul>
 2548** This setting defaults to "on" for legacy compatibility, however
 2549** all applications are advised to turn it off if possible. This setting
 2550** can also be controlled using the [PRAGMA trusted_schema] statement.
 2551** </dd>
 2552**
 2553** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]]
 2554** <dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</dt>
 2555** <dd>The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates
 2556** the legacy file format flag.  When activated, this flag causes all newly
 2557** created database files to have a schema format version number (the 4-byte
 2558** integer found at offset 44 into the database header) of 1.  This in turn
 2559** means that the resulting database file will be readable and writable by
 2560** any SQLite version back to 3.0.0 ([dateof:3.0.0]).  Without this setting,
 2561** newly created databases are generally not understandable by SQLite versions
 2562** prior to 3.3.0 ([dateof:3.3.0]).  As these words are written, there
 2563** is now scarcely any need to generate database files that are compatible
 2564** all the way back to version 3.0.0, and so this setting is of little
 2565** practical use, but is provided so that SQLite can continue to claim the
 2566** ability to generate new database files that are compatible with  version
 2567** 3.0.0.
 2568** <p>Note that when the SQLITE_DBCONFIG_LEGACY_FILE_FORMAT setting is on,
 2569** the [VACUUM] command will fail with an obscure error when attempting to
 2570** process a table with generated columns and a descending index.  This is
 2571** not considered a bug since SQLite versions 3.3.0 and earlier do not support
 2572** either generated columns or descending indexes.
 2573** </dd>
 2574**
 2575** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]]
 2576** <dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt>
 2577** <dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in
 2578** [SQLITE_ENABLE_STMT_SCANSTATUS] builds. In this case, it sets or clears
 2579** a flag that enables collection of run-time performance statistics
 2580** used by [sqlite3_stmt_scanstatus_v2()] and the [nexec and ncycle]
 2581** columns of the [bytecode virtual table].
 2582** For statistics to be collected, the flag must be set on
 2583** the database handle both when the SQL statement is
 2584** [sqlite3_prepare|prepared] and when it is [sqlite3_step|stepped].
 2585** The flag is set (collection of statistics is enabled) by default.
 2586** <p>This option takes two arguments: an integer and a pointer to
 2587** an integer.  The first argument is 1, 0, or -1 to enable, disable, or
 2588** leave unchanged the statement scanstatus option.  If the second argument
 2589** is not NULL, then the value of the statement scanstatus setting after
 2590** processing the first argument is written into the integer that the second
 2591** argument points to.
 2592** </dd>
 2593**
 2594** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]]
 2595** <dt>SQLITE_DBCONFIG_REVERSE_SCANORDER</dt>
 2596** <dd>The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order
 2597** in which tables and indexes are scanned so that the scans start at the end
 2598** and work toward the beginning rather than starting at the beginning and
 2599** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the
 2600** same as setting [PRAGMA reverse_unordered_selects]. <p>This option takes
 2601** two arguments which are an integer and a pointer to an integer.  The first
 2602** argument is 1, 0, or -1 to enable, disable, or leave unchanged the
 2603** reverse scan order flag, respectively.  If the second argument is not NULL,
 2604** then 0 or 1 is written into the integer that the second argument points to
 2605** depending on if the reverse scan order flag is set after processing the
 2606** first argument.
 2607** </dd>
 2608**
 2609** [[SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE]]
 2610** <dt>SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE</dt>
 2611** <dd>The SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE option enables or disables
 2612** the ability of the [ATTACH DATABASE] SQL command to create a new database
 2613** file if the database filed named in the ATTACH command does not already
 2614** exist.  This ability of ATTACH to create a new database is enabled by
 2615** default.  Applications can disable or reenable the ability for ATTACH to
 2616** create new database files using this DBCONFIG option.<p>
 2617** This option takes two arguments which are an integer and a pointer
 2618** to an integer.  The first argument is 1, 0, or -1 to enable, disable, or
 2619** leave unchanged the attach-create flag, respectively.  If the second
 2620** argument is not NULL, then 0 or 1 is written into the integer that the
 2621** second argument points to depending on if the attach-create flag is set
 2622** after processing the first argument.
 2623** </dd>
 2624**
 2625** [[SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE]]
 2626** <dt>SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE</dt>
 2627** <dd>The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables or disables the
 2628** ability of the [ATTACH DATABASE] SQL command to open a database for writing.
 2629** This capability is enabled by default.  Applications can disable or
 2630** reenable this capability using the current DBCONFIG option.  If
 2631** this capability is disabled, the [ATTACH] command will still work,
 2632** but the database will be opened read-only.  If this option is disabled,
 2633** then the ability to create a new database using [ATTACH] is also disabled,
 2634** regardless of the value of the [SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE]
 2635** option.<p>
 2636** This option takes two arguments which are an integer and a pointer
 2637** to an integer.  The first argument is 1, 0, or -1 to enable, disable, or
 2638** leave unchanged the ability to ATTACH another database for writing,
 2639** respectively.  If the second argument is not NULL, then 0 or 1 is written
 2640** into the integer to which the second argument points, depending on whether
 2641** the ability to ATTACH a read/write database is enabled or disabled
 2642** after processing the first argument.
 2643** </dd>
 2644**
 2645** [[SQLITE_DBCONFIG_ENABLE_COMMENTS]]
 2646** <dt>SQLITE_DBCONFIG_ENABLE_COMMENTS</dt>
 2647** <dd>The SQLITE_DBCONFIG_ENABLE_COMMENTS option enables or disables the
 2648** ability to include comments in SQL text.  Comments are enabled by default.
 2649** An application can disable or reenable comments in SQL text using this
 2650** DBCONFIG option.<p>
 2651** This option takes two arguments which are an integer and a pointer
 2652** to an integer.  The first argument is 1, 0, or -1 to enable, disable, or
 2653** leave unchanged the ability to use comments in SQL text,
 2654** respectively.  If the second argument is not NULL, then 0 or 1 is written
 2655** into the integer that the second argument points to depending on if
 2656** comments are allowed in SQL text after processing the first argument.
 2657** </dd>
 2658**
 2659** [[SQLITE_DBCONFIG_FP_DIGITS]]
 2660** <dt>SQLITE_DBCONFIG_FP_DIGITS</dt>
 2661** <dd>The SQLITE_DBCONFIG_FP_DIGITS setting is a small integer that determines
 2662** the number of significant digits that SQLite will attempt to preserve when
 2663** converting floating point numbers (IEEE 754 "doubles") into text.  The
 2664** default value 17, as of SQLite version 3.52.0.  The value was 15 in all
 2665** prior versions.<p>
 2666** This option takes two arguments which are an integer and a pointer
 2667** to an integer.  The first argument is a small integer, between 3 and 23, or
 2668** zero.  The FP_DIGITS setting is changed to that small integer, or left
 2669** unaltered if the first argument is zero or out of range. The second argument
 2670** is a pointer to an integer.  If the pointer is not NULL, then the value of
 2671** the FP_DIGITS setting, after possibly being modified by the first
 2672** arguments, is written into the integer to which the second argument points.
 2673** </dd>
 2674**
 2675** </dl>
 2676**
 2677** [[DBCONFIG arguments]] <h3>Arguments To SQLITE_DBCONFIG Options</h3>
 2678**
 2679** <p>Most of the SQLITE_DBCONFIG options take two arguments, so that the
 2680** overall call to [sqlite3_db_config()] has a total of four parameters.
 2681** The first argument (the third parameter to sqlite3_db_config()) is
 2682** an integer.
 2683** The second argument is a pointer to an integer. If the first argument is 1,
 2684** then the option becomes enabled.  If the first integer argument is 0,
 2685** then the option is disabled.
 2686** If the first argument is -1, then the option setting
 2687** is unchanged.  The second argument, the pointer to an integer, may be NULL.
 2688** If the second argument is not NULL, then a value of 0 or 1 is written into
 2689** the integer to which the second argument points, depending on whether the
 2690** setting is disabled or enabled after applying any changes specified by
 2691** the first argument.
 2692**
 2693** <p>While most SQLITE_DBCONFIG options use the argument format
 2694** described in the previous paragraph, the [SQLITE_DBCONFIG_MAINDBNAME],
 2695** [SQLITE_DBCONFIG_LOOKASIDE], and [SQLITE_DBCONFIG_FP_DIGITS] options
 2696** are different.  See the documentation of those exceptional options for
 2697** details.
 2698*/
 2699#define SQLITE_DBCONFIG_MAINDBNAME            1000 /* const char* */
 2700#define SQLITE_DBCONFIG_LOOKASIDE             1001 /* void* int int */
 2701#define SQLITE_DBCONFIG_ENABLE_FKEY           1002 /* int int* */
 2702#define SQLITE_DBCONFIG_ENABLE_TRIGGER        1003 /* int int* */
 2703#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */
 2704#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
 2705#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE      1006 /* int int* */
 2706#define SQLITE_DBCONFIG_ENABLE_QPSG           1007 /* int int* */
 2707#define SQLITE_DBCONFIG_TRIGGER_EQP           1008 /* int int* */
 2708#define SQLITE_DBCONFIG_RESET_DATABASE        1009 /* int int* */
 2709#define SQLITE_DBCONFIG_DEFENSIVE             1010 /* int int* */
 2710#define SQLITE_DBCONFIG_WRITABLE_SCHEMA       1011 /* int int* */
 2711#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE    1012 /* int int* */
 2712#define SQLITE_DBCONFIG_DQS_DML               1013 /* int int* */
 2713#define SQLITE_DBCONFIG_DQS_DDL               1014 /* int int* */
 2714#define SQLITE_DBCONFIG_ENABLE_VIEW           1015 /* int int* */
 2715#define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT    1016 /* int int* */
 2716#define SQLITE_DBCONFIG_TRUSTED_SCHEMA        1017 /* int int* */
 2717#define SQLITE_DBCONFIG_STMT_SCANSTATUS       1018 /* int int* */
 2718#define SQLITE_DBCONFIG_REVERSE_SCANORDER     1019 /* int int* */
 2719#define SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE  1020 /* int int* */
 2720#define SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE   1021 /* int int* */
 2721#define SQLITE_DBCONFIG_ENABLE_COMMENTS       1022 /* int int* */
 2722#define SQLITE_DBCONFIG_FP_DIGITS             1023 /* int int* */
 2723#define SQLITE_DBCONFIG_MAX                   1023 /* Largest DBCONFIG */
 2724
 2725/*
 2726** CAPI3REF: Enable Or Disable Extended Result Codes
 2727** METHOD: sqlite3
 2728**
 2729** ^The sqlite3_extended_result_codes() routine enables or disables the
 2730** [extended result codes] feature of SQLite. ^The extended result
 2731** codes are disabled by default for historical compatibility.
 2732*/
 2733SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff);
 2734
 2735/*
 2736** CAPI3REF: Last Insert Rowid
 2737** METHOD: sqlite3
 2738**
 2739** ^Each entry in most SQLite tables (except for [WITHOUT ROWID] tables)
 2740** has a unique 64-bit signed
 2741** integer key called the [ROWID | "rowid"]. ^The rowid is always available
 2742** as an undeclared column named ROWID, OID, or _ROWID_ as long as those
 2743** names are not also used by explicitly declared columns. ^If
 2744** the table has a column of type [INTEGER PRIMARY KEY] then that column
 2745** is another alias for the rowid.
 2746**
 2747** ^The sqlite3_last_insert_rowid(D) interface usually returns the [rowid] of
 2748** the most recent successful [INSERT] into a rowid table or [virtual table]
 2749** on database connection D. ^Inserts into [WITHOUT ROWID] tables are not
 2750** recorded. ^If no successful [INSERT]s into rowid tables have ever occurred
 2751** on the database connection D, then sqlite3_last_insert_rowid(D) returns
 2752** zero.
 2753**
 2754** As well as being set automatically as rows are inserted into database
 2755** tables, the value returned by this function may be set explicitly by
 2756** [sqlite3_set_last_insert_rowid()]
 2757**
 2758** Some virtual table implementations may INSERT rows into rowid tables as
 2759** part of committing a transaction (e.g. to flush data accumulated in memory
 2760** to disk). In this case subsequent calls to this function return the rowid
 2761** associated with these internal INSERT operations, which leads to
 2762** unintuitive results. Virtual table implementations that do write to rowid
 2763** tables in this way can avoid this problem by restoring the original
 2764** rowid value using [sqlite3_set_last_insert_rowid()] before returning
 2765** control to the user.
 2766**
 2767** ^(If an [INSERT] occurs within a trigger then this routine will
 2768** return the [rowid] of the inserted row as long as the trigger is
 2769** running. Once the trigger program ends, the value returned
 2770** by this routine reverts to what it was before the trigger was fired.)^
 2771**
 2772** ^An [INSERT] that fails due to a constraint violation is not a
 2773** successful [INSERT] and does not change the value returned by this
 2774** routine.  ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
 2775** and INSERT OR ABORT make no changes to the return value of this
 2776** routine when their insertion fails.  ^(When INSERT OR REPLACE
 2777** encounters a constraint violation, it does not fail.  The
 2778** INSERT continues to completion after deleting rows that caused
 2779** the constraint problem so INSERT OR REPLACE will always change
 2780** the return value of this interface.)^
 2781**
 2782** ^For the purposes of this routine, an [INSERT] is considered to
 2783** be successful even if it is subsequently rolled back.
 2784**
 2785** This function is accessible to SQL statements via the
 2786** [last_insert_rowid() SQL function].
 2787**
 2788** If a separate thread performs a new [INSERT] on the same
 2789** database connection while the [sqlite3_last_insert_rowid()]
 2790** function is running and thus changes the last insert [rowid],
 2791** then the value returned by [sqlite3_last_insert_rowid()] is
 2792** unpredictable and might not equal either the old or the new
 2793** last insert [rowid].
 2794*/
 2795SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
 2796
 2797/*
 2798** CAPI3REF: Set the Last Insert Rowid value.
 2799** METHOD: sqlite3
 2800**
 2801** The sqlite3_set_last_insert_rowid(D, R) method allows the application to
 2802** set the value returned by calling sqlite3_last_insert_rowid(D) to R
 2803** without inserting a row into the database.
 2804*/
 2805SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64);
 2806
 2807/*
 2808** CAPI3REF: Count The Number Of Rows Modified
 2809** METHOD: sqlite3
 2810**
 2811** ^These functions return the number of rows modified, inserted or
 2812** deleted by the most recently completed INSERT, UPDATE or DELETE
 2813** statement on the database connection specified by the only parameter.
 2814** The two functions are identical except for the type of the return value
 2815** and that if the number of rows modified by the most recent INSERT, UPDATE,
 2816** or DELETE is greater than the maximum value supported by type "int", then
 2817** the return value of sqlite3_changes() is undefined. ^Executing any other
 2818** type of SQL statement does not modify the value returned by these functions.
 2819** For the purposes of this interface, a CREATE TABLE AS SELECT statement
 2820** does not count as an INSERT, UPDATE or DELETE statement and hence the rows
 2821** added to the new table by the CREATE TABLE AS SELECT statement are not
 2822** counted.
 2823**
 2824** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are
 2825** considered - auxiliary changes caused by [CREATE TRIGGER | triggers],
 2826** [foreign key actions] or [REPLACE] constraint resolution are not counted.
 2827**
 2828** Changes to a view that are intercepted by
 2829** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value
 2830** returned by sqlite3_changes() immediately after an INSERT, UPDATE or
 2831** DELETE statement run on a view is always zero. Only changes made to real
 2832** tables are counted.
 2833**
 2834** Things are more complicated if the sqlite3_changes() function is
 2835** executed while a trigger program is running. This may happen if the
 2836** program uses the [changes() SQL function], or if some other callback
 2837** function invokes sqlite3_changes() directly. Essentially:
 2838**
 2839** <ul>
 2840**   <li> ^(Before entering a trigger program the value returned by
 2841**        sqlite3_changes() function is saved. After the trigger program
 2842**        has finished, the original value is restored.)^
 2843**
 2844**   <li> ^(Within a trigger program each INSERT, UPDATE and DELETE
 2845**        statement sets the value returned by sqlite3_changes()
 2846**        upon completion as normal. Of course, this value will not include
 2847**        any changes performed by sub-triggers, as the sqlite3_changes()
 2848**        value will be saved and restored after each sub-trigger has run.)^
 2849** </ul>
 2850**
 2851** ^This means that if the changes() SQL function (or similar) is used
 2852** by the first INSERT, UPDATE or DELETE statement within a trigger, it
 2853** returns the value as set when the calling statement began executing.
 2854** ^If it is used by the second or subsequent such statement within a trigger
 2855** program, the value returned reflects the number of rows modified by the
 2856** previous INSERT, UPDATE or DELETE statement within the same trigger.
 2857**
 2858** If a separate thread makes changes on the same database connection
 2859** while [sqlite3_changes()] is running then the value returned
 2860** is unpredictable and not meaningful.
 2861**
 2862** See also:
 2863** <ul>
 2864** <li> the [sqlite3_total_changes()] interface
 2865** <li> the [count_changes pragma]
 2866** <li> the [changes() SQL function]
 2867** <li> the [data_version pragma]
 2868** </ul>
 2869*/
 2870SQLITE_API int sqlite3_changes(sqlite3*);
 2871SQLITE_API sqlite3_int64 sqlite3_changes64(sqlite3*);
 2872
 2873/*
 2874** CAPI3REF: Total Number Of Rows Modified
 2875** METHOD: sqlite3
 2876**
 2877** ^These functions return the total number of rows inserted, modified or
 2878** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed
 2879** since the database connection was opened, including those executed as
 2880** part of trigger programs. The two functions are identical except for the
 2881** type of the return value and that if the number of rows modified by the
 2882** connection exceeds the maximum value supported by type "int", then
 2883** the return value of sqlite3_total_changes() is undefined. ^Executing
 2884** any other type of SQL statement does not affect the value returned by
 2885** sqlite3_total_changes().
 2886**
 2887** ^Changes made as part of [foreign key actions] are included in the
 2888** count, but those made as part of REPLACE constraint resolution are
 2889** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
 2890** are not counted.
 2891**
 2892** The [sqlite3_total_changes(D)] interface only reports the number
 2893** of rows that changed due to SQL statement run against database
 2894** connection D.  Any changes by other database connections are ignored.
 2895** To detect changes against a database file from other database
 2896** connections use the [PRAGMA data_version] command or the
 2897** [SQLITE_FCNTL_DATA_VERSION] [file control].
 2898**
 2899** If a separate thread makes changes on the same database connection
 2900** while [sqlite3_total_changes()] is running then the value
 2901** returned is unpredictable and not meaningful.
 2902**
 2903** See also:
 2904** <ul>
 2905** <li> the [sqlite3_changes()] interface
 2906** <li> the [count_changes pragma]
 2907** <li> the [changes() SQL function]
 2908** <li> the [data_version pragma]
 2909** <li> the [SQLITE_FCNTL_DATA_VERSION] [file control]
 2910** </ul>
 2911*/
 2912SQLITE_API int sqlite3_total_changes(sqlite3*);
 2913SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*);
 2914
 2915/*
 2916** CAPI3REF: Interrupt A Long-Running Query
 2917** METHOD: sqlite3
 2918**
 2919** ^This function causes any pending database operation to abort and
 2920** return at its earliest opportunity. This routine is typically
 2921** called in response to a user action such as pressing "Cancel"
 2922** or Ctrl-C where the user wants a long query operation to halt
 2923** immediately.
 2924**
 2925** ^It is safe to call this routine from a thread different from the
 2926** thread that is currently running the database operation.  But it
 2927** is not safe to call this routine with a [database connection] that
 2928** is closed or might close before sqlite3_interrupt() returns.
 2929**
 2930** ^If an SQL operation is very nearly finished at the time when
 2931** sqlite3_interrupt() is called, then it might not have an opportunity
 2932** to be interrupted and might continue to completion.
 2933**
 2934** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT].
 2935** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
 2936** that is inside an explicit transaction, then the entire transaction
 2937** will be rolled back automatically.
 2938**
 2939** ^The sqlite3_interrupt(D) call is in effect until all currently running
 2940** SQL statements on [database connection] D complete.  ^Any new SQL statements
 2941** that are started after the sqlite3_interrupt() call and before the
 2942** running statement count reaches zero are interrupted as if they had been
 2943** running prior to the sqlite3_interrupt() call.  ^New SQL statements
 2944** that are started after the running statement count reaches zero are
 2945** not effected by the sqlite3_interrupt().
 2946** ^A call to sqlite3_interrupt(D) that occurs when there are no running
 2947** SQL statements is a no-op and has no effect on SQL statements
 2948** that are started after the sqlite3_interrupt() call returns.
 2949**
 2950** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether
 2951** or not an interrupt is currently in effect for [database connection] D.
 2952** It returns 1 if an interrupt is currently in effect, or 0 otherwise.
 2953*/
 2954SQLITE_API void sqlite3_interrupt(sqlite3*);
 2955SQLITE_API int sqlite3_is_interrupted(sqlite3*);
 2956
 2957/*
 2958** CAPI3REF: Determine If An SQL Statement Is Complete
 2959**
 2960** These routines are useful during command-line input to determine if the
 2961** currently entered text seems to form a complete SQL statement or
 2962** if additional input is needed before sending the text into
 2963** SQLite for parsing.  ^These routines return 1 if the input string
 2964** appears to be a complete SQL statement.  ^A statement is judged to be
 2965** complete if it ends with a semicolon token and is not a prefix of a
 2966** well-formed CREATE TRIGGER statement.  ^Semicolons that are embedded within
 2967** string literals or quoted identifier names or comments are not
 2968** independent tokens (they are part of the token in which they are
 2969** embedded) and thus do not count as a statement terminator.  ^Whitespace
 2970** and comments that follow the final semicolon are ignored.
 2971**
 2972** ^These routines return 0 if the statement is incomplete.  ^If a
 2973** memory allocation fails, then SQLITE_NOMEM is returned.
 2974**
 2975** ^These routines do not parse the SQL statements and thus
 2976** will not detect syntactically incorrect SQL.
 2977**
 2978** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior
 2979** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
 2980** automatically by sqlite3_complete16().  If that initialization fails,
 2981** then the return value from sqlite3_complete16() will be non-zero
 2982** regardless of whether or not the input SQL is complete.)^
 2983**
 2984** The input to [sqlite3_complete()] must be a zero-terminated
 2985** UTF-8 string.
 2986**
 2987** The input to [sqlite3_complete16()] must be a zero-terminated
 2988** UTF-16 string in native byte order.
 2989*/
 2990SQLITE_API int sqlite3_complete(const char *sql);
 2991SQLITE_API int sqlite3_complete16(const void *sql);
 2992
 2993/*
 2994** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
 2995** KEYWORDS: {busy-handler callback} {busy handler}
 2996** METHOD: sqlite3
 2997**
 2998** ^The sqlite3_busy_handler(D,X,P) routine sets a callback function X
 2999** that might be invoked with argument P whenever
 3000** an attempt is made to access a database table associated with
 3001** [database connection] D when another thread
 3002** or process has the table locked.
 3003** The sqlite3_busy_handler() interface is used to implement
 3004** [sqlite3_busy_timeout()] and [PRAGMA busy_timeout].
 3005**
 3006** ^If the busy callback is NULL, then [SQLITE_BUSY]
 3007** is returned immediately upon encountering the lock.  ^If the busy callback
 3008** is not NULL, then the callback might be invoked with two arguments.
 3009**
 3010** ^The first argument to the busy handler is a copy of the void* pointer which
 3011** is the third argument to sqlite3_busy_handler().  ^The second argument to
 3012** the busy handler callback is the number of times that the busy handler has
 3013** been invoked previously for the same locking event.  ^If the
 3014** busy callback returns 0, then no additional attempts are made to
 3015** access the database and [SQLITE_BUSY] is returned
 3016** to the application.
 3017** ^If the callback returns non-zero, then another attempt
 3018** is made to access the database and the cycle repeats.
 3019**
 3020** The presence of a busy handler does not guarantee that it will be invoked
 3021** when there is lock contention. ^If SQLite determines that invoking the busy
 3022** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY]
 3023** to the application instead of invoking the
 3024** busy handler.
 3025** Consider a scenario where one process is holding a read lock that
 3026** it is trying to promote to a reserved lock and
 3027** a second process is holding a reserved lock that it is trying
 3028** to promote to an exclusive lock.  The first process cannot proceed
 3029** because it is blocked by the second and the second process cannot
 3030** proceed because it is blocked by the first.  If both processes
 3031** invoke the busy handlers, neither will make any progress.  Therefore,
 3032** SQLite returns [SQLITE_BUSY] for the first process, hoping that this
 3033** will induce the first process to release its read lock and allow
 3034** the second process to proceed.
 3035**
 3036** ^The default busy callback is NULL.
 3037**
 3038** ^(There can only be a single busy handler defined for each
 3039** [database connection].  Setting a new busy handler clears any
 3040** previously set handler.)^  ^Note that calling [sqlite3_busy_timeout()]
 3041** or evaluating [PRAGMA busy_timeout=N] will change the
 3042** busy handler and thus clear any previously set busy handler.
 3043**
 3044** The busy callback should not take any actions which modify the
 3045** database connection that invoked the busy handler.  In other words,
 3046** the busy handler is not reentrant.  Any such actions
 3047** result in undefined behavior.
 3048**
 3049** A busy handler must not close the database connection
 3050** or [prepared statement] that invoked the busy handler.
 3051*/
 3052SQLITE_API int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*);
 3053
 3054/*
 3055** CAPI3REF: Set A Busy Timeout
 3056** METHOD: sqlite3
 3057**
 3058** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps
 3059** for a specified amount of time when a table is locked.  ^The handler
 3060** will sleep multiple times until at least "ms" milliseconds of sleeping
 3061** have accumulated.  ^After at least "ms" milliseconds of sleeping,
 3062** the handler returns 0 which causes [sqlite3_step()] to return
 3063** [SQLITE_BUSY].
 3064**
 3065** ^Calling this routine with an argument less than or equal to zero
 3066** turns off all busy handlers.
 3067**
 3068** ^(There can only be a single busy handler for a particular
 3069** [database connection] at any given moment.  If another busy handler
 3070** was defined  (using [sqlite3_busy_handler()]) prior to calling
 3071** this routine, that other busy handler is cleared.)^
 3072**
 3073** See also:  [PRAGMA busy_timeout]
 3074*/
 3075SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
 3076
 3077/*
 3078** CAPI3REF: Set the Setlk Timeout
 3079** METHOD: sqlite3
 3080**
 3081** This routine is only useful in SQLITE_ENABLE_SETLK_TIMEOUT builds. If
 3082** the VFS supports blocking locks, it sets the timeout in ms used by
 3083** eligible locks taken on wal mode databases by the specified database
 3084** handle. In non-SQLITE_ENABLE_SETLK_TIMEOUT builds, or if the VFS does
 3085** not support blocking locks, this function is a no-op.
 3086**
 3087** Passing 0 to this function disables blocking locks altogether. Passing
 3088** -1 to this function requests that the VFS blocks for a long time -
 3089** indefinitely if possible. The results of passing any other negative value
 3090** are undefined.
 3091**
 3092** Internally, each SQLite database handle stores two timeout values - the
 3093** busy-timeout (used for rollback mode databases, or if the VFS does not
 3094** support blocking locks) and the setlk-timeout (used for blocking locks
 3095** on wal-mode databases). The sqlite3_busy_timeout() method sets both
 3096** values, this function sets only the setlk-timeout value. Therefore,
 3097** to configure separate busy-timeout and setlk-timeout values for a single
 3098** database handle, call sqlite3_busy_timeout() followed by this function.
 3099**
 3100** Whenever the number of connections to a wal mode database falls from
 3101** 1 to 0, the last connection takes an exclusive lock on the database,
 3102** then checkpoints and deletes the wal file. While it is doing this, any
 3103** new connection that tries to read from the database fails with an
 3104** SQLITE_BUSY error. Or, if the SQLITE_SETLK_BLOCK_ON_CONNECT flag is
 3105** passed to this API, the new connection blocks until the exclusive lock
 3106** has been released.
 3107*/
 3108SQLITE_API int sqlite3_setlk_timeout(sqlite3*, int ms, int flags);
 3109
 3110/*
 3111** CAPI3REF: Flags for sqlite3_setlk_timeout()
 3112*/
 3113#define SQLITE_SETLK_BLOCK_ON_CONNECT 0x01
 3114
 3115/*
 3116** CAPI3REF: Convenience Routines For Running Queries
 3117** METHOD: sqlite3
 3118**
 3119** This is a legacy interface that is preserved for backwards compatibility.
 3120** Use of this interface is not recommended.
 3121**
 3122** Definition: A <b>result table</b> is a memory data structure created by the
 3123** [sqlite3_get_table()] interface.  A result table records the
 3124** complete query results from one or more queries.
 3125**
 3126** The table conceptually has a number of rows and columns.  But
 3127** these numbers are not part of the result table itself.  These
 3128** numbers are obtained separately.  Let N be the number of rows
 3129** and M be the number of columns.
 3130**
 3131** A result table is an array of pointers to zero-terminated UTF-8 strings.
 3132** There are (N+1)*M elements in the array.  The first M pointers point
 3133** to zero-terminated strings that  contain the names of the columns.
 3134** The remaining entries all point to query results.  NULL values result
 3135** in NULL pointers.  All other values are in their UTF-8 zero-terminated
 3136** string representation as returned by [sqlite3_column_text()].
 3137**
 3138** A result table might consist of one or more memory allocations.
 3139** It is not safe to pass a result table directly to [sqlite3_free()].
 3140** A result table should be deallocated using [sqlite3_free_table()].
 3141**
 3142** ^(As an example of the result table format, suppose a query result
 3143** is as follows:
 3144**
 3145** <blockquote><pre>
 3146**        Name        | Age
 3147**        -----------------------
 3148**        Alice       | 43
 3149**        Bob         | 28
 3150**        Cindy       | 21
 3151** </pre></blockquote>
 3152**
 3153** There are two columns (M==2) and three rows (N==3).  Thus the
 3154** result table has 8 entries.  Suppose the result table is stored
 3155** in an array named azResult.  Then azResult holds this content:
 3156**
 3157** <blockquote><pre>
 3158**        azResult&#91;0] = "Name";
 3159**        azResult&#91;1] = "Age";
 3160**        azResult&#91;2] = "Alice";
 3161**        azResult&#91;3] = "43";
 3162**        azResult&#91;4] = "Bob";
 3163**        azResult&#91;5] = "28";
 3164**        azResult&#91;6] = "Cindy";
 3165**        azResult&#91;7] = "21";
 3166** </pre></blockquote>)^
 3167**
 3168** ^The sqlite3_get_table() function evaluates one or more
 3169** semicolon-separated SQL statements in the zero-terminated UTF-8
 3170** string of its 2nd parameter and returns a result table to the
 3171** pointer given in its 3rd parameter.
 3172**
 3173** After the application has finished with the result from sqlite3_get_table(),
 3174** it must pass the result table pointer to sqlite3_free_table() in order to
 3175** release the memory that was malloced.  Because of the way the
 3176** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
 3177** function must not try to call [sqlite3_free()] directly.  Only
 3178** [sqlite3_free_table()] is able to release the memory properly and safely.
 3179**
 3180** The sqlite3_get_table() interface is implemented as a wrapper around
 3181** [sqlite3_exec()].  The sqlite3_get_table() routine does not have access
 3182** to any internal data structures of SQLite.  It uses only the public
 3183** interface defined here.  As a consequence, errors that occur in the
 3184** wrapper layer outside of the internal [sqlite3_exec()] call are not
 3185** reflected in subsequent calls to [sqlite3_errcode()] or
 3186** [sqlite3_errmsg()].
 3187*/
 3188SQLITE_API int sqlite3_get_table(
 3189  sqlite3 *db,          /* An open database */
 3190  const char *zSql,     /* SQL to be evaluated */
 3191  char ***pazResult,    /* Results of the query */
 3192  int *pnRow,           /* Number of result rows written here */
 3193  int *pnColumn,        /* Number of result columns written here */
 3194  char **pzErrmsg       /* Error msg written here */
 3195);
 3196SQLITE_API void sqlite3_free_table(char **result);
 3197
 3198/*
 3199** CAPI3REF: Formatted String Printing Functions
 3200**
 3201** These routines are work-alikes of the "printf()" family of functions
 3202** from the standard C library.
 3203** These routines understand most of the common formatting options from
 3204** the standard library printf()
 3205** plus some additional non-standard formats ([%q], [%Q], [%w], and [%z]).
 3206** See the [built-in printf()] documentation for details.
 3207**
 3208** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
 3209** results into memory obtained from [sqlite3_malloc64()].
 3210** The strings returned by these two routines should be
 3211** released by [sqlite3_free()].  ^Both routines return a
 3212** NULL pointer if [sqlite3_malloc64()] is unable to allocate enough
 3213** memory to hold the resulting string.
 3214**
 3215** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from
 3216** the standard C library.  The result is written into the
 3217** buffer supplied as the second parameter whose size is given by
 3218** the first parameter. Note that the order of the
 3219** first two parameters is reversed from snprintf().)^  This is an
 3220** historical accident that cannot be fixed without breaking
 3221** backwards compatibility.  ^(Note also that sqlite3_snprintf()
 3222** returns a pointer to its buffer instead of the number of
 3223** characters actually written into the buffer.)^  We admit that
 3224** the number of characters written would be a more useful return
 3225** value but we cannot change the implementation of sqlite3_snprintf()
 3226** now without breaking compatibility.
 3227**
 3228** ^As long as the buffer size is greater than zero, sqlite3_snprintf()
 3229** guarantees that the buffer is always zero-terminated.  ^The first
 3230** parameter "n" is the total size of the buffer, including space for
 3231** the zero terminator.  So the longest string that can be completely
 3232** written will be n-1 characters.
 3233**
 3234** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
 3235**
 3236** See also:  [built-in printf()], [printf() SQL function]
 3237*/
 3238SQLITE_API char *sqlite3_mprintf(const char*,...);
 3239SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
 3240SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
 3241SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
 3242
 3243/*
 3244** CAPI3REF: Memory Allocation Subsystem
 3245**
 3246** The SQLite core uses these three routines for all of its own
 3247** internal memory allocation needs. "Core" in the previous sentence
 3248** does not include operating-system specific [VFS] implementation.  The
 3249** Windows VFS uses native malloc() and free() for some operations.
 3250**
 3251** ^The sqlite3_malloc() routine returns a pointer to a block
 3252** of memory at least N bytes in length, where N is the parameter.
 3253** ^If sqlite3_malloc() is unable to obtain sufficient free
 3254** memory, it returns a NULL pointer.  ^If the parameter N to
 3255** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
 3256** a NULL pointer.
 3257**
 3258** ^The sqlite3_malloc64(N) routine works just like
 3259** sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead
 3260** of a signed 32-bit integer.
 3261**
 3262** ^Calling sqlite3_free() with a pointer previously returned
 3263** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
 3264** that it might be reused.  ^The sqlite3_free() routine is
 3265** a no-op if it is called with a NULL pointer.  Passing a NULL pointer
 3266** to sqlite3_free() is harmless.  After being freed, memory
 3267** should neither be read nor written.  Even reading previously freed
 3268** memory might result in a segmentation fault or other severe error.
 3269** Memory corruption, a segmentation fault, or other severe error
 3270** might result if sqlite3_free() is called with a non-NULL pointer that
 3271** was not obtained from sqlite3_malloc() or sqlite3_realloc().
 3272**
 3273** ^The sqlite3_realloc(X,N) interface attempts to resize a
 3274** prior memory allocation X to be at least N bytes.
 3275** ^If the X parameter to sqlite3_realloc(X,N)
 3276** is a NULL pointer then its behavior is identical to calling
 3277** sqlite3_malloc(N).
 3278** ^If the N parameter to sqlite3_realloc(X,N) is zero or
 3279** negative then the behavior is exactly the same as calling
 3280** sqlite3_free(X).
 3281** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation
 3282** of at least N bytes in size or NULL if insufficient memory is available.
 3283** ^If M is the size of the prior allocation, then min(N,M) bytes of the
 3284** prior allocation are copied into the beginning of the buffer returned
 3285** by sqlite3_realloc(X,N) and the prior allocation is freed.
 3286** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the
 3287** prior allocation is not freed.
 3288**
 3289** ^The sqlite3_realloc64(X,N) interface works the same as
 3290** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead
 3291** of a 32-bit signed integer.
 3292**
 3293** ^If X is a memory allocation previously obtained from sqlite3_malloc(),
 3294** sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then
 3295** sqlite3_msize(X) returns the size of that memory allocation in bytes.
 3296** ^The value returned by sqlite3_msize(X) might be larger than the number
 3297** of bytes requested when X was allocated.  ^If X is a NULL pointer then
 3298** sqlite3_msize(X) returns zero.  If X points to something that is not
 3299** the beginning of memory allocation, or if it points to a formerly
 3300** valid memory allocation that has now been freed, then the behavior
 3301** of sqlite3_msize(X) is undefined and possibly harmful.
 3302**
 3303** ^The memory returned by sqlite3_malloc(), sqlite3_realloc(),
 3304** sqlite3_malloc64(), and sqlite3_realloc64()
 3305** is always aligned to at least an 8 byte boundary, or to a
 3306** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
 3307** option is used.
 3308**
 3309** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
 3310** must be either NULL or else pointers obtained from a prior
 3311** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
 3312** not yet been released.
 3313**
 3314** The application must not read or write any part of
 3315** a block of memory after it has been released using
 3316** [sqlite3_free()] or [sqlite3_realloc()].
 3317*/
 3318SQLITE_API void *sqlite3_malloc(int);
 3319SQLITE_API void *sqlite3_malloc64(sqlite3_uint64);
 3320SQLITE_API void *sqlite3_realloc(void*, int);
 3321SQLITE_API void *sqlite3_realloc64(void*, sqlite3_uint64);
 3322SQLITE_API void sqlite3_free(void*);
 3323SQLITE_API sqlite3_uint64 sqlite3_msize(void*);
 3324
 3325/*
 3326** CAPI3REF: Memory Allocator Statistics
 3327**
 3328** SQLite provides these two interfaces for reporting on the status
 3329** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
 3330** routines, which form the built-in memory allocation subsystem.
 3331**
 3332** ^The [sqlite3_memory_used()] routine returns the number of bytes
 3333** of memory currently outstanding (malloced but not freed).
 3334** ^The [sqlite3_memory_highwater()] routine returns the maximum
 3335** value of [sqlite3_memory_used()] since the high-water mark
 3336** was last reset.  ^The values returned by [sqlite3_memory_used()] and
 3337** [sqlite3_memory_highwater()] include any overhead
 3338** added by SQLite in its implementation of [sqlite3_malloc()],
 3339** but not overhead added by any underlying system library
 3340** routines that [sqlite3_malloc()] may call.
 3341**
 3342** ^The memory high-water mark is reset to the current value of
 3343** [sqlite3_memory_used()] if and only if the parameter to
 3344** [sqlite3_memory_highwater()] is true.  ^The value returned
 3345** by [sqlite3_memory_highwater(1)] is the high-water mark
 3346** prior to the reset.
 3347*/
 3348SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
 3349SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
 3350
 3351/*
 3352** CAPI3REF: Pseudo-Random Number Generator
 3353**
 3354** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
 3355** select random [ROWID | ROWIDs] when inserting new records into a table that
 3356** already uses the largest possible [ROWID].  The PRNG is also used for
 3357** the built-in random() and randomblob() SQL functions.  This interface allows
 3358** applications to access the same PRNG for other purposes.
 3359**
 3360** ^A call to this routine stores N bytes of randomness into buffer P.
 3361** ^The P parameter can be a NULL pointer.
 3362**
 3363** ^If this routine has not been previously called or if the previous
 3364** call had N less than one or a NULL pointer for P, then the PRNG is
 3365** seeded using randomness obtained from the xRandomness method of
 3366** the default [sqlite3_vfs] object.
 3367** ^If the previous call to this routine had an N of 1 or more and a
 3368** non-NULL P then the pseudo-randomness is generated
 3369** internally and without recourse to the [sqlite3_vfs] xRandomness
 3370** method.
 3371*/
 3372SQLITE_API void sqlite3_randomness(int N, void *P);
 3373
 3374/*
 3375** CAPI3REF: Compile-Time Authorization Callbacks
 3376** METHOD: sqlite3
 3377** KEYWORDS: {authorizer callback}
 3378**
 3379** ^This routine registers an authorizer callback with a particular
 3380** [database connection], supplied in the first argument.
 3381** ^The authorizer callback is invoked as SQL statements are being compiled
 3382** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
 3383** [sqlite3_prepare_v3()], [sqlite3_prepare16()], [sqlite3_prepare16_v2()],
 3384** and [sqlite3_prepare16_v3()].  ^At various
 3385** points during the compilation process, as logic is being created
 3386** to perform various actions, the authorizer callback is invoked to
 3387** see if those actions are allowed.  ^The authorizer callback should
 3388** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
 3389** specific action but allow the SQL statement to continue to be
 3390** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
 3391** rejected with an error.  ^If the authorizer callback returns
 3392** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
 3393** then the [sqlite3_prepare_v2()] or equivalent call that triggered
 3394** the authorizer will fail with an error message.
 3395**
 3396** When the callback returns [SQLITE_OK], that means the operation
 3397** requested is ok.  ^When the callback returns [SQLITE_DENY], the
 3398** [sqlite3_prepare_v2()] or equivalent call that triggered the
 3399** authorizer will fail with an error message explaining that
 3400** access is denied.
 3401**
 3402** ^The first parameter to the authorizer callback is a copy of the third
 3403** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
 3404** to the callback is an integer [SQLITE_COPY | action code] that specifies
 3405** the particular action to be authorized. ^The third through sixth parameters
 3406** to the callback are either NULL pointers or zero-terminated strings
 3407** that contain additional details about the action to be authorized.
 3408** Applications must always be prepared to encounter a NULL pointer in any
 3409** of the third through the sixth parameters of the authorization callback.
 3410**
 3411** ^If the action code is [SQLITE_READ]
 3412** and the callback returns [SQLITE_IGNORE] then the
 3413** [prepared statement] statement is constructed to substitute
 3414** a NULL value in place of the table column that would have
 3415** been read if [SQLITE_OK] had been returned.  The [SQLITE_IGNORE]
 3416** return can be used to deny an untrusted user access to individual
 3417** columns of a table.
 3418** ^When a table is referenced by a [SELECT] but no column values are
 3419** extracted from that table (for example in a query like
 3420** "SELECT count(*) FROM tab") then the [SQLITE_READ] authorizer callback
 3421** is invoked once for that table with a column name that is an empty string.
 3422** ^If the action code is [SQLITE_DELETE] and the callback returns
 3423** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
 3424** [truncate optimization] is disabled and all rows are deleted individually.
 3425**
 3426** An authorizer is used when [sqlite3_prepare | preparing]
 3427** SQL statements from an untrusted source, to ensure that the SQL statements
 3428** do not try to access data they are not allowed to see, or that they do not
 3429** try to execute malicious statements that damage the database.  For
 3430** example, an application may allow a user to enter arbitrary
 3431** SQL queries for evaluation by a database.  But the application does
 3432** not want the user to be able to make arbitrary changes to the
 3433** database.  An authorizer could then be put in place while the
 3434** user-entered SQL is being [sqlite3_prepare | prepared] that
 3435** disallows everything except [SELECT] statements.
 3436**
 3437** Applications that need to process SQL from untrusted sources
 3438** might also consider lowering resource limits using [sqlite3_limit()]
 3439** and limiting database size using the [max_page_count] [PRAGMA]
 3440** in addition to using an authorizer.
 3441**
 3442** ^(Only a single authorizer can be in place on a database connection
 3443** at a time.  Each call to sqlite3_set_authorizer overrides the
 3444** previous call.)^  ^Disable the authorizer by installing a NULL callback.
 3445** The authorizer is disabled by default.
 3446**
 3447** The authorizer callback must not do anything that will modify
 3448** the database connection that invoked the authorizer callback.
 3449** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
 3450** database connections for the meaning of "modify" in this paragraph.
 3451**
 3452** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
 3453** statement might be re-prepared during [sqlite3_step()] due to a
 3454** schema change.  Hence, the application should ensure that the
 3455** correct authorizer callback remains in place during the [sqlite3_step()].
 3456**
 3457** ^Note that the authorizer callback is invoked only during
 3458** [sqlite3_prepare()] or its variants.  Authorization is not
 3459** performed during statement evaluation in [sqlite3_step()], unless
 3460** as stated in the previous paragraph, sqlite3_step() invokes
 3461** sqlite3_prepare_v2() to reprepare a statement after a schema change.
 3462*/
 3463SQLITE_API int sqlite3_set_authorizer(
 3464  sqlite3*,
 3465  int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
 3466  void *pUserData
 3467);
 3468
 3469/*
 3470** CAPI3REF: Authorizer Return Codes
 3471**
 3472** The [sqlite3_set_authorizer | authorizer callback function] must
 3473** return either [SQLITE_OK] or one of these two constants in order
 3474** to signal SQLite whether or not the action is permitted.  See the
 3475** [sqlite3_set_authorizer | authorizer documentation] for additional
 3476** information.
 3477**
 3478** Note that SQLITE_IGNORE is also used as a [conflict resolution mode]
 3479** returned from the [sqlite3_vtab_on_conflict()] interface.
 3480*/
 3481#define SQLITE_DENY   1   /* Abort the SQL statement with an error */
 3482#define SQLITE_IGNORE 2   /* Don't allow access, but don't generate an error */
 3483
 3484/*
 3485** CAPI3REF: Authorizer Action Codes
 3486**
 3487** The [sqlite3_set_authorizer()] interface registers a callback function
 3488** that is invoked to authorize certain SQL statement actions.  The
 3489** second parameter to the callback is an integer code that specifies
 3490** what action is being authorized.  These are the integer action codes that
 3491** the authorizer callback may be passed.
 3492**
 3493** These action code values signify what kind of operation is to be
 3494** authorized.  The 3rd and 4th parameters to the authorization
 3495** callback function will be parameters or NULL depending on which of these
 3496** codes is used as the second parameter.  ^(The 5th parameter to the
 3497** authorizer callback is the name of the database ("main", "temp",
 3498** etc.) if applicable.)^  ^The 6th parameter to the authorizer callback
 3499** is the name of the inner-most trigger or view that is responsible for
 3500** the access attempt or NULL if this access attempt is directly from
 3501** top-level SQL code.
 3502*/
 3503/******************************************* 3rd ************ 4th ***********/
 3504#define SQLITE_CREATE_INDEX          1   /* Index Name      Table Name      */
 3505#define SQLITE_CREATE_TABLE          2   /* Table Name      NULL            */
 3506#define SQLITE_CREATE_TEMP_INDEX     3   /* Index Name      Table Name      */
 3507#define SQLITE_CREATE_TEMP_TABLE     4   /* Table Name      NULL            */
 3508#define SQLITE_CREATE_TEMP_TRIGGER   5   /* Trigger Name    Table Name      */
 3509#define SQLITE_CREATE_TEMP_VIEW      6   /* View Name       NULL            */
 3510#define SQLITE_CREATE_TRIGGER        7   /* Trigger Name    Table Name      */
 3511#define SQLITE_CREATE_VIEW           8   /* View Name       NULL            */
 3512#define SQLITE_DELETE                9   /* Table Name      NULL            */
 3513#define SQLITE_DROP_INDEX           10   /* Index Name      Table Name      */
 3514#define SQLITE_DROP_TABLE           11   /* Table Name      NULL            */
 3515#define SQLITE_DROP_TEMP_INDEX      12   /* Index Name      Table Name      */
 3516#define SQLITE_DROP_TEMP_TABLE      13   /* Table Name      NULL            */
 3517#define SQLITE_DROP_TEMP_TRIGGER    14   /* Trigger Name    Table Name      */
 3518#define SQLITE_DROP_TEMP_VIEW       15   /* View Name       NULL            */
 3519#define SQLITE_DROP_TRIGGER         16   /* Trigger Name    Table Name      */
 3520#define SQLITE_DROP_VIEW            17   /* View Name       NULL            */
 3521#define SQLITE_INSERT               18   /* Table Name      NULL            */
 3522#define SQLITE_PRAGMA               19   /* Pragma Name     1st arg or NULL */
 3523#define SQLITE_READ                 20   /* Table Name      Column Name     */
 3524#define SQLITE_SELECT               21   /* NULL            NULL            */
 3525#define SQLITE_TRANSACTION          22   /* Operation       NULL            */
 3526#define SQLITE_UPDATE               23   /* Table Name      Column Name     */
 3527#define SQLITE_ATTACH               24   /* Filename        NULL            */
 3528#define SQLITE_DETACH               25   /* Database Name   NULL            */
 3529#define SQLITE_ALTER_TABLE          26   /* Database Name   Table Name      */
 3530#define SQLITE_REINDEX              27   /* Index Name      NULL            */
 3531#define SQLITE_ANALYZE              28   /* Table Name      NULL            */
 3532#define SQLITE_CREATE_VTABLE        29   /* Table Name      Module Name     */
 3533#define SQLITE_DROP_VTABLE          30   /* Table Name      Module Name     */
 3534#define SQLITE_FUNCTION             31   /* NULL            Function Name   */
 3535#define SQLITE_SAVEPOINT            32   /* Operation       Savepoint Name  */
 3536#define SQLITE_COPY                  0   /* No longer used */
 3537#define SQLITE_RECURSIVE            33   /* NULL            NULL            */
 3538
 3539/*
 3540** CAPI3REF: Deprecated Tracing And Profiling Functions
 3541** DEPRECATED
 3542**
 3543** These routines are deprecated. Use the [sqlite3_trace_v2()] interface
 3544** instead of the routines described here.
 3545**
 3546** These routines register callback functions that can be used for
 3547** tracing and profiling the execution of SQL statements.
 3548**
 3549** ^The callback function registered by sqlite3_trace() is invoked at
 3550** various times when an SQL statement is being run by [sqlite3_step()].
 3551** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
 3552** SQL statement text as the statement first begins executing.
 3553** ^(Additional sqlite3_trace() callbacks might occur
 3554** as each triggered subprogram is entered.  The callbacks for triggers
 3555** contain a UTF-8 SQL comment that identifies the trigger.)^
 3556**
 3557** The [SQLITE_TRACE_SIZE_LIMIT] compile-time option can be used to limit
 3558** the length of [bound parameter] expansion in the output of sqlite3_trace().
 3559**
 3560** ^The callback function registered by sqlite3_profile() is invoked
 3561** as each SQL statement finishes.  ^The profile callback contains
 3562** the original statement text and an estimate of wall-clock time
 3563** of how long that statement took to run.  ^The profile callback
 3564** time is in units of nanoseconds, however the current implementation
 3565** is only capable of millisecond resolution so the six least significant
 3566** digits in the time are meaningless.  Future versions of SQLite
 3567** might provide greater resolution on the profiler callback.  Invoking
 3568** either [sqlite3_trace()] or [sqlite3_trace_v2()] will cancel the
 3569** profile callback.
 3570*/
 3571SQLITE_API SQLITE_DEPRECATED void *sqlite3_trace(sqlite3*,
 3572   void(*xTrace)(void*,const char*), void*);
 3573SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*,
 3574   void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
 3575
 3576/*
 3577** CAPI3REF: SQL Trace Event Codes
 3578** KEYWORDS: SQLITE_TRACE
 3579**
 3580** These constants identify classes of events that can be monitored
 3581** using the [sqlite3_trace_v2()] tracing logic.  The M argument
 3582** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of
 3583** the following constants.  ^The first argument to the trace callback
 3584** is one of the following constants.
 3585**
 3586** New tracing constants may be added in future releases.
 3587**
 3588** ^A trace callback has four arguments: xCallback(T,C,P,X).
 3589** ^The T argument is one of the integer type codes above.
 3590** ^The C argument is a copy of the context pointer passed in as the
 3591** fourth argument to [sqlite3_trace_v2()].
 3592** The P and X arguments are pointers whose meanings depend on T.
 3593**
 3594** <dl>
 3595** [[SQLITE_TRACE_STMT]] <dt>SQLITE_TRACE_STMT</dt>
 3596** <dd>^An SQLITE_TRACE_STMT callback is invoked when a prepared statement
 3597** first begins running and possibly at other times during the
 3598** execution of the prepared statement, such as at the start of each
 3599** trigger subprogram. ^The P argument is a pointer to the
 3600** [prepared statement]. ^The X argument is a pointer to a string which
 3601** is the unexpanded SQL text of the prepared statement or an SQL comment
 3602** that indicates the invocation of a trigger.  ^The callback can compute
 3603** the same text that would have been returned by the legacy [sqlite3_trace()]
 3604** interface by using the X argument when X begins with "--" and invoking
 3605** [sqlite3_expanded_sql(P)] otherwise.
 3606**
 3607** [[SQLITE_TRACE_PROFILE]] <dt>SQLITE_TRACE_PROFILE</dt>
 3608** <dd>^An SQLITE_TRACE_PROFILE callback provides approximately the same
 3609** information as is provided by the [sqlite3_profile()] callback.
 3610** ^The P argument is a pointer to the [prepared statement] and the
 3611** X argument points to a 64-bit integer which is approximately
 3612** the number of nanoseconds that the prepared statement took to run.
 3613** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes.
 3614**
 3615** [[SQLITE_TRACE_ROW]] <dt>SQLITE_TRACE_ROW</dt>
 3616** <dd>^An SQLITE_TRACE_ROW callback is invoked whenever a prepared
 3617** statement generates a single row of result.
 3618** ^The P argument is a pointer to the [prepared statement] and the
 3619** X argument is unused.
 3620**
 3621** [[SQLITE_TRACE_CLOSE]] <dt>SQLITE_TRACE_CLOSE</dt>
 3622** <dd>^An SQLITE_TRACE_CLOSE callback is invoked when a database
 3623** connection closes.
 3624** ^The P argument is a pointer to the [database connection] object
 3625** and the X argument is unused.
 3626** </dl>
 3627*/
 3628#define SQLITE_TRACE_STMT       0x01
 3629#define SQLITE_TRACE_PROFILE    0x02
 3630#define SQLITE_TRACE_ROW        0x04
 3631#define SQLITE_TRACE_CLOSE      0x08
 3632
 3633/*
 3634** CAPI3REF: SQL Trace Hook
 3635** METHOD: sqlite3
 3636**
 3637** ^The sqlite3_trace_v2(D,M,X,P) interface registers a trace callback
 3638** function X against [database connection] D, using property mask M
 3639** and context pointer P.  ^If the X callback is
 3640** NULL or if the M mask is zero, then tracing is disabled.  The
 3641** M argument should be the bitwise OR-ed combination of
 3642** zero or more [SQLITE_TRACE] constants.
 3643**
 3644** ^Each call to either sqlite3_trace(D,X,P) or sqlite3_trace_v2(D,M,X,P)
 3645** overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or
 3646** sqlite3_trace_v2(D,M,X,P) for the [database connection] D.  Each
 3647** database connection may have at most one trace callback.
 3648**
 3649** ^The X callback is invoked whenever any of the events identified by
 3650** mask M occur.  ^The integer return value from the callback is currently
 3651** ignored, though this may change in future releases.  Callback
 3652** implementations should return zero to ensure future compatibility.
 3653**
 3654** ^A trace callback is invoked with four arguments: callback(T,C,P,X).
 3655** ^The T argument is one of the [SQLITE_TRACE]
 3656** constants to indicate why the callback was invoked.
 3657** ^The C argument is a copy of the context pointer.
 3658** The P and X arguments are pointers whose meanings depend on T.
 3659**
 3660** The sqlite3_trace_v2() interface is intended to replace the legacy
 3661** interfaces [sqlite3_trace()] and [sqlite3_profile()], both of which
 3662** are deprecated.
 3663*/
 3664SQLITE_API int sqlite3_trace_v2(
 3665  sqlite3*,
 3666  unsigned uMask,
 3667  int(*xCallback)(unsigned,void*,void*,void*),
 3668  void *pCtx
 3669);
 3670
 3671/*
 3672** CAPI3REF: Query Progress Callbacks
 3673** METHOD: sqlite3
 3674**
 3675** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
 3676** function X to be invoked periodically during long running calls to
 3677** [sqlite3_step()] and [sqlite3_prepare()] and similar for
 3678** database connection D.  An example use for this
 3679** interface is to keep a GUI updated during a large query.
 3680**
 3681** ^The parameter P is passed through as the only parameter to the
 3682** callback function X.  ^The parameter N is the approximate number of
 3683** [virtual machine instructions] that are evaluated between successive
 3684** invocations of the callback X.  ^If N is less than one then the progress
 3685** handler is disabled.
 3686**
 3687** ^Only a single progress handler may be defined at one time per
 3688** [database connection]; setting a new progress handler cancels the
 3689** old one.  ^Setting parameter X to NULL disables the progress handler.
 3690** ^The progress handler is also disabled by setting N to a value less
 3691** than 1.
 3692**
 3693** ^If the progress callback returns non-zero, the operation is
 3694** interrupted.  This feature can be used to implement a
 3695** "Cancel" button on a GUI progress dialog box.
 3696**
 3697** The progress handler callback must not do anything that will modify
 3698** the database connection that invoked the progress handler.
 3699** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
 3700** database connections for the meaning of "modify" in this paragraph.
 3701**
 3702** The progress handler callback would originally only be invoked from the
 3703** bytecode engine.  It still might be invoked during [sqlite3_prepare()]
 3704** and similar because those routines might force a reparse of the schema
 3705** which involves running the bytecode engine.  However, beginning with
 3706** SQLite version 3.41.0, the progress handler callback might also be
 3707** invoked directly from [sqlite3_prepare()] while analyzing and generating
 3708** code for complex queries.
 3709*/
 3710SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
 3711
 3712/*
 3713** CAPI3REF: Opening A New Database Connection
 3714** CONSTRUCTOR: sqlite3
 3715**
 3716** ^These routines open an SQLite database file as specified by the
 3717** filename argument. ^The filename argument is interpreted as UTF-8 for
 3718** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
 3719** order for sqlite3_open16(). ^(A [database connection] handle is usually
 3720** returned in *ppDb, even if an error occurs.  The only exception is that
 3721** if SQLite is unable to allocate memory to hold the [sqlite3] object,
 3722** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
 3723** object.)^ ^(If the database is opened (and/or created) successfully, then
 3724** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.)^ ^The
 3725** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
 3726** an English language description of the error following a failure of any
 3727** of the sqlite3_open() routines.
 3728**
 3729** ^The default encoding will be UTF-8 for databases created using
 3730** sqlite3_open() or sqlite3_open_v2().  ^The default encoding for databases
 3731** created using sqlite3_open16() will be UTF-16 in the native byte order.
 3732**
 3733** Whether or not an error occurs when it is opened, resources
 3734** associated with the [database connection] handle should be released by
 3735** passing it to [sqlite3_close()] when it is no longer required.
 3736**
 3737** The sqlite3_open_v2() interface works like sqlite3_open()
 3738** except that it accepts two additional parameters for additional control
 3739** over the new database connection.  ^(The flags parameter to
 3740** sqlite3_open_v2() must include, at a minimum, one of the following
 3741** three flag combinations:)^
 3742**
 3743** <dl>
 3744** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
 3745** <dd>The database is opened in read-only mode.  If the database does
 3746** not already exist, an error is returned.</dd>)^
 3747**
 3748** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
 3749** <dd>The database is opened for reading and writing if possible, or
 3750** reading only if the file is write protected by the operating
 3751** system.  In either case the database must already exist, otherwise
 3752** an error is returned.  For historical reasons, if opening in
 3753** read-write mode fails due to OS-level permissions, an attempt is
 3754** made to open it in read-only mode. [sqlite3_db_readonly()] can be
 3755** used to determine whether the database is actually
 3756** read-write.</dd>)^
 3757**
 3758** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
 3759** <dd>The database is opened for reading and writing, and is created if
 3760** it does not already exist. This is the behavior that is always used for
 3761** sqlite3_open() and sqlite3_open16().</dd>)^
 3762** </dl>
 3763**
 3764** In addition to the required flags, the following optional flags are
 3765** also supported:
 3766**
 3767** <dl>
 3768** ^(<dt>[SQLITE_OPEN_URI]</dt>
 3769** <dd>The filename can be interpreted as a URI if this flag is set.</dd>)^
 3770**
 3771** ^(<dt>[SQLITE_OPEN_MEMORY]</dt>
 3772** <dd>The database will be opened as an in-memory database.  The database
 3773** is named by the "filename" argument for the purposes of cache-sharing,
 3774** if shared cache mode is enabled, but the "filename" is otherwise ignored.
 3775** </dd>)^
 3776**
 3777** ^(<dt>[SQLITE_OPEN_NOMUTEX]</dt>
 3778** <dd>The new database connection will use the "multi-thread"
 3779** [threading mode].)^  This means that separate threads are allowed
 3780** to use SQLite at the same time, as long as each thread is using
 3781** a different [database connection].
 3782**
 3783** ^(<dt>[SQLITE_OPEN_FULLMUTEX]</dt>
 3784** <dd>The new database connection will use the "serialized"
 3785** [threading mode].)^  This means the multiple threads can safely
 3786** attempt to use the same database connection at the same time.
 3787** (Mutexes will block any actual concurrency, but in this mode
 3788** there is no harm in trying.)
 3789**
 3790** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
 3791** <dd>The database is opened with [shared cache] enabled, overriding
 3792** the default shared cache setting provided by
 3793** [sqlite3_enable_shared_cache()].)^
 3794** The [use of shared cache mode is discouraged] and hence shared cache
 3795** capabilities may be omitted from many builds of SQLite.  In such cases,
 3796** this option is a no-op.
 3797**
 3798** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
 3799** <dd>The database is opened with [shared cache] disabled, overriding
 3800** the default shared cache setting provided by
 3801** [sqlite3_enable_shared_cache()].)^
 3802**
 3803** [[OPEN_EXRESCODE]] ^(<dt>[SQLITE_OPEN_EXRESCODE]</dt>
 3804** <dd>The database connection comes up in "extended result code mode".
 3805** In other words, the database behaves as if
 3806** [sqlite3_extended_result_codes(db,1)] were called on the database
 3807** connection as soon as the connection is created. In addition to setting
 3808** the extended result code mode, this flag also causes [sqlite3_open_v2()]
 3809** to return an extended result code.</dd>
 3810**
 3811** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
 3812** <dd>The database filename is not allowed to contain a symbolic link</dd>
 3813** </dl>)^
 3814**
 3815** If the 3rd parameter to sqlite3_open_v2() is not one of the
 3816** required combinations shown above optionally combined with other
 3817** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
 3818** then the behavior is undefined.  Historic versions of SQLite
 3819** have silently ignored surplus bits in the flags parameter to
 3820** sqlite3_open_v2(), however that behavior might not be carried through
 3821** into future versions of SQLite and so applications should not rely
 3822** upon it.  Note in particular that the SQLITE_OPEN_EXCLUSIVE flag is a no-op
 3823** for sqlite3_open_v2().  The SQLITE_OPEN_EXCLUSIVE does *not* cause
 3824** the open to fail if the database already exists.  The SQLITE_OPEN_EXCLUSIVE
 3825** flag is intended for use by the [sqlite3_vfs|VFS interface] only, and not
 3826** by sqlite3_open_v2().
 3827**
 3828** ^The fourth parameter to sqlite3_open_v2() is the name of the
 3829** [sqlite3_vfs] object that defines the operating system interface that
 3830** the new database connection should use.  ^If the fourth parameter is
 3831** a NULL pointer then the default [sqlite3_vfs] object is used.
 3832**
 3833** ^If the filename is ":memory:", then a private, temporary in-memory database
 3834** is created for the connection.  ^This in-memory database will vanish when
 3835** the database connection is closed.  Future versions of SQLite might
 3836** make use of additional special filenames that begin with the ":" character.
 3837** It is recommended that when a database filename actually does begin with
 3838** a ":" character you should prefix the filename with a pathname such as
 3839** "./" to avoid ambiguity.
 3840**
 3841** ^If the filename is an empty string, then a private, temporary
 3842** on-disk database will be created.  ^This private database will be
 3843** automatically deleted as soon as the database connection is closed.
 3844**
 3845** [[URI filenames in sqlite3_open()]] <h3>URI Filenames</h3>
 3846**
 3847** ^If [URI filename] interpretation is enabled, and the filename argument
 3848** begins with "file:", then the filename is interpreted as a URI. ^URI
 3849** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
 3850** set in the third argument to sqlite3_open_v2(), or if it has
 3851** been enabled globally using the [SQLITE_CONFIG_URI] option with the
 3852** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
 3853** URI filename interpretation is turned off
 3854** by default, but future releases of SQLite might enable URI filename
 3855** interpretation by default.  See "[URI filenames]" for additional
 3856** information.
 3857**
 3858** URI filenames are parsed according to RFC 3986. ^If the URI contains an
 3859** authority, then it must be either an empty string or the string
 3860** "localhost". ^If the authority is not an empty string or "localhost", an
 3861** error is returned to the caller. ^The fragment component of a URI, if
 3862** present, is ignored.
 3863**
 3864** ^SQLite uses the path component of the URI as the name of the disk file
 3865** which contains the database. ^If the path begins with a '/' character,
 3866** then it is interpreted as an absolute path. ^If the path does not begin
 3867** with a '/' (meaning that the authority section is omitted from the URI)
 3868** then the path is interpreted as a relative path.
 3869** ^(On windows, the first component of an absolute path
 3870** is a drive specification (e.g. "C:").)^
 3871**
 3872** [[core URI query parameters]]
 3873** The query component of a URI may contain parameters that are interpreted
 3874** either by SQLite itself, or by a [VFS | custom VFS implementation].
 3875** SQLite and its built-in [VFSes] interpret the
 3876** following query parameters:
 3877**
 3878** <ul>
 3879**   <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of
 3880**     a VFS object that provides the operating system interface that should
 3881**     be used to access the database file on disk. ^If this option is set to
 3882**     an empty string the default VFS object is used. ^Specifying an unknown
 3883**     VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is
 3884**     present, then the VFS specified by the option takes precedence over
 3885**     the value passed as the fourth parameter to sqlite3_open_v2().
 3886**
 3887**   <li> <b>mode</b>: ^(The mode parameter may be set to either "ro", "rw",
 3888**     "rwc", or "memory". Attempting to set it to any other value is
 3889**     an error)^.
 3890**     ^If "ro" is specified, then the database is opened for read-only
 3891**     access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the
 3892**     third argument to sqlite3_open_v2(). ^If the mode option is set to
 3893**     "rw", then the database is opened for read-write (but not create)
 3894**     access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had
 3895**     been set. ^Value "rwc" is equivalent to setting both
 3896**     SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE.  ^If the mode option is
 3897**     set to "memory" then a pure [in-memory database] that never reads
 3898**     or writes from disk is used. ^It is an error to specify a value for
 3899**     the mode parameter that is less restrictive than that specified by
 3900**     the flags passed in the third parameter to sqlite3_open_v2().
 3901**
 3902**   <li> <b>cache</b>: ^The cache parameter may be set to either "shared" or
 3903**     "private". ^Setting it to "shared" is equivalent to setting the
 3904**     SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
 3905**     sqlite3_open_v2(). ^Setting the cache parameter to "private" is
 3906**     equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
 3907**     ^If sqlite3_open_v2() is used and the "cache" parameter is present in
 3908**     a URI filename, its value overrides any behavior requested by setting
 3909**     SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
 3910**
 3911**  <li> <b>psow</b>: ^The psow parameter indicates whether or not the
 3912**     [powersafe overwrite] property does or does not apply to the
 3913**     storage media on which the database file resides.
 3914**
 3915**  <li> <b>nolock</b>: ^The nolock parameter is a boolean query parameter
 3916**     which if set disables file locking in rollback journal modes.  This
 3917**     is useful for accessing a database on a filesystem that does not
 3918**     support locking.  Caution:  Database corruption might result if two
 3919**     or more processes write to the same database and any one of those
 3920**     processes uses nolock=1.
 3921**
 3922**  <li> <b>immutable</b>: ^The immutable parameter is a boolean query
 3923**     parameter that indicates that the database file is stored on
 3924**     read-only media.  ^When immutable is set, SQLite assumes that the
 3925**     database file cannot be changed, even by a process with higher
 3926**     privilege, and so the database is opened read-only and all locking
 3927**     and change detection is disabled.  Caution: Setting the immutable
 3928**     property on a database file that does in fact change can result
 3929**     in incorrect query results and/or [SQLITE_CORRUPT] errors.
 3930**     See also: [SQLITE_IOCAP_IMMUTABLE].
 3931**
 3932** </ul>
 3933**
 3934** ^Specifying an unknown parameter in the query component of a URI is not an
 3935** error.  Future versions of SQLite might understand additional query
 3936** parameters.  See "[query parameters with special meaning to SQLite]" for
 3937** additional information.
 3938**
 3939** [[URI filename examples]] <h3>URI filename examples</h3>
 3940**
 3941** <table border="1" align=center cellpadding=5>
 3942** <tr><th> URI filenames <th> Results
 3943** <tr><td> file:data.db <td>
 3944**          Open the file "data.db" in the current directory.
 3945** <tr><td> file:/home/fred/data.db<br>
 3946**          file:///home/fred/data.db <br>
 3947**          file://localhost/home/fred/data.db <br> <td>
 3948**          Open the database file "/home/fred/data.db".
 3949** <tr><td> file://darkstar/home/fred/data.db <td>
 3950**          An error. "darkstar" is not a recognized authority.
 3951** <tr><td style="white-space:nowrap">
 3952**          file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
 3953**     <td> Windows only: Open the file "data.db" on fred's desktop on drive
 3954**          C:. Note that the %20 escaping in this example is not strictly
 3955**          necessary - space characters can be used literally
 3956**          in URI filenames.
 3957** <tr><td> file:data.db?mode=ro&cache=private <td>
 3958**          Open file "data.db" in the current directory for read-only access.
 3959**          Regardless of whether or not shared-cache mode is enabled by
 3960**          default, use a private cache.
 3961** <tr><td> file:/home/fred/data.db?vfs=unix-dotfile <td>
 3962**          Open file "/home/fred/data.db". Use the special VFS "unix-dotfile"
 3963**          that uses dot-files in place of posix advisory locking.
 3964** <tr><td> file:data.db?mode=readonly <td>
 3965**          An error. "readonly" is not a valid option for the "mode" parameter.
 3966**          Use "ro" instead:  "file:data.db?mode=ro".
 3967** </table>
 3968**
 3969** ^URI hexadecimal escape sequences (%HH) are supported within the path and
 3970** query components of a URI. A hexadecimal escape sequence consists of a
 3971** percent sign - "%" - followed by exactly two hexadecimal digits
 3972** specifying an octet value. ^Before the path or query components of a
 3973** URI filename are interpreted, they are encoded using UTF-8 and all
 3974** hexadecimal escape sequences replaced by a single byte containing the
 3975** corresponding octet. If this process generates an invalid UTF-8 encoding,
 3976** the results are undefined.
 3977**
 3978** <b>Note to Windows users:</b>  The encoding used for the filename argument
 3979** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
 3980** codepage is currently defined.  Filenames containing international
 3981** characters must be converted to UTF-8 prior to passing them into
 3982** sqlite3_open() or sqlite3_open_v2().
 3983**
 3984** <b>Note to Windows Runtime users:</b>  The temporary directory must be set
 3985** prior to calling sqlite3_open() or sqlite3_open_v2().  Otherwise, various
 3986** features that require the use of temporary files may fail.
 3987**
 3988** See also: [sqlite3_temp_directory]
 3989*/
 3990SQLITE_API int sqlite3_open(
 3991  const char *filename,   /* Database filename (UTF-8) */
 3992  sqlite3 **ppDb          /* OUT: SQLite db handle */
 3993);
 3994SQLITE_API int sqlite3_open16(
 3995  const void *filename,   /* Database filename (UTF-16) */
 3996  sqlite3 **ppDb          /* OUT: SQLite db handle */
 3997);
 3998SQLITE_API int sqlite3_open_v2(
 3999  const char *filename,   /* Database filename (UTF-8) */
 4000  sqlite3 **ppDb,         /* OUT: SQLite db handle */
 4001  int flags,              /* Flags */
 4002  const char *zVfs        /* Name of VFS module to use */
 4003);
 4004
 4005/*
 4006** CAPI3REF: Obtain Values For URI Parameters
 4007**
 4008** These are utility routines, useful to [VFS|custom VFS implementations],
 4009** that check if a database file was a URI that contained a specific query
 4010** parameter, and if so obtains the value of that query parameter.
 4011**
 4012** The first parameter to these interfaces (hereafter referred to
 4013** as F) must be one of:
 4014** <ul>
 4015** <li> A database filename pointer created by the SQLite core and
 4016** passed into the xOpen() method of a VFS implementation, or
 4017** <li> A filename obtained from [sqlite3_db_filename()], or
 4018** <li> A new filename constructed using [sqlite3_create_filename()].
 4019** </ul>
 4020** If the F parameter is not one of the above, then the behavior is
 4021** undefined and probably undesirable.  Older versions of SQLite were
 4022** more tolerant of invalid F parameters than newer versions.
 4023**
 4024** If F is a suitable filename (as described in the previous paragraph)
 4025** and if P is the name of the query parameter, then
 4026** sqlite3_uri_parameter(F,P) returns the value of the P
 4027** parameter if it exists or a NULL pointer if P does not appear as a
 4028** query parameter on F.  If P is a query parameter of F and it
 4029** has no explicit value, then sqlite3_uri_parameter(F,P) returns
 4030** a pointer to an empty string.
 4031**
 4032** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean
 4033** parameter and returns true (1) or false (0) according to the value
 4034** of P.  The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the
 4035** value of query parameter P is one of "yes", "true", or "on" in any
 4036** case or if the value begins with a non-zero number.  The
 4037** sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of
 4038** query parameter P is one of "no", "false", or "off" in any case or
 4039** if the value begins with a numeric zero.  If P is not a query
 4040** parameter on F or if the value of P does not match any of the
 4041** above, then sqlite3_uri_boolean(F,P,B) returns (B!=0).
 4042**
 4043** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a
 4044** 64-bit signed integer and returns that integer, or D if P does not
 4045** exist.  If the value of P is something other than an integer, then
 4046** zero is returned.
 4047**
 4048** The sqlite3_uri_key(F,N) returns a pointer to the name (not
 4049** the value) of the N-th query parameter for filename F, or a NULL
 4050** pointer if N is less than zero or greater than the number of query
 4051** parameters minus 1.  The N value is zero-based so N should be 0 to obtain
 4052** the name of the first query parameter, 1 for the second parameter, and
 4053** so forth.
 4054**
 4055** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and
 4056** sqlite3_uri_boolean(F,P,B) returns B.  If F is not a NULL pointer and
 4057** is not a database file pathname pointer that the SQLite core passed
 4058** into the xOpen VFS method, then the behavior of this routine is undefined
 4059** and probably undesirable.
 4060**
 4061** Beginning with SQLite [version 3.31.0] ([dateof:3.31.0]) the input F
 4062** parameter can also be the name of a rollback journal file or WAL file
 4063** in addition to the main database file.  Prior to version 3.31.0, these
 4064** routines would only work if F was the name of the main database file.
 4065** When the F parameter is the name of the rollback journal or WAL file,
 4066** it has access to all the same query parameters as were found on the
 4067** main database file.
 4068**
 4069** See the [URI filename] documentation for additional information.
 4070*/
 4071SQLITE_API const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam);
 4072SQLITE_API int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault);
 4073SQLITE_API sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64);
 4074SQLITE_API const char *sqlite3_uri_key(sqlite3_filename z, int N);
 4075
 4076/*
 4077** CAPI3REF:  Translate filenames
 4078**
 4079** These routines are available to [VFS|custom VFS implementations] for
 4080** translating filenames between the main database file, the journal file,
 4081** and the WAL file.
 4082**
 4083** If F is the name of an sqlite database file, journal file, or WAL file
 4084** passed by the SQLite core into the VFS, then sqlite3_filename_database(F)
 4085** returns the name of the corresponding database file.
 4086**
 4087** If F is the name of an sqlite database file, journal file, or WAL file
 4088** passed by the SQLite core into the VFS, or if F is a database filename
 4089** obtained from [sqlite3_db_filename()], then sqlite3_filename_journal(F)
 4090** returns the name of the corresponding rollback journal file.
 4091**
 4092** If F is the name of an sqlite database file, journal file, or WAL file
 4093** that was passed by the SQLite core into the VFS, or if F is a database
 4094** filename obtained from [sqlite3_db_filename()], then
 4095** sqlite3_filename_wal(F) returns the name of the corresponding
 4096** WAL file.
 4097**
 4098** In all of the above, if F is not the name of a database, journal or WAL
 4099** filename passed into the VFS from the SQLite core and F is not the
 4100** return value from [sqlite3_db_filename()], then the result is
 4101** undefined and is likely a memory access violation.
 4102*/
 4103SQLITE_API const char *sqlite3_filename_database(sqlite3_filename);
 4104SQLITE_API const char *sqlite3_filename_journal(sqlite3_filename);
 4105SQLITE_API const char *sqlite3_filename_wal(sqlite3_filename);
 4106
 4107/*
 4108** CAPI3REF:  Database File Corresponding To A Journal
 4109**
 4110** ^If X is the name of a rollback or WAL-mode journal file that is
 4111** passed into the xOpen method of [sqlite3_vfs], then
 4112** sqlite3_database_file_object(X) returns a pointer to the [sqlite3_file]
 4113** object that represents the main database file.
 4114**
 4115** This routine is intended for use in custom [VFS] implementations
 4116** only.  It is not a general-purpose interface.
 4117** The argument sqlite3_file_object(X) must be a filename pointer that
 4118** has been passed into [sqlite3_vfs].xOpen method where the
 4119** flags parameter to xOpen contains one of the bits
 4120** [SQLITE_OPEN_MAIN_JOURNAL] or [SQLITE_OPEN_WAL].  Any other use
 4121** of this routine results in undefined and probably undesirable
 4122** behavior.
 4123*/
 4124SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*);
 4125
 4126/*
 4127** CAPI3REF: Create and Destroy VFS Filenames
 4128**
 4129** These interfaces are provided for use by [VFS shim] implementations and
 4130** are not useful outside of that context.
 4131**
 4132** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of
 4133** database filename D with corresponding journal file J and WAL file W and
 4134** an array P of N URI Key/Value pairs.  The result from
 4135** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that
 4136** is safe to pass to routines like:
 4137** <ul>
 4138** <li> [sqlite3_uri_parameter()],
 4139** <li> [sqlite3_uri_boolean()],
 4140** <li> [sqlite3_uri_int64()],
 4141** <li> [sqlite3_uri_key()],
 4142** <li> [sqlite3_filename_database()],
 4143** <li> [sqlite3_filename_journal()], or
 4144** <li> [sqlite3_filename_wal()].
 4145** </ul>
 4146** If a memory allocation error occurs, sqlite3_create_filename() might
 4147** return a NULL pointer.  The memory obtained from sqlite3_create_filename(X)
 4148** must be released by a corresponding call to sqlite3_free_filename(Y).
 4149**
 4150** The P parameter in sqlite3_create_filename(D,J,W,N,P) should be an array
 4151** of 2*N pointers to strings.  Each pair of pointers in this array corresponds
 4152** to a key and value for a query parameter.  The P parameter may be a NULL
 4153** pointer if N is zero.  None of the 2*N pointers in the P array may be
 4154** NULL pointers and key pointers should not be empty strings.
 4155** None of the D, J, or W parameters to sqlite3_create_filename(D,J,W,N,P) may
 4156** be NULL pointers, though they can be empty strings.
 4157**
 4158** The sqlite3_free_filename(Y) routine releases a memory allocation
 4159** previously obtained from sqlite3_create_filename().  Invoking
 4160** sqlite3_free_filename(Y) where Y is a NULL pointer is a harmless no-op.
 4161**
 4162** If the Y parameter to sqlite3_free_filename(Y) is anything other
 4163** than a NULL pointer or a pointer previously acquired from
 4164** sqlite3_create_filename(), then bad things such as heap
 4165** corruption or segfaults may occur. The value Y should not be
 4166** used again after sqlite3_free_filename(Y) has been called.  This means
 4167** that if the [sqlite3_vfs.xOpen()] method of a VFS has been called using Y,
 4168** then the corresponding [sqlite3_module.xClose() method should also be
 4169** invoked prior to calling sqlite3_free_filename(Y).
 4170*/
 4171SQLITE_API sqlite3_filename sqlite3_create_filename(
 4172  const char *zDatabase,
 4173  const char *zJournal,
 4174  const char *zWal,
 4175  int nParam,
 4176  const char **azParam
 4177);
 4178SQLITE_API void sqlite3_free_filename(sqlite3_filename);
 4179
 4180/*
 4181** CAPI3REF: Error Codes And Messages
 4182** METHOD: sqlite3
 4183**
 4184** ^If the most recent sqlite3_* API call associated with
 4185** [database connection] D failed, then the sqlite3_errcode(D) interface
 4186** returns the numeric [result code] or [extended result code] for that
 4187** API call.
 4188** ^The sqlite3_extended_errcode()
 4189** interface is the same except that it always returns the
 4190** [extended result code] even when extended result codes are
 4191** disabled.
 4192**
 4193** The values returned by sqlite3_errcode() and/or
 4194** sqlite3_extended_errcode() might change with each API call.
 4195** Except, there are some interfaces that are guaranteed to never
 4196** change the value of the error code.  The error-code preserving
 4197** interfaces include the following:
 4198**
 4199** <ul>
 4200** <li> sqlite3_errcode()
 4201** <li> sqlite3_extended_errcode()
 4202** <li> sqlite3_errmsg()
 4203** <li> sqlite3_errmsg16()
 4204** <li> sqlite3_error_offset()
 4205** <li> sqlite3_db_handle()
 4206** </ul>
 4207**
 4208** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
 4209** text that describes the error, as either UTF-8 or UTF-16 respectively,
 4210** or NULL if no error message is available.
 4211** (See how SQLite handles [invalid UTF] for exceptions to this rule.)
 4212** ^(Memory to hold the error message string is managed internally.
 4213** The application does not need to worry about freeing the result.
 4214** However, the error string might be overwritten or deallocated by
 4215** subsequent calls to other SQLite interface functions.)^
 4216**
 4217** ^The sqlite3_errstr(E) interface returns the English-language text
 4218** that describes the [result code] E, as UTF-8, or NULL if E is not a
 4219** result code for which a text error message is available.
 4220** ^(Memory to hold the error message string is managed internally
 4221** and must not be freed by the application)^.
 4222**
 4223** ^If the most recent error references a specific token in the input
 4224** SQL, the sqlite3_error_offset() interface returns the byte offset
 4225** of the start of that token.  ^The byte offset returned by
 4226** sqlite3_error_offset() assumes that the input SQL is UTF-8.
 4227** ^If the most recent error does not reference a specific token in the input
 4228** SQL, then the sqlite3_error_offset() function returns -1.
 4229**
 4230** When the serialized [threading mode] is in use, it might be the
 4231** case that a second error occurs on a separate thread in between
 4232** the time of the first error and the call to these interfaces.
 4233** When that happens, the second error will be reported since these
 4234** interfaces always report the most recent result.  To avoid
 4235** this, each thread can obtain exclusive use of the [database connection] D
 4236** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning
 4237** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after
 4238** all calls to the interfaces listed here are completed.
 4239**
 4240** If an interface fails with SQLITE_MISUSE, that means the interface
 4241** was invoked incorrectly by the application.  In that case, the
 4242** error code and message may or may not be set.
 4243*/
 4244SQLITE_API int sqlite3_errcode(sqlite3 *db);
 4245SQLITE_API int sqlite3_extended_errcode(sqlite3 *db);
 4246SQLITE_API const char *sqlite3_errmsg(sqlite3*);
 4247SQLITE_API const void *sqlite3_errmsg16(sqlite3*);
 4248SQLITE_API const char *sqlite3_errstr(int);
 4249SQLITE_API int sqlite3_error_offset(sqlite3 *db);
 4250
 4251/*
 4252** CAPI3REF: Set Error Code And Message
 4253** METHOD: sqlite3
 4254**
 4255** Set the error code of the database handle passed as the first argument
 4256** to errcode, and the error message to a copy of nul-terminated string
 4257** zErrMsg. If zErrMsg is passed NULL, then the error message is set to
 4258** the default message associated with the supplied error code.  Subsequent
 4259** calls to [sqlite3_errcode()] and [sqlite3_errmsg()] and similar will
 4260** return the values set by this routine in place of what was previously
 4261** set by SQLite itself.
 4262**
 4263** This function returns SQLITE_OK if the error code and error message are
 4264** successfully set, SQLITE_NOMEM if an OOM occurs, and SQLITE_MISUSE if
 4265** the database handle is NULL or invalid.
 4266**
 4267** The error code and message set by this routine remains in effect until
 4268** they are changed, either by another call to this routine or until they are
 4269** changed to by SQLite itself to reflect the result of some subsquent
 4270** API call.
 4271**
 4272** This function is intended for use by SQLite extensions or wrappers.  The
 4273** idea is that an extension or wrapper can use this routine to set error
 4274** messages and error codes and thus behave more like a core SQLite
 4275** feature from the point of view of an application.
 4276*/
 4277SQLITE_API int sqlite3_set_errmsg(sqlite3 *db, int errcode, const char *zErrMsg);
 4278
 4279/*
 4280** CAPI3REF: Prepared Statement Object
 4281** KEYWORDS: {prepared statement} {prepared statements}
 4282**
 4283** An instance of this object represents a single SQL statement that
 4284** has been compiled into binary form and is ready to be evaluated.
 4285**
 4286** Think of each SQL statement as a separate computer program.  The
 4287** original SQL text is source code.  A prepared statement object
 4288** is the compiled object code.  All SQL must be converted into a
 4289** prepared statement before it can be run.
 4290**
 4291** The life-cycle of a prepared statement object usually goes like this:
 4292**
 4293** <ol>
 4294** <li> Create the prepared statement object using [sqlite3_prepare_v2()].
 4295** <li> Bind values to [parameters] using the sqlite3_bind_*()
 4296**      interfaces.
 4297** <li> Run the SQL by calling [sqlite3_step()] one or more times.
 4298** <li> Reset the prepared statement using [sqlite3_reset()] then go back
 4299**      to step 2.  Do this zero or more times.
 4300** <li> Destroy the object using [sqlite3_finalize()].
 4301** </ol>
 4302*/
 4303typedef struct sqlite3_stmt sqlite3_stmt;
 4304
 4305/*
 4306** CAPI3REF: Run-time Limits
 4307** METHOD: sqlite3
 4308**
 4309** ^(This interface allows the size of various constructs to be limited
 4310** on a connection by connection basis.  The first parameter is the
 4311** [database connection] whose limit is to be set or queried.  The
 4312** second parameter is one of the [limit categories] that define a
 4313** class of constructs to be size limited.  The third parameter is the
 4314** new limit for that construct.)^
 4315**
 4316** ^If the new limit is a negative number, the limit is unchanged.
 4317** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a
 4318** [limits | hard upper bound]
 4319** set at compile-time by a C preprocessor macro called
 4320** [limits | SQLITE_MAX_<i>NAME</i>].
 4321** (The "_LIMIT_" in the name is changed to "_MAX_".))^
 4322** ^Attempts to increase a limit above its hard upper bound are
 4323** silently truncated to the hard upper bound.
 4324**
 4325** ^Regardless of whether or not the limit was changed, the
 4326** [sqlite3_limit()] interface returns the prior value of the limit.
 4327** ^Hence, to find the current value of a limit without changing it,
 4328** simply invoke this interface with the third parameter set to -1.
 4329**
 4330** Run-time limits are intended for use in applications that manage
 4331** both their own internal database and also databases that are controlled
 4332** by untrusted external sources.  An example application might be a
 4333** web browser that has its own databases for storing history and
 4334** separate databases controlled by JavaScript applications downloaded
 4335** off the Internet.  The internal databases can be given the
 4336** large, default limits.  Databases managed by external sources can
 4337** be given much smaller limits designed to prevent a denial of service
 4338** attack.  Developers might also want to use the [sqlite3_set_authorizer()]
 4339** interface to further control untrusted SQL.  The size of the database
 4340** created by an untrusted script can be contained using the
 4341** [max_page_count] [PRAGMA].
 4342**
 4343** New run-time limit categories may be added in future releases.
 4344*/
 4345SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
 4346
 4347/*
 4348** CAPI3REF: Run-Time Limit Categories
 4349** KEYWORDS: {limit category} {*limit categories}
 4350**
 4351** These constants define various performance limits
 4352** that can be lowered at run-time using [sqlite3_limit()].
 4353** A concise description of these limits follows, and additional information
 4354** is available at [limits | Limits in SQLite].
 4355**
 4356** <dl>
 4357** [[SQLITE_LIMIT_LENGTH]] ^(<dt>SQLITE_LIMIT_LENGTH</dt>
 4358** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^
 4359**
 4360** [[SQLITE_LIMIT_SQL_LENGTH]] ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt>
 4361** <dd>The maximum length of an SQL statement, in bytes.</dd>)^
 4362**
 4363** [[SQLITE_LIMIT_COLUMN]] ^(<dt>SQLITE_LIMIT_COLUMN</dt>
 4364** <dd>The maximum number of columns in a table definition or in the
 4365** result set of a [SELECT] or the maximum number of columns in an index
 4366** or in an ORDER BY or GROUP BY clause.</dd>)^
 4367**
 4368** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(<dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
 4369** <dd>The maximum depth of the parse tree on any expression.</dd>)^
 4370**
 4371** [[SQLITE_LIMIT_PARSER_DEPTH]] ^(<dt>SQLITE_LIMIT_PARSER_DEPTH</dt>
 4372** <dd>The maximum depth of the LALR(1) parser stack used to analyze
 4373** input SQL statements.</dd>)^
 4374**
 4375** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
 4376** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^
 4377**
 4378** [[SQLITE_LIMIT_VDBE_OP]] ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
 4379** <dd>The maximum number of instructions in a virtual machine program
 4380** used to implement an SQL statement.  If [sqlite3_prepare_v2()] or
 4381** the equivalent tries to allocate space for more than this many opcodes
 4382** in a single prepared statement, an SQLITE_NOMEM error is returned.</dd>)^
 4383**
 4384** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
 4385** <dd>The maximum number of arguments on a function.</dd>)^
 4386**
 4387** [[SQLITE_LIMIT_ATTACHED]] ^(<dt>SQLITE_LIMIT_ATTACHED</dt>
 4388** <dd>The maximum number of [ATTACH | attached databases].)^</dd>
 4389**
 4390** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]]
 4391** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
 4392** <dd>The maximum length of the pattern argument to the [LIKE] or
 4393** [GLOB] operators.</dd>)^
 4394**
 4395** [[SQLITE_LIMIT_VARIABLE_NUMBER]]
 4396** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
 4397** <dd>The maximum index number of any [parameter] in an SQL statement.)^
 4398**
 4399** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
 4400** <dd>The maximum depth of recursion for triggers.</dd>)^
 4401**
 4402** [[SQLITE_LIMIT_WORKER_THREADS]] ^(<dt>SQLITE_LIMIT_WORKER_THREADS</dt>
 4403** <dd>The maximum number of auxiliary worker threads that a single
 4404** [prepared statement] may start.</dd>)^
 4405** </dl>
 4406*/
 4407#define SQLITE_LIMIT_LENGTH                    0
 4408#define SQLITE_LIMIT_SQL_LENGTH                1
 4409#define SQLITE_LIMIT_COLUMN                    2
 4410#define SQLITE_LIMIT_EXPR_DEPTH                3
 4411#define SQLITE_LIMIT_COMPOUND_SELECT           4
 4412#define SQLITE_LIMIT_VDBE_OP                   5
 4413#define SQLITE_LIMIT_FUNCTION_ARG              6
 4414#define SQLITE_LIMIT_ATTACHED                  7
 4415#define SQLITE_LIMIT_LIKE_PATTERN_LENGTH       8
 4416#define SQLITE_LIMIT_VARIABLE_NUMBER           9
 4417#define SQLITE_LIMIT_TRIGGER_DEPTH            10
 4418#define SQLITE_LIMIT_WORKER_THREADS           11
 4419#define SQLITE_LIMIT_PARSER_DEPTH             12
 4420
 4421/*
 4422** CAPI3REF: Prepare Flags
 4423**
 4424** These constants define various flags that can be passed into the
 4425** "prepFlags" parameter of the [sqlite3_prepare_v3()] and
 4426** [sqlite3_prepare16_v3()] interfaces.
 4427**
 4428** New flags may be added in future releases of SQLite.
 4429**
 4430** <dl>
 4431** [[SQLITE_PREPARE_PERSISTENT]] ^(<dt>SQLITE_PREPARE_PERSISTENT</dt>
 4432** <dd>The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner
 4433** that the prepared statement will be retained for a long time and
 4434** probably reused many times.)^ ^Without this flag, [sqlite3_prepare_v3()]
 4435** and [sqlite3_prepare16_v3()] assume that the prepared statement will
 4436** be used just once or at most a few times and then destroyed using
 4437** [sqlite3_finalize()] relatively soon. The current implementation acts
 4438** on this hint by avoiding the use of [lookaside memory] so as not to
 4439** deplete the limited store of lookaside memory. Future versions of
 4440** SQLite may act on this hint differently.
 4441**
 4442** [[SQLITE_PREPARE_NORMALIZE]] <dt>SQLITE_PREPARE_NORMALIZE</dt>
 4443** <dd>The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used
 4444** to be required for any prepared statement that wanted to use the
 4445** [sqlite3_normalized_sql()] interface.  However, the
 4446** [sqlite3_normalized_sql()] interface is now available to all
 4447** prepared statements, regardless of whether or not they use this
 4448** flag.
 4449**
 4450** [[SQLITE_PREPARE_NO_VTAB]] <dt>SQLITE_PREPARE_NO_VTAB</dt>
 4451** <dd>The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler
 4452** to return an error (error code SQLITE_ERROR) if the statement uses
 4453** any virtual tables.
 4454**
 4455** [[SQLITE_PREPARE_DONT_LOG]] <dt>SQLITE_PREPARE_DONT_LOG</dt>
 4456** <dd>The SQLITE_PREPARE_DONT_LOG flag prevents SQL compiler
 4457** errors from being sent to the error log defined by
 4458** [SQLITE_CONFIG_LOG].  This can be used, for example, to do test
 4459** compiles to see if some SQL syntax is well-formed, without generating
 4460** messages on the global error log when it is not.  If the test compile
 4461** fails, the sqlite3_prepare_v3() call returns the same error indications
 4462** with or without this flag; it just omits the call to [sqlite3_log()] that
 4463** logs the error.
 4464**
 4465** [[SQLITE_PREPARE_FROM_DDL]] <dt>SQLITE_PREPARE_FROM_DDL</dt>
 4466** <dd>The SQLITE_PREPARE_FROM_DDL flag causes the SQL compiler to enforce
 4467** security constraints that would otherwise only be enforced when parsing
 4468** the database schema.  In other words, the SQLITE_PREPARE_FROM_DDL flag
 4469** causes the SQL compiler to treat the SQL statement being prepared as if
 4470** it had come from an attacker.  When SQLITE_PREPARE_FROM_DDL is used and
 4471** [SQLITE_DBCONFIG_TRUSTED_SCHEMA] is off, SQL functions may only be called
 4472** if they are tagged with [SQLITE_INNOCUOUS] and virtual tables may only
 4473** be used if they are tagged with [SQLITE_VTAB_INNOCUOUS].  Best practice
 4474** is to use the SQLITE_PREPARE_FROM_DDL option when preparing any SQL that
 4475** is derived from parts of the database schema. In particular, virtual
 4476** table implementations that run SQL statements that are derived from
 4477** arguments to their CREATE VIRTUAL TABLE statement should always use
 4478** [sqlite3_prepare_v3()] and set the SQLITE_PREPARE_FROM_DDL flag to
 4479** prevent bypass of the [SQLITE_DBCONFIG_TRUSTED_SCHEMA] security checks.
 4480** </dl>
 4481*/
 4482#define SQLITE_PREPARE_PERSISTENT              0x01
 4483#define SQLITE_PREPARE_NORMALIZE               0x02
 4484#define SQLITE_PREPARE_NO_VTAB                 0x04
 4485#define SQLITE_PREPARE_DONT_LOG                0x10
 4486#define SQLITE_PREPARE_FROM_DDL                0x20
 4487
 4488/*
 4489** CAPI3REF: Compiling An SQL Statement
 4490** KEYWORDS: {SQL statement compiler}
 4491** METHOD: sqlite3
 4492** CONSTRUCTOR: sqlite3_stmt
 4493**
 4494** To execute an SQL statement, it must first be compiled into a byte-code
 4495** program using one of these routines.  Or, in other words, these routines
 4496** are constructors for the [prepared statement] object.
 4497**
 4498** The preferred routine to use is [sqlite3_prepare_v2()].  The
 4499** [sqlite3_prepare()] interface is legacy and should be avoided.
 4500** [sqlite3_prepare_v3()] has an extra
 4501** [SQLITE_PREPARE_FROM_DDL|"prepFlags" option] that is sometimes
 4502** needed for special purpose or to pass along security restrictions.
 4503**
 4504** The use of the UTF-8 interfaces is preferred, as SQLite currently
 4505** does all parsing using UTF-8.  The UTF-16 interfaces are provided
 4506** as a convenience.  The UTF-16 interfaces work by converting the
 4507** input text into UTF-8, then invoking the corresponding UTF-8 interface.
 4508**
 4509** The first argument, "db", is a [database connection] obtained from a
 4510** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or
 4511** [sqlite3_open16()].  The database connection must not have been closed.
 4512**
 4513** The second argument, "zSql", is the statement to be compiled, encoded
 4514** as either UTF-8 or UTF-16.  The sqlite3_prepare(), sqlite3_prepare_v2(),
 4515** and sqlite3_prepare_v3()
 4516** interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(),
 4517** and sqlite3_prepare16_v3() use UTF-16.
 4518**
 4519** ^If the nByte argument is negative, then zSql is read up to the
 4520** first zero terminator. ^If nByte is positive, then it is the maximum
 4521** number of bytes read from zSql.  When nByte is positive, zSql is read
 4522** up to the first zero terminator or until the nByte bytes have been read,
 4523** whichever comes first.  ^If nByte is zero, then no prepared
 4524** statement is generated.
 4525** If the caller knows that the supplied string is nul-terminated, then
 4526** there is a small performance advantage to passing an nByte parameter that
 4527** is the number of bytes in the input string <i>including</i>
 4528** the nul-terminator.
 4529** Note that nByte measures the length of the input in bytes, not
 4530** characters, even for the UTF-16 interfaces.
 4531**
 4532** ^If pzTail is not NULL then *pzTail is made to point to the first byte
 4533** past the end of the first SQL statement in zSql.  These routines only
 4534** compile the first statement in zSql, so *pzTail is left pointing to
 4535** what remains uncompiled.
 4536**
 4537** ^*ppStmt is left pointing to a compiled [prepared statement] that can be
 4538** executed using [sqlite3_step()].  ^If there is an error, *ppStmt is set
 4539** to NULL.  ^If the input text contains no SQL (if the input is an empty
 4540** string or a comment) then *ppStmt is set to NULL.
 4541** The calling procedure is responsible for deleting the compiled
 4542** SQL statement using [sqlite3_finalize()] after it has finished with it.
 4543** ppStmt may not be NULL.
 4544**
 4545** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK];
 4546** otherwise an [error code] is returned.
 4547**
 4548** The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(),
 4549** and sqlite3_prepare16_v3() interfaces are recommended for all new programs.
 4550** The older interfaces (sqlite3_prepare() and sqlite3_prepare16())
 4551** are retained for backwards compatibility, but their use is discouraged.
 4552** ^In the "vX" interfaces, the prepared statement
 4553** that is returned (the [sqlite3_stmt] object) contains a copy of the
 4554** original SQL text. This causes the [sqlite3_step()] interface to
 4555** behave differently in three ways:
 4556**
 4557** <ol>
 4558** <li>
 4559** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it
 4560** always used to do, [sqlite3_step()] will automatically recompile the SQL
 4561** statement and try to run it again. As many as [SQLITE_MAX_SCHEMA_RETRY]
 4562** retries will occur before sqlite3_step() gives up and returns an error.
 4563** </li>
 4564**
 4565** <li>
 4566** ^When an error occurs, [sqlite3_step()] will return one of the detailed
 4567** [error codes] or [extended error codes].  ^The legacy behavior was that
 4568** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code
 4569** and the application would have to make a second call to [sqlite3_reset()]
 4570** in order to find the underlying cause of the problem. With the "v2" prepare
 4571** interfaces, the underlying reason for the error is returned immediately.
 4572** </li>
 4573**
 4574** <li>
 4575** ^If the specific value bound to a [parameter | host parameter] in the
 4576** WHERE clause might influence the choice of query plan for a statement,
 4577** then the statement will be automatically recompiled, as if there had been
 4578** a schema change, on the first [sqlite3_step()] call following any change
 4579** to the [sqlite3_bind_text | bindings] of that [parameter].
 4580** ^The specific value of a WHERE-clause [parameter] might influence the
 4581** choice of query plan if the parameter is the left-hand side of a [LIKE]
 4582** or [GLOB] operator or if the parameter is compared to an indexed column
 4583** and the [SQLITE_ENABLE_STAT4] compile-time option is enabled.
 4584** </li>
 4585** </ol>
 4586**
 4587** <p>^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having
 4588** the extra prepFlags parameter, which is a bit array consisting of zero or
 4589** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags.  ^The
 4590** sqlite3_prepare_v2() interface works exactly the same as
 4591** sqlite3_prepare_v3() with a zero prepFlags parameter.
 4592*/
 4593SQLITE_API int sqlite3_prepare(
 4594  sqlite3 *db,            /* Database handle */
 4595  const char *zSql,       /* SQL statement, UTF-8 encoded */
 4596  int nByte,              /* Maximum length of zSql in bytes. */
 4597  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 4598  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
 4599);
 4600SQLITE_API int sqlite3_prepare_v2(
 4601  sqlite3 *db,            /* Database handle */
 4602  const char *zSql,       /* SQL statement, UTF-8 encoded */
 4603  int nByte,              /* Maximum length of zSql in bytes. */
 4604  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 4605  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
 4606);
 4607SQLITE_API int sqlite3_prepare_v3(
 4608  sqlite3 *db,            /* Database handle */
 4609  const char *zSql,       /* SQL statement, UTF-8 encoded */
 4610  int nByte,              /* Maximum length of zSql in bytes. */
 4611  unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
 4612  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 4613  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
 4614);
 4615SQLITE_API int sqlite3_prepare16(
 4616  sqlite3 *db,            /* Database handle */
 4617  const void *zSql,       /* SQL statement, UTF-16 encoded */
 4618  int nByte,              /* Maximum length of zSql in bytes. */
 4619  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 4620  const void **pzTail     /* OUT: Pointer to unused portion of zSql */
 4621);
 4622SQLITE_API int sqlite3_prepare16_v2(
 4623  sqlite3 *db,            /* Database handle */
 4624  const void *zSql,       /* SQL statement, UTF-16 encoded */
 4625  int nByte,              /* Maximum length of zSql in bytes. */
 4626  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 4627  const void **pzTail     /* OUT: Pointer to unused portion of zSql */
 4628);
 4629SQLITE_API int sqlite3_prepare16_v3(
 4630  sqlite3 *db,            /* Database handle */
 4631  const void *zSql,       /* SQL statement, UTF-16 encoded */
 4632  int nByte,              /* Maximum length of zSql in bytes. */
 4633  unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
 4634  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
 4635  const void **pzTail     /* OUT: Pointer to unused portion of zSql */
 4636);
 4637
 4638/*
 4639** CAPI3REF: Retrieving Statement SQL
 4640** METHOD: sqlite3_stmt
 4641**
 4642** ^The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8
 4643** SQL text used to create [prepared statement] P if P was
 4644** created by [sqlite3_prepare_v2()], [sqlite3_prepare_v3()],
 4645** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()].
 4646** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8
 4647** string containing the SQL text of prepared statement P with
 4648** [bound parameters] expanded.
 4649** ^The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8
 4650** string containing the normalized SQL text of prepared statement P.  The
 4651** semantics used to normalize a SQL statement are unspecified and subject
 4652** to change.  At a minimum, literal values will be replaced with suitable
 4653** placeholders.
 4654**
 4655** ^(For example, if a prepared statement is created using the SQL
 4656** text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345
 4657** and parameter :xyz is unbound, then sqlite3_sql() will return
 4658** the original string, "SELECT $abc,:xyz" but sqlite3_expanded_sql()
 4659** will return "SELECT 2345,NULL".)^
 4660**
 4661** ^The sqlite3_expanded_sql() interface returns NULL if insufficient memory
 4662** is available to hold the result, or if the result would exceed the
 4663** maximum string length determined by the [SQLITE_LIMIT_LENGTH].
 4664**
 4665** ^The [SQLITE_TRACE_SIZE_LIMIT] compile-time option limits the size of
 4666** bound parameter expansions.  ^The [SQLITE_OMIT_TRACE] compile-time
 4667** option causes sqlite3_expanded_sql() to always return NULL.
 4668**
 4669** ^The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P)
 4670** are managed by SQLite and are automatically freed when the prepared
 4671** statement is finalized.
 4672** ^The string returned by sqlite3_expanded_sql(P), on the other hand,
 4673** is obtained from [sqlite3_malloc()] and must be freed by the application
 4674** by passing it to [sqlite3_free()].
 4675**
 4676** ^The sqlite3_normalized_sql() interface is only available if
 4677** the [SQLITE_ENABLE_NORMALIZE] compile-time option is defined.
 4678*/
 4679SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
 4680SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
 4681#ifdef SQLITE_ENABLE_NORMALIZE
 4682SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
 4683#endif
 4684
 4685/*
 4686** CAPI3REF: Determine If An SQL Statement Writes The Database
 4687** METHOD: sqlite3_stmt
 4688**
 4689** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
 4690** and only if the [prepared statement] X makes no direct changes to
 4691** the content of the database file.
 4692**
 4693** Note that [application-defined SQL functions] or
 4694** [virtual tables] might change the database indirectly as a side effect.
 4695** ^(For example, if an application defines a function "eval()" that
 4696** calls [sqlite3_exec()], then the following SQL statement would
 4697** change the database file through side-effects:
 4698**
 4699** <blockquote><pre>
 4700**    SELECT eval('DELETE FROM t1') FROM t2;
 4701** </pre></blockquote>
 4702**
 4703** But because the [SELECT] statement does not change the database file
 4704** directly, sqlite3_stmt_readonly() would still return true.)^
 4705**
 4706** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
 4707** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
 4708** since the statements themselves do not actually modify the database but
 4709** rather they control the timing of when other statements modify the
 4710** database.  ^The [ATTACH] and [DETACH] statements also cause
 4711** sqlite3_stmt_readonly() to return true since, while those statements
 4712** change the configuration of a database connection, they do not make
 4713** changes to the content of the database files on disk.
 4714** ^The sqlite3_stmt_readonly() interface returns true for [BEGIN] since
 4715** [BEGIN] merely sets internal flags, but the [BEGIN|BEGIN IMMEDIATE] and
 4716** [BEGIN|BEGIN EXCLUSIVE] commands do touch the database and so
 4717** sqlite3_stmt_readonly() returns false for those commands.
 4718**
 4719** ^This routine returns false if there is any possibility that the
 4720** statement might change the database file.  ^A false return does
 4721** not guarantee that the statement will change the database file.
 4722** ^For example, an UPDATE statement might have a WHERE clause that
 4723** makes it a no-op, but the sqlite3_stmt_readonly() result would still
 4724** be false.  ^Similarly, a CREATE TABLE IF NOT EXISTS statement is a
 4725** read-only no-op if the table already exists, but
 4726** sqlite3_stmt_readonly() still returns false for such a statement.
 4727**
 4728** ^If prepared statement X is an [EXPLAIN] or [EXPLAIN QUERY PLAN]
 4729** statement, then sqlite3_stmt_readonly(X) returns the same value as
 4730** if the EXPLAIN or EXPLAIN QUERY PLAN prefix were omitted.
 4731*/
 4732SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
 4733
 4734/*
 4735** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement
 4736** METHOD: sqlite3_stmt
 4737**
 4738** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the
 4739** prepared statement S is an EXPLAIN statement, or 2 if the
 4740** statement S is an EXPLAIN QUERY PLAN.
 4741** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is
 4742** an ordinary statement or a NULL pointer.
 4743*/
 4744SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
 4745
 4746/*
 4747** CAPI3REF: Change The EXPLAIN Setting For A Prepared Statement
 4748** METHOD: sqlite3_stmt
 4749**
 4750** The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN
 4751** setting for [prepared statement] S.  If E is zero, then S becomes
 4752** a normal prepared statement.  If E is 1, then S behaves as if
 4753** its SQL text began with "[EXPLAIN]".  If E is 2, then S behaves as if
 4754** its SQL text began with "[EXPLAIN QUERY PLAN]".
 4755**
 4756** Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared.
 4757** SQLite tries to avoid a reprepare, but a reprepare might be necessary
 4758** on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode.
 4759**
 4760** Because of the potential need to reprepare, a call to
 4761** sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be
 4762** reprepared because it was created using [sqlite3_prepare()] instead of
 4763** the newer [sqlite3_prepare_v2()] or [sqlite3_prepare_v3()] interfaces and
 4764** hence has no saved SQL text with which to reprepare.
 4765**
 4766** Changing the explain setting for a prepared statement does not change
 4767** the original SQL text for the statement.  Hence, if the SQL text originally
 4768** began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0)
 4769** is called to convert the statement into an ordinary statement, the EXPLAIN
 4770** or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S)
 4771** output, even though the statement now acts like a normal SQL statement.
 4772**
 4773** This routine returns SQLITE_OK if the explain mode is successfully
 4774** changed, or an error code if the explain mode could not be changed.
 4775** The explain mode cannot be changed while a statement is active.
 4776** Hence, it is good practice to call [sqlite3_reset(S)]
 4777** immediately prior to calling sqlite3_stmt_explain(S,E).
 4778*/
 4779SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode);
 4780
 4781/*
 4782** CAPI3REF: Determine If A Prepared Statement Has Been Reset
 4783** METHOD: sqlite3_stmt
 4784**
 4785** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the
 4786** [prepared statement] S has been stepped at least once using
 4787** [sqlite3_step(S)] but has neither run to completion (returned
 4788** [SQLITE_DONE] from [sqlite3_step(S)]) nor
 4789** been reset using [sqlite3_reset(S)].  ^The sqlite3_stmt_busy(S)
 4790** interface returns false if S is a NULL pointer.  If S is not a
 4791** NULL pointer and is not a pointer to a valid [prepared statement]
 4792** object, then the behavior is undefined and probably undesirable.
 4793**
 4794** This interface can be used in combination [sqlite3_next_stmt()]
 4795** to locate all prepared statements associated with a database
 4796** connection that are in need of being reset.  This can be used,
 4797** for example, in diagnostic routines to search for prepared
 4798** statements that are holding a transaction open.
 4799*/
 4800SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
 4801
 4802/*
 4803** CAPI3REF: Dynamically Typed Value Object
 4804** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
 4805**
 4806** SQLite uses the sqlite3_value object to represent all values
 4807** that can be stored in a database table. SQLite uses dynamic typing
 4808** for the values it stores.  ^Values stored in sqlite3_value objects
 4809** can be integers, floating point values, strings, BLOBs, or NULL.
 4810**
 4811** An sqlite3_value object may be either "protected" or "unprotected".
 4812** Some interfaces require a protected sqlite3_value.  Other interfaces
 4813** will accept either a protected or an unprotected sqlite3_value.
 4814** Every interface that accepts sqlite3_value arguments specifies
 4815** whether or not it requires a protected sqlite3_value.  The
 4816** [sqlite3_value_dup()] interface can be used to construct a new
 4817** protected sqlite3_value from an unprotected sqlite3_value.
 4818**
 4819** The terms "protected" and "unprotected" refer to whether or not
 4820** a mutex is held.  An internal mutex is held for a protected
 4821** sqlite3_value object but no mutex is held for an unprotected
 4822** sqlite3_value object.  If SQLite is compiled to be single-threaded
 4823** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0)
 4824** or if SQLite is run in one of reduced mutex modes
 4825** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD]
 4826** then there is no distinction between protected and unprotected
 4827** sqlite3_value objects and they can be used interchangeably.  However,
 4828** for maximum code portability it is recommended that applications
 4829** still make the distinction between protected and unprotected
 4830** sqlite3_value objects even when not strictly required.
 4831**
 4832** ^The sqlite3_value objects that are passed as parameters into the
 4833** implementation of [application-defined SQL functions] are protected.
 4834** ^The sqlite3_value objects returned by [sqlite3_vtab_rhs_value()]
 4835** are protected.
 4836** ^The sqlite3_value object returned by
 4837** [sqlite3_column_value()] is unprotected.
 4838** Unprotected sqlite3_value objects may only be used as arguments
 4839** to [sqlite3_result_value()], [sqlite3_bind_value()], and
 4840** [sqlite3_value_dup()].
 4841** The [sqlite3_value_blob | sqlite3_value_type()] family of
 4842** interfaces require protected sqlite3_value objects.
 4843*/
 4844typedef struct sqlite3_value sqlite3_value;
 4845
 4846/*
 4847** CAPI3REF: SQL Function Context Object
 4848**
 4849** The context in which an SQL function executes is stored in an
 4850** sqlite3_context object.  ^A pointer to an sqlite3_context object
 4851** is always the first parameter to [application-defined SQL functions].
 4852** The application-defined SQL function implementation will pass this
 4853** pointer through into calls to [sqlite3_result_int | sqlite3_result()],
 4854** [sqlite3_aggregate_context()], [sqlite3_user_data()],
 4855** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()],
 4856** and/or [sqlite3_set_auxdata()].
 4857*/
 4858typedef struct sqlite3_context sqlite3_context;
 4859
 4860/*
 4861** CAPI3REF: Binding Values To Prepared Statements
 4862** KEYWORDS: {host parameter} {host parameters} {host parameter name}
 4863** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
 4864** METHOD: sqlite3_stmt
 4865**
 4866** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
 4867** literals may be replaced by a [parameter] that matches one of the following
 4868** templates:
 4869**
 4870** <ul>
 4871** <li>  ?
 4872** <li>  ?NNN
 4873** <li>  :VVV
 4874** <li>  @VVV
 4875** <li>  $VVV
 4876** </ul>
 4877**
 4878** In the templates above, NNN represents an integer literal,
 4879** and VVV represents an alphanumeric identifier.)^  ^The values of these
 4880** parameters (also called "host parameter names" or "SQL parameters")
 4881** can be set using the sqlite3_bind_*() routines defined here.
 4882**
 4883** ^The first argument to the sqlite3_bind_*() routines is always
 4884** a pointer to the [sqlite3_stmt] object returned from
 4885** [sqlite3_prepare_v2()] or its variants.
 4886**
 4887** ^The second argument is the index of the SQL parameter to be set.
 4888** ^The leftmost SQL parameter has an index of 1.  ^When the same named
 4889** SQL parameter is used more than once, second and subsequent
 4890** occurrences have the same index as the first occurrence.
 4891** ^The index for named parameters can be looked up using the
 4892** [sqlite3_bind_parameter_index()] API if desired.  ^The index
 4893** for "?NNN" parameters is the value of NNN.
 4894** ^The NNN value must be between 1 and the [sqlite3_limit()]
 4895** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 32766).
 4896**
 4897** ^The third argument is the value to bind to the parameter.
 4898** ^If the third parameter to sqlite3_bind_text() or sqlite3_bind_text16()
 4899** or sqlite3_bind_blob() is a NULL pointer then the fourth parameter
 4900** is ignored and the end result is the same as sqlite3_bind_null().
 4901** ^If the third parameter to sqlite3_bind_text() is not NULL, then
 4902** it should be a pointer to well-formed UTF8 text.
 4903** ^If the third parameter to sqlite3_bind_text16() is not NULL, then
 4904** it should be a pointer to well-formed UTF16 text.
 4905** ^If the third parameter to sqlite3_bind_text64() is not NULL, then
 4906** it should be a pointer to a well-formed unicode string that is
 4907** either UTF8 if the sixth parameter is SQLITE_UTF8 or SQLITE_UTF8_ZT,
 4908** or UTF16 otherwise.
 4909**
 4910** [[byte-order determination rules]] ^The byte-order of
 4911** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF)
 4912** found in the first character, which is removed, or in the absence of a BOM
 4913** the byte order is the native byte order of the host
 4914** machine for sqlite3_bind_text16() or the byte order specified in
 4915** the 6th parameter for sqlite3_bind_text64().)^
 4916** ^If UTF16 input text contains invalid unicode
 4917** characters, then SQLite might change those invalid characters
 4918** into the unicode replacement character: U+FFFD.
 4919**
 4920** ^(In those routines that have a fourth argument, its value is the
 4921** number of bytes in the parameter.  To be clear: the value is the
 4922** number of <u>bytes</u> in the value, not the number of characters.)^
 4923** ^If the fourth parameter to sqlite3_bind_text() or sqlite3_bind_text16()
 4924** is negative, then the length of the string is
 4925** the number of bytes up to the first zero terminator.
 4926** If the fourth parameter to sqlite3_bind_blob() is negative, then
 4927** the behavior is undefined.
 4928** If a non-negative fourth parameter is provided to sqlite3_bind_text()
 4929** or sqlite3_bind_text16() or sqlite3_bind_text64() then
 4930** that parameter must be the byte offset
 4931** where the NUL terminator would occur assuming the string were NUL
 4932** terminated.  If any NUL characters occur at byte offsets less than
 4933** the value of the fourth parameter then the resulting string value will
 4934** contain embedded NULs.  The result of expressions involving strings
 4935** with embedded NULs is undefined.
 4936**
 4937** ^The fifth argument to the BLOB and string binding interfaces controls
 4938** or indicates the lifetime of the object referenced by the third parameter.
 4939** These three options exist:
 4940** ^ (1) A destructor to dispose of the BLOB or string after SQLite has finished
 4941** with it may be passed. ^It is called to dispose of the BLOB or string even
 4942** if the call to the bind API fails, except the destructor is not called if
 4943** the third parameter is a NULL pointer or the fourth parameter is negative.
 4944** ^ (2) The special constant, [SQLITE_STATIC], may be passed to indicate that
 4945** the application remains responsible for disposing of the object. ^In this
 4946** case, the object and the provided pointer to it must remain valid until
 4947** either the prepared statement is finalized or the same SQL parameter is
 4948** bound to something else, whichever occurs sooner.
 4949** ^ (3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the
 4950** object is to be copied prior to the return from sqlite3_bind_*(). ^The
 4951** object and pointer to it must remain valid until then. ^SQLite will then
 4952** manage the lifetime of its private copy.
 4953**
 4954** ^The sixth argument (the E argument)
 4955** to sqlite3_bind_text64(S,K,Z,N,D,E) must be one of
 4956** [SQLITE_UTF8], [SQLITE_UTF8_ZT], [SQLITE_UTF16], [SQLITE_UTF16BE],
 4957** or [SQLITE_UTF16LE] to specify the encoding of the text in the
 4958** third parameter, Z.  The special value [SQLITE_UTF8_ZT] means that the
 4959** string argument is both UTF-8 encoded and is zero-terminated.  In other
 4960** words, SQLITE_UTF8_ZT means that the Z array is allocated to hold at
 4961** least N+1 bytes and that the Z&#91;N&#93; byte is zero.  If
 4962** the E argument to sqlite3_bind_text64(S,K,Z,N,D,E) is not one of the
 4963** allowed values shown above, or if the text encoding is different
 4964** from the encoding specified by the sixth parameter, then the behavior
 4965** is undefined.
 4966**
 4967** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
 4968** is filled with zeroes.  ^A zeroblob uses a fixed amount of memory
 4969** (just an integer to hold its size) while it is being processed.
 4970** Zeroblobs are intended to serve as placeholders for BLOBs whose
 4971** content is later written using
 4972** [sqlite3_blob_open | incremental BLOB I/O] routines.
 4973** ^A negative value for the zeroblob results in a zero-length BLOB.
 4974**
 4975** ^The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in
 4976** [prepared statement] S to have an SQL value of NULL, but to also be
 4977** associated with the pointer P of type T.  ^D is either a NULL pointer or
 4978** a pointer to a destructor function for P. ^SQLite will invoke the
 4979** destructor D with a single argument of P when it is finished using
 4980** P, even if the call to sqlite3_bind_pointer() fails.  Due to a
 4981** historical design quirk, results are undefined if D is
 4982** SQLITE_TRANSIENT. The T parameter should be a static string,
 4983** preferably a string literal. The sqlite3_bind_pointer() routine is
 4984** part of the [pointer passing interface] added for SQLite 3.20.0.
 4985**
 4986** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer
 4987** for the [prepared statement] or with a prepared statement for which
 4988** [sqlite3_step()] has been called more recently than [sqlite3_reset()],
 4989** then the call will return [SQLITE_MISUSE].  If any sqlite3_bind_()
 4990** routine is passed a [prepared statement] that has been finalized, the
 4991** result is undefined and probably harmful.
 4992**
 4993** ^Bindings are not cleared by the [sqlite3_reset()] routine.
 4994** ^Unbound parameters are interpreted as NULL.
 4995**
 4996** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
 4997** [error code] if anything goes wrong.
 4998** ^[SQLITE_TOOBIG] might be returned if the size of a string or BLOB
 4999** exceeds limits imposed by [sqlite3_limit]([SQLITE_LIMIT_LENGTH]) or
 5000** [SQLITE_MAX_LENGTH].
 5001** ^[SQLITE_RANGE] is returned if the parameter
 5002** index is out of range.  ^[SQLITE_NOMEM] is returned if malloc() fails.
 5003**
 5004** See also: [sqlite3_bind_parameter_count()],
 5005** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
 5006*/
 5007SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
 5008SQLITE_API int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64,
 5009                        void(*)(void*));
 5010SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
 5011SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
 5012SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
 5013SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
 5014SQLITE_API int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*));
 5015SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
 5016SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64,
 5017                         void(*)(void*), unsigned char encoding);
 5018SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
 5019SQLITE_API int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*));
 5020SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
 5021SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64);
 5022
 5023/*
 5024** CAPI3REF: Number Of SQL Parameters
 5025** METHOD: sqlite3_stmt
 5026**
 5027** ^This routine can be used to find the number of [SQL parameters]
 5028** in a [prepared statement].  SQL parameters are tokens of the
 5029** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
 5030** placeholders for values that are [sqlite3_bind_blob | bound]
 5031** to the parameters at a later time.
 5032**
 5033** ^(This routine actually returns the index of the largest (rightmost)
 5034** parameter. For all forms except ?NNN, this will correspond to the
 5035** number of unique parameters.  If parameters of the ?NNN form are used,
 5036** there may be gaps in the list.)^
 5037**
 5038** See also: [sqlite3_bind_blob|sqlite3_bind()],
 5039** [sqlite3_bind_parameter_name()], and
 5040** [sqlite3_bind_parameter_index()].
 5041*/
 5042SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*);
 5043
 5044/*
 5045** CAPI3REF: Name Of A Host Parameter
 5046** METHOD: sqlite3_stmt
 5047**
 5048** ^The sqlite3_bind_parameter_name(P,N) interface returns
 5049** the name of the N-th [SQL parameter] in the [prepared statement] P.
 5050** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
 5051** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
 5052** respectively.
 5053** In other words, the initial ":" or "$" or "@" or "?"
 5054** is included as part of the name.)^
 5055** ^Parameters of the form "?" without a following integer have no name
 5056** and are referred to as "nameless" or "anonymous parameters".
 5057**
 5058** ^The first host parameter has an index of 1, not 0.
 5059**
 5060** ^If the value N is out of range or if the N-th parameter is
 5061** nameless, then NULL is returned.  ^The returned string is
 5062** always in UTF-8 encoding even if the named parameter was
 5063** originally specified as UTF-16 in [sqlite3_prepare16()],
 5064** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()].
 5065**
 5066** See also: [sqlite3_bind_blob|sqlite3_bind()],
 5067** [sqlite3_bind_parameter_count()], and
 5068** [sqlite3_bind_parameter_index()].
 5069*/
 5070SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
 5071
 5072/*
 5073** CAPI3REF: Index Of A Parameter With A Given Name
 5074** METHOD: sqlite3_stmt
 5075**
 5076** ^Return the index of an SQL parameter given its name.  ^The
 5077** index value returned is suitable for use as the second
 5078** parameter to [sqlite3_bind_blob|sqlite3_bind()].  ^A zero
 5079** is returned if no matching parameter is found.  ^The parameter
 5080** name must be given in UTF-8 even if the original statement
 5081** was prepared from UTF-16 text using [sqlite3_prepare16_v2()] or
 5082** [sqlite3_prepare16_v3()].
 5083**
 5084** See also: [sqlite3_bind_blob|sqlite3_bind()],
 5085** [sqlite3_bind_parameter_count()], and
 5086** [sqlite3_bind_parameter_name()].
 5087*/
 5088SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
 5089
 5090/*
 5091** CAPI3REF: Reset All Bindings On A Prepared Statement
 5092** METHOD: sqlite3_stmt
 5093**
 5094** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset
 5095** the [sqlite3_bind_blob | bindings] on a [prepared statement].
 5096** ^Use this routine to reset all host parameters to NULL.
 5097*/
 5098SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
 5099
 5100/*
 5101** CAPI3REF: Number Of Columns In A Result Set
 5102** METHOD: sqlite3_stmt
 5103**
 5104** ^Return the number of columns in the result set returned by the
 5105** [prepared statement]. ^If this routine returns 0, that means the
 5106** [prepared statement] returns no data (for example an [UPDATE]).
 5107** ^However, just because this routine returns a positive number does not
 5108** mean that one or more rows of data will be returned.  ^A SELECT statement
 5109** will always have a positive sqlite3_column_count() but depending on the
 5110** WHERE clause constraints and the table content, it might return no rows.
 5111**
 5112** See also: [sqlite3_data_count()]
 5113*/
 5114SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt);
 5115
 5116/*
 5117** CAPI3REF: Column Names In A Result Set
 5118** METHOD: sqlite3_stmt
 5119**
 5120** ^These routines return the name assigned to a particular column
 5121** in the result set of a [SELECT] statement.  ^The sqlite3_column_name()
 5122** interface returns a pointer to a zero-terminated UTF-8 string
 5123** and sqlite3_column_name16() returns a pointer to a zero-terminated
 5124** UTF-16 string.  ^The first parameter is the [prepared statement]
 5125** that implements the [SELECT] statement. ^The second parameter is the
 5126** column number.  ^The leftmost column is number 0.
 5127**
 5128** ^The returned string pointer is valid until either the [prepared statement]
 5129** is destroyed by [sqlite3_finalize()] or until the statement is automatically
 5130** reprepared by the first call to [sqlite3_step()] for a particular run
 5131** or until the next call to
 5132** sqlite3_column_name() or sqlite3_column_name16() on the same column.
 5133**
 5134** ^If sqlite3_malloc() fails during the processing of either routine
 5135** (for example during a conversion from UTF-8 to UTF-16) then a
 5136** NULL pointer is returned.
 5137**
 5138** ^The name of a result column is the value of the "AS" clause for
 5139** that column, if there is an AS clause.  If there is no AS clause
 5140** then the name of the column is unspecified and may change from
 5141** one release of SQLite to the next.
 5142*/
 5143SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N);
 5144SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
 5145
 5146/*
 5147** CAPI3REF: Source Of Data In A Query Result
 5148** METHOD: sqlite3_stmt
 5149**
 5150** ^These routines provide a means to determine the database, table, and
 5151** table column that is the origin of a particular result column in a
 5152** [SELECT] statement.
 5153** ^The name of the database or table or column can be returned as
 5154** either a UTF-8 or UTF-16 string.  ^The _database_ routines return
 5155** the database name, the _table_ routines return the table name, and
 5156** the origin_ routines return the column name.
 5157** ^The returned string is valid until the [prepared statement] is destroyed
 5158** using [sqlite3_finalize()] or until the statement is automatically
 5159** reprepared by the first call to [sqlite3_step()] for a particular run
 5160** or until the same information is requested
 5161** again in a different encoding.
 5162**
 5163** ^The names returned are the original un-aliased names of the
 5164** database, table, and column.
 5165**
 5166** ^The first argument to these interfaces is a [prepared statement].
 5167** ^These functions return information about the Nth result column returned by
 5168** the statement, where N is the second function argument.
 5169** ^The left-most column is column 0 for these routines.
 5170**
 5171** ^If the Nth column returned by the statement is an expression or
 5172** subquery and is not a column value, then all of these functions return
 5173** NULL.  ^These routines might also return NULL if a memory allocation error
 5174** occurs.  ^Otherwise, they return the name of the attached database, table,
 5175** or column that query result column was extracted from.
 5176**
 5177** ^As with all other SQLite APIs, those whose names end with "16" return
 5178** UTF-16 encoded strings and the other functions return UTF-8.
 5179**
 5180** ^These APIs are only available if the library was compiled with the
 5181** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
 5182**
 5183** If two or more threads call one or more
 5184** [sqlite3_column_database_name | column metadata interfaces]
 5185** for the same [prepared statement] and result column
 5186** at the same time then the results are undefined.
 5187*/
 5188SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int);
 5189SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
 5190SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int);
 5191SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
 5192SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
 5193SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
 5194
 5195/*
 5196** CAPI3REF: Declared Datatype Of A Query Result
 5197** METHOD: sqlite3_stmt
 5198**
 5199** ^(The first parameter is a [prepared statement].
 5200** If this statement is a [SELECT] statement and the Nth column of the
 5201** returned result set of that [SELECT] is a table column (not an
 5202** expression or subquery) then the declared type of the table
 5203** column is returned.)^  ^If the Nth column of the result set is an
 5204** expression or subquery, then a NULL pointer is returned.
 5205** ^The returned string is always UTF-8 encoded.
 5206**
 5207** ^(For example, given the database schema:
 5208**
 5209** CREATE TABLE t1(c1 VARIANT);
 5210**
 5211** and the following statement to be compiled:
 5212**
 5213** SELECT c1 + 1, c1 FROM t1;
 5214**
 5215** this routine would return the string "VARIANT" for the second result
 5216** column (i==1), and a NULL pointer for the first result column (i==0).)^
 5217**
 5218** ^SQLite uses dynamic run-time typing.  ^So just because a column
 5219** is declared to contain a particular type does not mean that the
 5220** data stored in that column is of the declared type.  SQLite is
 5221** strongly typed, but the typing is dynamic not static.  ^Type
 5222** is associated with individual values, not with the containers
 5223** used to hold those values.
 5224*/
 5225SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int);
 5226SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
 5227
 5228/*
 5229** CAPI3REF: Evaluate An SQL Statement
 5230** METHOD: sqlite3_stmt
 5231**
 5232** After a [prepared statement] has been prepared using any of
 5233** [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], [sqlite3_prepare16_v2()],
 5234** or [sqlite3_prepare16_v3()] or one of the legacy
 5235** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function
 5236** must be called one or more times to evaluate the statement.
 5237**
 5238** The details of the behavior of the sqlite3_step() interface depend
 5239** on whether the statement was prepared using the newer "vX" interfaces
 5240** [sqlite3_prepare_v3()], [sqlite3_prepare_v2()], [sqlite3_prepare16_v3()],
 5241** [sqlite3_prepare16_v2()] or the older legacy
 5242** interfaces [sqlite3_prepare()] and [sqlite3_prepare16()].  The use of the
 5243** new "vX" interface is recommended for new applications but the legacy
 5244** interface will continue to be supported.
 5245**
 5246** ^In the legacy interface, the return value will be either [SQLITE_BUSY],
 5247** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE].
 5248** ^With the "v2" interface, any of the other [result codes] or
 5249** [extended result codes] might be returned as well.
 5250**
 5251** ^[SQLITE_BUSY] means that the database engine was unable to acquire the
 5252** database locks it needs to do its job.  ^If the statement is a [COMMIT]
 5253** or occurs outside of an explicit transaction, then you can retry the
 5254** statement.  If the statement is not a [COMMIT] and occurs within an
 5255** explicit transaction then you should rollback the transaction before
 5256** continuing.
 5257**
 5258** ^[SQLITE_DONE] means that the statement has finished executing
 5259** successfully.  sqlite3_step() should not be called again on this virtual
 5260** machine without first calling [sqlite3_reset()] to reset the virtual
 5261** machine back to its initial state.
 5262**
 5263** ^If the SQL statement being executed returns any data, then [SQLITE_ROW]
 5264** is returned each time a new row of data is ready for processing by the
 5265** caller. The values may be accessed using the [column access functions].
 5266** sqlite3_step() is called again to retrieve the next row of data.
 5267**
 5268** ^[SQLITE_ERROR] means that a run-time error (such as a constraint
 5269** violation) has occurred.  sqlite3_step() should not be called again on
 5270** the VM. More information may be found by calling [sqlite3_errmsg()].
 5271** ^With the legacy interface, a more specific error code (for example,
 5272** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth)
 5273** can be obtained by calling [sqlite3_reset()] on the
 5274** [prepared statement].  ^In the "v2" interface,
 5275** the more specific error code is returned directly by sqlite3_step().
 5276**
 5277** [SQLITE_MISUSE] means that the this routine was called inappropriately.
 5278** Perhaps it was called on a [prepared statement] that has
 5279** already been [sqlite3_finalize | finalized] or on one that had
 5280** previously returned [SQLITE_ERROR] or [SQLITE_DONE].  Or it could
 5281** be the case that the same database connection is being used by two or
 5282** more threads at the same moment in time.
 5283**
 5284** For all versions of SQLite up to and including 3.6.23.1, a call to
 5285** [sqlite3_reset()] was required after sqlite3_step() returned anything
 5286** other than [SQLITE_ROW] before any subsequent invocation of
 5287** sqlite3_step().  Failure to reset the prepared statement using
 5288** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
 5289** sqlite3_step().  But after [version 3.6.23.1] ([dateof:3.6.23.1]),
 5290** sqlite3_step() began
 5291** calling [sqlite3_reset()] automatically in this circumstance rather
 5292** than returning [SQLITE_MISUSE].  This is not considered a compatibility
 5293** break because any application that ever receives an SQLITE_MISUSE error
 5294** is broken by definition.  The [SQLITE_OMIT_AUTORESET] compile-time option
 5295** can be used to restore the legacy behavior.
 5296**
 5297** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
 5298** API always returns a generic error code, [SQLITE_ERROR], following any
 5299** error other than [SQLITE_BUSY] and [SQLITE_MISUSE].  You must call
 5300** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the
 5301** specific [error codes] that better describes the error.
 5302** We admit that this is a goofy design.  The problem has been fixed
 5303** with the "v2" interface.  If you prepare all of your SQL statements
 5304** using [sqlite3_prepare_v3()] or [sqlite3_prepare_v2()]
 5305** or [sqlite3_prepare16_v2()] or [sqlite3_prepare16_v3()] instead
 5306** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces,
 5307** then the more specific [error codes] are returned directly
 5308** by sqlite3_step().  The use of the "vX" interfaces is recommended.
 5309*/
 5310SQLITE_API int sqlite3_step(sqlite3_stmt*);
 5311
 5312/*
 5313** CAPI3REF: Number of columns in a result set
 5314** METHOD: sqlite3_stmt
 5315**
 5316** ^The sqlite3_data_count(P) interface returns the number of columns in the
 5317** current row of the result set of [prepared statement] P.
 5318** ^If prepared statement P does not have results ready to return
 5319** (via calls to the [sqlite3_column_int | sqlite3_column()] family of
 5320** interfaces) then sqlite3_data_count(P) returns 0.
 5321** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
 5322** ^The sqlite3_data_count(P) routine returns 0 if the previous call to
 5323** [sqlite3_step](P) returned [SQLITE_DONE].  ^The sqlite3_data_count(P)
 5324** will return non-zero if previous call to [sqlite3_step](P) returned
 5325** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum]
 5326** where it always returns zero since each step of that multi-step
 5327** pragma returns 0 columns of data.
 5328**
 5329** See also: [sqlite3_column_count()]
 5330*/
 5331SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt);
 5332
 5333/*
 5334** CAPI3REF: Fundamental Datatypes
 5335** KEYWORDS: SQLITE_TEXT
 5336**
 5337** ^(Every value in SQLite has one of five fundamental datatypes:
 5338**
 5339** <ul>
 5340** <li> 64-bit signed integer
 5341** <li> 64-bit IEEE floating point number
 5342** <li> string
 5343** <li> BLOB
 5344** <li> NULL
 5345** </ul>)^
 5346**
 5347** These constants are codes for each of those types.
 5348**
 5349** Note that the SQLITE_TEXT constant was also used in SQLite version 2
 5350** for a completely different meaning.  Software that links against both
 5351** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
 5352** SQLITE_TEXT.
 5353*/
 5354#define SQLITE_INTEGER  1
 5355#define SQLITE_FLOAT    2
 5356#define SQLITE_BLOB     4
 5357#define SQLITE_NULL     5
 5358#ifdef SQLITE_TEXT
 5359# undef SQLITE_TEXT
 5360#else
 5361# define SQLITE_TEXT     3
 5362#endif
 5363#define SQLITE3_TEXT     3
 5364
 5365/*
 5366** CAPI3REF: Result Values From A Query
 5367** KEYWORDS: {column access functions}
 5368** METHOD: sqlite3_stmt
 5369**
 5370** <b>Summary:</b>
 5371** <blockquote><table border=0 cellpadding=0 cellspacing=0>
 5372** <tr><td><b>sqlite3_column_blob</b><td>&rarr;<td>BLOB result
 5373** <tr><td><b>sqlite3_column_double</b><td>&rarr;<td>REAL result
 5374** <tr><td><b>sqlite3_column_int</b><td>&rarr;<td>32-bit INTEGER result
 5375** <tr><td><b>sqlite3_column_int64</b><td>&rarr;<td>64-bit INTEGER result
 5376** <tr><td><b>sqlite3_column_text</b><td>&rarr;<td>UTF-8 TEXT result
 5377** <tr><td><b>sqlite3_column_text16</b><td>&rarr;<td>UTF-16 TEXT result
 5378** <tr><td><b>sqlite3_column_value</b><td>&rarr;<td>The result as an
 5379** [sqlite3_value|unprotected sqlite3_value] object.
 5380** <tr><td>&nbsp;<td>&nbsp;<td>&nbsp;
 5381** <tr><td><b>sqlite3_column_bytes</b><td>&rarr;<td>Size of a BLOB
 5382** or a UTF-8 TEXT result in bytes
 5383** <tr><td><b>sqlite3_column_bytes16&nbsp;&nbsp;</b>
 5384** <td>&rarr;&nbsp;&nbsp;<td>Size of UTF-16
 5385** TEXT in bytes
 5386** <tr><td><b>sqlite3_column_type</b><td>&rarr;<td>Default
 5387** datatype of the result
 5388** </table></blockquote>
 5389**
 5390** <b>Details:</b>
 5391**
 5392** ^These routines return information about a single column of the current
 5393** result row of a query.  ^In every case the first argument is a pointer
 5394** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*]
 5395** that was returned from [sqlite3_prepare_v2()] or one of its variants)
 5396** and the second argument is the index of the column for which information
 5397** should be returned. ^The leftmost column of the result set has the index 0.
 5398** ^The number of columns in the result can be determined using
 5399** [sqlite3_column_count()].
 5400**
 5401** If the SQL statement does not currently point to a valid row, or if the
 5402** column index is out of range, the result is undefined.
 5403** These routines may only be called when the most recent call to
 5404** [sqlite3_step()] has returned [SQLITE_ROW] and neither
 5405** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently.
 5406** If any of these routines are called after [sqlite3_reset()] or
 5407** [sqlite3_finalize()] or after [sqlite3_step()] has returned
 5408** something other than [SQLITE_ROW], the results are undefined.
 5409** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()]
 5410** are called from a different thread while any of these routines
 5411** are pending, then the results are undefined.
 5412**
 5413** The first six interfaces (_blob, _double, _int, _int64, _text, and _text16)
 5414** each return the value of a result column in a specific data format.  If
 5415** the result column is not initially in the requested format (for example,
 5416** if the query returns an integer but the sqlite3_column_text() interface
 5417** is used to extract the value) then an automatic type conversion is performed.
 5418**
 5419** ^The sqlite3_column_type() routine returns the
 5420** [SQLITE_INTEGER | datatype code] for the initial data type
 5421** of the result column.  ^The returned value is one of [SQLITE_INTEGER],
 5422** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].
 5423** The return value of sqlite3_column_type() can be used to decide which
 5424** of the first six interface should be used to extract the column value.
 5425** The value returned by sqlite3_column_type() is only meaningful if no
 5426** automatic type conversions have occurred for the value in question.
 5427** After a type conversion, the result of calling sqlite3_column_type()
 5428** is undefined, though harmless.  Future
 5429** versions of SQLite may change the behavior of sqlite3_column_type()
 5430** following a type conversion.
 5431**
 5432** If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes()
 5433** or sqlite3_column_bytes16() interfaces can be used to determine the size
 5434** of that BLOB or string.
 5435**
 5436** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
 5437** routine returns the number of bytes in that BLOB or string.
 5438** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts
 5439** the string to UTF-8 and then returns the number of bytes.
 5440** ^If the result is a numeric value then sqlite3_column_bytes() uses
 5441** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns
 5442** the number of bytes in that string.
 5443** ^If the result is NULL, then sqlite3_column_bytes() returns zero.
 5444**
 5445** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
 5446** routine returns the number of bytes in that BLOB or string.
 5447** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
 5448** the string to UTF-16 and then returns the number of bytes.
 5449** ^If the result is a numeric value then sqlite3_column_bytes16() uses
 5450** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns
 5451** the number of bytes in that string.
 5452** ^If the result is NULL, then sqlite3_column_bytes16() returns zero.
 5453**
 5454** ^The values returned by [sqlite3_column_bytes()] and
 5455** [sqlite3_column_bytes16()] do not include the zero terminators at the end
 5456** of the string.  ^For clarity: the values returned by
 5457** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of
 5458** bytes in the string, not the number of characters.
 5459**
 5460** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
 5461** even empty strings, are always zero-terminated.  ^The return
 5462** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
 5463**
 5464** ^Strings returned by sqlite3_column_text16() always have the endianness
 5465** which is native to the platform, regardless of the text encoding set
 5466** for the database.
 5467**
 5468** <b>Warning:</b> ^The object returned by [sqlite3_column_value()] is an
 5469** [unprotected sqlite3_value] object.  In a multithreaded environment,
 5470** an unprotected sqlite3_value object may only be used safely with
 5471** [sqlite3_bind_value()] and [sqlite3_result_value()].
 5472** If the [unprotected sqlite3_value] object returned by
 5473** [sqlite3_column_value()] is used in any other way, including calls
 5474** to routines like [sqlite3_value_int()], [sqlite3_value_text()],
 5475** or [sqlite3_value_bytes()], the behavior is not threadsafe.
 5476** Hence, the sqlite3_column_value() interface
 5477** is normally only useful within the implementation of
 5478** [application-defined SQL functions] or [virtual tables], not within
 5479** top-level application code.
 5480**
 5481** These routines may attempt to convert the datatype of the result.
 5482** ^For example, if the internal representation is FLOAT and a text result
 5483** is requested, [sqlite3_snprintf()] is used internally to perform the
 5484** conversion automatically.  ^(The following table details the conversions
 5485** that are applied:
 5486**
 5487** <blockquote>
 5488** <table border="1">
 5489** <tr><th> Internal<br>Type <th> Requested<br>Type <th>  Conversion
 5490**
 5491** <tr><td>  NULL    <td> INTEGER   <td> Result is 0
 5492** <tr><td>  NULL    <td>  FLOAT    <td> Result is 0.0
 5493** <tr><td>  NULL    <td>   TEXT    <td> Result is a NULL pointer
 5494** <tr><td>  NULL    <td>   BLOB    <td> Result is a NULL pointer
 5495** <tr><td> INTEGER  <td>  FLOAT    <td> Convert from integer to float
 5496** <tr><td> INTEGER  <td>   TEXT    <td> ASCII rendering of the integer
 5497** <tr><td> INTEGER  <td>   BLOB    <td> Same as INTEGER->TEXT
 5498** <tr><td>  FLOAT   <td> INTEGER   <td> [CAST] to INTEGER
 5499** <tr><td>  FLOAT   <td>   TEXT    <td> ASCII rendering of the float
 5500** <tr><td>  FLOAT   <td>   BLOB    <td> [CAST] to BLOB
 5501** <tr><td>  TEXT    <td> INTEGER   <td> [CAST] to INTEGER
 5502** <tr><td>  TEXT    <td>  FLOAT    <td> [CAST] to REAL
 5503** <tr><td>  TEXT    <td>   BLOB    <td> No change
 5504** <tr><td>  BLOB    <td> INTEGER   <td> [CAST] to INTEGER
 5505** <tr><td>  BLOB    <td>  FLOAT    <td> [CAST] to REAL
 5506** <tr><td>  BLOB    <td>   TEXT    <td> [CAST] to TEXT, ensure zero terminator
 5507** </table>
 5508** </blockquote>)^
 5509**
 5510** Note that when type conversions occur, pointers returned by prior
 5511** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
 5512** sqlite3_column_text16() may be invalidated.
 5513** Type conversions and pointer invalidations might occur
 5514** in the following cases:
 5515**
 5516** <ul>
 5517** <li> The initial content is a BLOB and sqlite3_column_text() or
 5518**      sqlite3_column_text16() is called.  A zero-terminator might
 5519**      need to be added to the string.</li>
 5520** <li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
 5521**      sqlite3_column_text16() is called.  The content must be converted
 5522**      to UTF-16.</li>
 5523** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or
 5524**      sqlite3_column_text() is called.  The content must be converted
 5525**      to UTF-8.</li>
 5526** </ul>
 5527**
 5528** ^Conversions between UTF-16be and UTF-16le are always done in place and do
 5529** not invalidate a prior pointer, though of course the content of the buffer
 5530** that the prior pointer references will have been modified.  Other kinds
 5531** of conversion are done in place when it is possible, but sometimes they
 5532** are not possible and in those cases prior pointers are invalidated.
 5533**
 5534** The safest policy is to invoke these routines
 5535** in one of the following ways:
 5536**
 5537** <ul>
 5538**  <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
 5539**  <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
 5540**  <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
 5541** </ul>
 5542**
 5543** In other words, you should call sqlite3_column_text(),
 5544** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
 5545** into the desired format, then invoke sqlite3_column_bytes() or
 5546** sqlite3_column_bytes16() to find the size of the result.  Do not mix calls
 5547** to sqlite3_column_text() or sqlite3_column_blob() with calls to
 5548** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
 5549** with calls to sqlite3_column_bytes().
 5550**
 5551** ^The pointers returned are valid until a type conversion occurs as
 5552** described above, or until [sqlite3_step()] or [sqlite3_reset()] or
 5553** [sqlite3_finalize()] is called.  ^The memory space used to hold strings
 5554** and BLOBs is freed automatically.  Do not pass the pointers returned
 5555** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into
 5556** [sqlite3_free()].
 5557**
 5558** As long as the input parameters are correct, these routines will only
 5559** fail if an out-of-memory error occurs during a format conversion.
 5560** Only the following subset of interfaces are subject to out-of-memory
 5561** errors:
 5562**
 5563** <ul>
 5564** <li> sqlite3_column_blob()
 5565** <li> sqlite3_column_text()
 5566** <li> sqlite3_column_text16()
 5567** <li> sqlite3_column_bytes()
 5568** <li> sqlite3_column_bytes16()
 5569** </ul>
 5570**
 5571** If an out-of-memory error occurs, then the return value from these
 5572** routines is the same as if the column had contained an SQL NULL value.
 5573** Valid SQL NULL returns can be distinguished from out-of-memory errors
 5574** by invoking the [sqlite3_errcode()] immediately after the suspect
 5575** return value is obtained and before any
 5576** other SQLite interface is called on the same [database connection].
 5577*/
 5578SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
 5579SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
 5580SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
 5581SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
 5582SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
 5583SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
 5584SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
 5585SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
 5586SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
 5587SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
 5588
 5589/*
 5590** CAPI3REF: Destroy A Prepared Statement Object
 5591** DESTRUCTOR: sqlite3_stmt
 5592**
 5593** ^The sqlite3_finalize() function is called to delete a [prepared statement].
 5594** ^If the most recent evaluation of the statement encountered no errors
 5595** or if the statement has never been evaluated, then sqlite3_finalize() returns
 5596** SQLITE_OK.  ^If the most recent evaluation of statement S failed, then
 5597** sqlite3_finalize(S) returns the appropriate [error code] or
 5598** [extended error code].
 5599**
 5600** ^The sqlite3_finalize(S) routine can be called at any point during
 5601** the life cycle of [prepared statement] S:
 5602** before statement S is ever evaluated, after
 5603** one or more calls to [sqlite3_reset()], or after any call
 5604** to [sqlite3_step()] regardless of whether or not the statement has
 5605** completed execution.
 5606**
 5607** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
 5608**
 5609** The application must finalize every [prepared statement] in order to avoid
 5610** resource leaks.  It is a grievous error for the application to try to use
 5611** a prepared statement after it has been finalized.  Any use of a prepared
 5612** statement after it has been finalized can result in undefined and
 5613** undesirable behavior such as segfaults and heap corruption.
 5614*/
 5615SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
 5616
 5617/*
 5618** CAPI3REF: Reset A Prepared Statement Object
 5619** METHOD: sqlite3_stmt
 5620**
 5621** The sqlite3_reset() function is called to reset a [prepared statement]
 5622** object back to its initial state, ready to be re-executed.
 5623** ^Any SQL statement variables that had values bound to them using
 5624** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values.
 5625** Use [sqlite3_clear_bindings()] to reset the bindings.
 5626**
 5627** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S
 5628** back to the beginning of its program.
 5629**
 5630** ^The return code from [sqlite3_reset(S)] indicates whether or not
 5631** the previous evaluation of prepared statement S completed successfully.
 5632** ^If [sqlite3_step(S)] has never before been called on S or if
 5633** [sqlite3_step(S)] has not been called since the previous call
 5634** to [sqlite3_reset(S)], then [sqlite3_reset(S)] will return
 5635** [SQLITE_OK].
 5636**
 5637** ^If the most recent call to [sqlite3_step(S)] for the
 5638** [prepared statement] S indicated an error, then
 5639** [sqlite3_reset(S)] returns an appropriate [error code].
 5640** ^The [sqlite3_reset(S)] interface might also return an [error code]
 5641** if there were no prior errors but the process of resetting
 5642** the prepared statement caused a new error. ^For example, if an
 5643** [INSERT] statement with a [RETURNING] clause is only stepped one time,
 5644** that one call to [sqlite3_step(S)] might return SQLITE_ROW but
 5645** the overall statement might still fail and the [sqlite3_reset(S)] call
 5646** might return SQLITE_BUSY if locking constraints prevent the
 5647** database change from committing.  Therefore, it is important that
 5648** applications check the return code from [sqlite3_reset(S)] even if
 5649** no prior call to [sqlite3_step(S)] indicated a problem.
 5650**
 5651** ^The [sqlite3_reset(S)] interface does not change the values
 5652** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S.
 5653*/
 5654SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
 5655
 5656
 5657/*
 5658** CAPI3REF: Create Or Redefine SQL Functions
 5659** KEYWORDS: {function creation routines}
 5660** METHOD: sqlite3
 5661**
 5662** ^These functions (collectively known as "function creation routines")
 5663** are used to add SQL functions or aggregates or to redefine the behavior
 5664** of existing SQL functions or aggregates. The only differences between
 5665** the three "sqlite3_create_function*" routines are the text encoding
 5666** expected for the second parameter (the name of the function being
 5667** created) and the presence or absence of a destructor callback for
 5668** the application data pointer. Function sqlite3_create_window_function()
 5669** is similar, but allows the user to supply the extra callback functions
 5670** needed by [aggregate window functions].
 5671**
 5672** ^The first parameter is the [database connection] to which the SQL
 5673** function is to be added.  ^If an application uses more than one database
 5674** connection then application-defined SQL functions must be added
 5675** to each database connection separately.
 5676**
 5677** ^The second parameter is the name of the SQL function to be created or
 5678** redefined.  ^The length of the name is limited to 255 bytes in a UTF-8
 5679** representation, exclusive of the zero-terminator.  ^Note that the name
 5680** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.
 5681** ^Any attempt to create a function with a longer name
 5682** will result in [SQLITE_MISUSE] being returned.
 5683**
 5684** ^The third parameter (nArg)
 5685** is the number of arguments that the SQL function or
 5686** aggregate takes. ^If this parameter is -1, then the SQL function or
 5687** aggregate may take any number of arguments between 0 and the limit
 5688** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]).  If the third
 5689** parameter is less than -1 or greater than 127 then the behavior is
 5690** undefined.
 5691**
 5692** ^The fourth parameter, eTextRep, specifies what
 5693** [SQLITE_UTF8 | text encoding] this SQL function prefers for
 5694** its parameters.  The application should set this parameter to
 5695** [SQLITE_UTF16LE] if the function implementation invokes
 5696** [sqlite3_value_text16le()] on an input, or [SQLITE_UTF16BE] if the
 5697** implementation invokes [sqlite3_value_text16be()] on an input, or
 5698** [SQLITE_UTF16] if [sqlite3_value_text16()] is used, or [SQLITE_UTF8]
 5699** otherwise.  ^The same SQL function may be registered multiple times using
 5700** different preferred text encodings, with different implementations for
 5701** each encoding.
 5702** ^When multiple implementations of the same function are available, SQLite
 5703** will pick the one that involves the least amount of data conversion.
 5704**
 5705** ^The fourth parameter may optionally be ORed with [SQLITE_DETERMINISTIC]
 5706** to signal that the function will always return the same result given
 5707** the same inputs within a single SQL statement.  Most SQL functions are
 5708** deterministic.  The built-in [random()] SQL function is an example of a
 5709** function that is not deterministic.  The SQLite query planner is able to
 5710** perform additional optimizations on deterministic functions, so use
 5711** of the [SQLITE_DETERMINISTIC] flag is recommended where possible.
 5712**
 5713** ^The fourth parameter may also optionally include the [SQLITE_DIRECTONLY]
 5714** flag, which if present prevents the function from being invoked from
 5715** within VIEWs, TRIGGERs, CHECK constraints, generated column expressions,
 5716** index expressions, or the WHERE clause of partial indexes.
 5717**
 5718** For best security, the [SQLITE_DIRECTONLY] flag is recommended for
 5719** all application-defined SQL functions that do not need to be
 5720** used inside of triggers, views, CHECK constraints, or other elements of
 5721** the database schema.  This flag is especially recommended for SQL
 5722** functions that have side effects or reveal internal application state.
 5723** Without this flag, an attacker might be able to modify the schema of
 5724** a database file to include invocations of the function with parameters
 5725** chosen by the attacker, which the application will then execute when
 5726** the database file is opened and read.
 5727**
 5728** ^(The fifth parameter is an arbitrary pointer.  The implementation of the
 5729** function can gain access to this pointer using [sqlite3_user_data()].)^
 5730**
 5731** ^The sixth, seventh and eighth parameters passed to the three
 5732** "sqlite3_create_function*" functions, xFunc, xStep and xFinal, are
 5733** pointers to C-language functions that implement the SQL function or
 5734** aggregate. ^A scalar SQL function requires an implementation of the xFunc
 5735** callback only; NULL pointers must be passed as the xStep and xFinal
 5736** parameters. ^An aggregate SQL function requires an implementation of xStep
 5737** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing
 5738** SQL function or aggregate, pass NULL pointers for all three function
 5739** callbacks.
 5740**
 5741** ^The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue
 5742** and xInverse) passed to sqlite3_create_window_function are pointers to
 5743** C-language callbacks that implement the new function. xStep and xFinal
 5744** must both be non-NULL. xValue and xInverse may either both be NULL, in
 5745** which case a regular aggregate function is created, or must both be
 5746** non-NULL, in which case the new function may be used as either an aggregate
 5747** or aggregate window function. More details regarding the implementation
 5748** of aggregate window functions are
 5749** [user-defined window functions|available here].
 5750**
 5751** ^(If the final parameter to sqlite3_create_function_v2() or
 5752** sqlite3_create_window_function() is not NULL, then it is the destructor for
 5753** the application data pointer. The destructor is invoked when the function
 5754** is deleted, either by being overloaded or when the database connection
 5755** closes.)^ ^The destructor is also invoked if the call to
 5756** sqlite3_create_function_v2() fails.  ^When the destructor callback is
 5757** invoked, it is passed a single argument which is a copy of the application
 5758** data pointer which was the fifth parameter to sqlite3_create_function_v2().
 5759**
 5760** ^It is permitted to register multiple implementations of the same
 5761** functions with the same name but with either differing numbers of
 5762** arguments or differing preferred text encodings.  ^SQLite will use
 5763** the implementation that most closely matches the way in which the
 5764** SQL function is used.  ^A function implementation with a non-negative
 5765** nArg parameter is a better match than a function implementation with
 5766** a negative nArg.  ^A function where the preferred text encoding
 5767** matches the database encoding is a better
 5768** match than a function where the encoding is different.
 5769** ^A function where the encoding difference is between UTF16le and UTF16be
 5770** is a closer match than a function where the encoding difference is
 5771** between UTF8 and UTF16.
 5772**
 5773** ^Built-in functions may be overloaded by new application-defined functions.
 5774**
 5775** ^An application-defined function is permitted to call other
 5776** SQLite interfaces.  However, such calls must not
 5777** close the database connection nor finalize or reset the prepared
 5778** statement in which the function is running.
 5779*/
 5780SQLITE_API int sqlite3_create_function(
 5781  sqlite3 *db,
 5782  const char *zFunctionName,
 5783  int nArg,
 5784  int eTextRep,
 5785  void *pApp,
 5786  void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
 5787  void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 5788  void (*xFinal)(sqlite3_context*)
 5789);
 5790SQLITE_API int sqlite3_create_function16(
 5791  sqlite3 *db,
 5792  const void *zFunctionName,
 5793  int nArg,
 5794  int eTextRep,
 5795  void *pApp,
 5796  void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
 5797  void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 5798  void (*xFinal)(sqlite3_context*)
 5799);
 5800SQLITE_API int sqlite3_create_function_v2(
 5801  sqlite3 *db,
 5802  const char *zFunctionName,
 5803  int nArg,
 5804  int eTextRep,
 5805  void *pApp,
 5806  void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
 5807  void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 5808  void (*xFinal)(sqlite3_context*),
 5809  void(*xDestroy)(void*)
 5810);
 5811SQLITE_API int sqlite3_create_window_function(
 5812  sqlite3 *db,
 5813  const char *zFunctionName,
 5814  int nArg,
 5815  int eTextRep,
 5816  void *pApp,
 5817  void (*xStep)(sqlite3_context*,int,sqlite3_value**),
 5818  void (*xFinal)(sqlite3_context*),
 5819  void (*xValue)(sqlite3_context*),
 5820  void (*xInverse)(sqlite3_context*,int,sqlite3_value**),
 5821  void(*xDestroy)(void*)
 5822);
 5823
 5824/*
 5825** CAPI3REF: Text Encodings
 5826**
 5827** These constants define integer codes that represent the various
 5828** text encodings supported by SQLite.
 5829**
 5830** <dl>
 5831** [[SQLITE_UTF8]] <dt>SQLITE_UTF8</dt><dd>Text is encoding as UTF-8</dd>
 5832**
 5833** [[SQLITE_UTF16LE]] <dt>SQLITE_UTF16LE</dt><dd>Text is encoding as UTF-16
 5834** with each code point being expressed "little endian" - the least significant
 5835** byte first.  This is the usual encoding, for example on Windows.</dd>
 5836**
 5837** [[SQLITE_UTF16BE]] <dt>SQLITE_UTF16BE</dt><dd>Text is encoding as UTF-16
 5838** with each code point being expressed "big endian" - the most significant
 5839** byte first.  This encoding is less common, but is still sometimes seen,
 5840** specially on older systems.
 5841**
 5842** [[SQLITE_UTF16]] <dt>SQLITE_UTF16</dt><dd>Text is encoding as UTF-16
 5843** with each code point being expressed either little endian or as big
 5844** endian, according to the native endianness of the host computer.
 5845**
 5846** [[SQLITE_ANY]] <dt>SQLITE_ANY</dt><dd>This encoding value may only be used
 5847** to declare the preferred text for [application-defined SQL functions]
 5848** created using [sqlite3_create_function()] and similar.  If the preferred
 5849** encoding (the 4th parameter to sqlite3_create_function() - the eTextRep
 5850** parameter) is SQLITE_ANY, that indicates that the function does not have
 5851** a preference regarding the text encoding of its parameters and can take
 5852** any text encoding that the SQLite core find convenient to supply.  This
 5853** option is deprecated.  Please do not use it in new applications.
 5854**
 5855** [[SQLITE_UTF16_ALIGNED]] <dt>SQLITE_UTF16_ALIGNED</dt><dd>This encoding
 5856** value may be used as the 3rd parameter (the eTextRep parameter) to
 5857** [sqlite3_create_collation()] and similar.  This encoding value means
 5858** that the application-defined collating sequence created expects its
 5859** input strings to be in UTF16 in native byte order, and that the start
 5860** of the strings must be aligned to a 2-byte boundary.
 5861**
 5862** [[SQLITE_UTF8_ZT]] <dt>SQLITE_UTF8_ZT</dt><dd>This option can only be
 5863** used to specify the text encoding to strings input to
 5864** [sqlite3_result_text64()] and [sqlite3_bind_text64()].
 5865** The SQLITE_UTF8_ZT encoding means that the input string (call it "z")
 5866** is UTF-8 encoded and that it is zero-terminated.  If the length parameter
 5867** (call it "n") is non-negative, this encoding option means that the caller
 5868** guarantees that z array contains at least n+1 bytes and that the z&#91;n&#93;
 5869** byte has a value of zero.
 5870** This option gives the same output as SQLITE_UTF8, but can be more efficient
 5871** by avoiding the need to make a copy of the input string, in some cases.
 5872** However, if z is allocated to hold fewer than n+1 bytes or if the
 5873** z&#91;n&#93; byte is not zero, undefined behavior may result.
 5874** </dl>
 5875*/
 5876#define SQLITE_UTF8           1    /* IMP: R-37514-35566 */
 5877#define SQLITE_UTF16LE        2    /* IMP: R-03371-37637 */
 5878#define SQLITE_UTF16BE        3    /* IMP: R-51971-34154 */
 5879#define SQLITE_UTF16          4    /* Use native byte order */
 5880#define SQLITE_ANY            5    /* Deprecated */
 5881#define SQLITE_UTF16_ALIGNED  8    /* sqlite3_create_collation only */
 5882#define SQLITE_UTF8_ZT       16    /* Zero-terminated UTF8 */
 5883
 5884/*
 5885** CAPI3REF: Function Flags
 5886**
 5887** These constants may be ORed together with the
 5888** [SQLITE_UTF8 | preferred text encoding] as the fourth argument
 5889** to [sqlite3_create_function()], [sqlite3_create_function16()], or
 5890** [sqlite3_create_function_v2()].
 5891**
 5892** <dl>
 5893** [[SQLITE_DETERMINISTIC]] <dt>SQLITE_DETERMINISTIC</dt><dd>
 5894** The SQLITE_DETERMINISTIC flag means that the new function always gives
 5895** the same output when the input parameters are the same.
 5896** The [abs|abs() function] is deterministic, for example, but
 5897** [randomblob|randomblob()] is not.  Functions must
 5898** be deterministic in order to be used in certain contexts such as
 5899** with the WHERE clause of [partial indexes] or in [generated columns].
 5900** SQLite might also optimize deterministic functions by factoring them
 5901** out of inner loops.
 5902** </dd>
 5903**
 5904** [[SQLITE_DIRECTONLY]] <dt>SQLITE_DIRECTONLY</dt><dd>
 5905** The SQLITE_DIRECTONLY flag means that the function may only be invoked
 5906** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in
 5907** schema structures such as [CHECK constraints], [DEFAULT clauses],
 5908** [expression indexes], [partial indexes], or [generated columns].
 5909** <p>
 5910** The SQLITE_DIRECTONLY flag is recommended for any
 5911** [application-defined SQL function]
 5912** that has side-effects or that could potentially leak sensitive information.
 5913** This will prevent attacks in which an application is tricked
 5914** into using a database file that has had its schema surreptitiously
 5915** modified to invoke the application-defined function in ways that are
 5916** harmful.
 5917** <p>
 5918** Some people say it is good practice to set SQLITE_DIRECTONLY on all
 5919** [application-defined SQL functions], regardless of whether or not they
 5920** are security sensitive, as doing so prevents those functions from being used
 5921** inside of the database schema, and thus ensures that the database
 5922** can be inspected and modified using generic tools (such as the [CLI])
 5923** that do not have access to the application-defined functions.
 5924** </dd>
 5925**
 5926** [[SQLITE_INNOCUOUS]] <dt>SQLITE_INNOCUOUS</dt><dd>
 5927** The SQLITE_INNOCUOUS flag means that the function is unlikely
 5928** to cause problems even if misused.  An innocuous function should have
 5929** no side effects and should not depend on any values other than its
 5930** input parameters. The [abs|abs() function] is an example of an
 5931** innocuous function.
 5932** The [load_extension() SQL function] is not innocuous because of its
 5933** side effects.
 5934** <p> SQLITE_INNOCUOUS is similar to SQLITE_DETERMINISTIC, but is not
 5935** exactly the same.  The [random|random() function] is an example of a
 5936** function that is innocuous but not deterministic.
 5937** <p>Some heightened security settings
 5938** ([SQLITE_DBCONFIG_TRUSTED_SCHEMA] and [PRAGMA trusted_schema=OFF])
 5939** disable the use of SQL functions inside views and triggers and in
 5940** schema structures such as [CHECK constraints], [DEFAULT clauses],
 5941** [expression indexes], [partial indexes], and [generated columns] unless
 5942** the function is tagged with SQLITE_INNOCUOUS.  Most built-in functions
 5943** are innocuous.  Developers are advised to avoid using the
 5944** SQLITE_INNOCUOUS flag for application-defined functions unless the
 5945** function has been carefully audited and found to be free of potentially
 5946** security-adverse side-effects and information-leaks.
 5947** </dd>
 5948**
 5949** [[SQLITE_SUBTYPE]] <dt>SQLITE_SUBTYPE</dt><dd>
 5950** The SQLITE_SUBTYPE flag indicates to SQLite that a function might call
 5951** [sqlite3_value_subtype()] to inspect the sub-types of its arguments.
 5952** This flag instructs SQLite to omit some corner-case optimizations that
 5953** might disrupt the operation of the [sqlite3_value_subtype()] function,
 5954** causing it to return zero rather than the correct subtype().
 5955** All SQL functions that invoke [sqlite3_value_subtype()] should have this
 5956** property.  If the SQLITE_SUBTYPE property is omitted, then the return
 5957** value from [sqlite3_value_subtype()] might sometimes be zero even though
 5958** a non-zero subtype was specified by the function argument expression.
 5959**
 5960** [[SQLITE_RESULT_SUBTYPE]] <dt>SQLITE_RESULT_SUBTYPE</dt><dd>
 5961** The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call
 5962** [sqlite3_result_subtype()] to cause a sub-type to be associated with its
 5963** result.
 5964** Every function that invokes [sqlite3_result_subtype()] should have this
 5965** property.  If it does not, then the call to [sqlite3_result_subtype()]
 5966** might become a no-op if the function is used as a term in an
 5967** [expression index].  On the other hand, SQL functions that never invoke
 5968** [sqlite3_result_subtype()] should avoid setting this property, as the
 5969** purpose of this property is to disable certain optimizations that are
 5970** incompatible with subtypes.
 5971**
 5972** [[SQLITE_SELFORDER1]] <dt>SQLITE_SELFORDER1</dt><dd>
 5973** The SQLITE_SELFORDER1 flag indicates that the function is an aggregate
 5974** that internally orders the values provided to the first argument.  The
 5975** ordered-set aggregate SQL notation with a single ORDER BY term can be
 5976** used to invoke this function.  If the ordered-set aggregate notation is
 5977** used on a function that lacks this flag, then an error is raised. Note
 5978** that the ordered-set aggregate syntax is only available if SQLite is
 5979** built using the -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES compile-time option.
 5980** </dd>
 5981** </dl>
 5982*/
 5983#define SQLITE_DETERMINISTIC    0x000000800
 5984#define SQLITE_DIRECTONLY       0x000080000
 5985#define SQLITE_SUBTYPE          0x000100000
 5986#define SQLITE_INNOCUOUS        0x000200000
 5987#define SQLITE_RESULT_SUBTYPE   0x001000000
 5988#define SQLITE_SELFORDER1       0x002000000
 5989
 5990/*
 5991** CAPI3REF: Deprecated Functions
 5992** DEPRECATED
 5993**
 5994** These functions are [deprecated].  In order to maintain
 5995** backwards compatibility with older code, these functions continue
 5996** to be supported.  However, new applications should avoid
 5997** the use of these functions.  To encourage programmers to avoid
 5998** these functions, we will not explain what they do.
 5999*/
 6000#ifndef SQLITE_OMIT_DEPRECATED
 6001SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*);
 6002SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*);
 6003SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
 6004SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void);
 6005SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void);
 6006SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),
 6007                      void*,sqlite3_int64);
 6008#endif
 6009
 6010/*
 6011** CAPI3REF: Obtaining SQL Values
 6012** METHOD: sqlite3_value
 6013**
 6014** <b>Summary:</b>
 6015** <blockquote><table border=0 cellpadding=0 cellspacing=0>
 6016** <tr><td><b>sqlite3_value_blob</b><td>&rarr;<td>BLOB value
 6017** <tr><td><b>sqlite3_value_double</b><td>&rarr;<td>REAL value
 6018** <tr><td><b>sqlite3_value_int</b><td>&rarr;<td>32-bit INTEGER value
 6019** <tr><td><b>sqlite3_value_int64</b><td>&rarr;<td>64-bit INTEGER value
 6020** <tr><td><b>sqlite3_value_pointer</b><td>&rarr;<td>Pointer value
 6021** <tr><td><b>sqlite3_value_text</b><td>&rarr;<td>UTF-8 TEXT value
 6022** <tr><td><b>sqlite3_value_text16</b><td>&rarr;<td>UTF-16 TEXT value in
 6023** the native byteorder
 6024** <tr><td><b>sqlite3_value_text16be</b><td>&rarr;<td>UTF-16be TEXT value
 6025** <tr><td><b>sqlite3_value_text16le</b><td>&rarr;<td>UTF-16le TEXT value
 6026** <tr><td>&nbsp;<td>&nbsp;<td>&nbsp;
 6027** <tr><td><b>sqlite3_value_bytes</b><td>&rarr;<td>Size of a BLOB
 6028** or a UTF-8 TEXT in bytes
 6029** <tr><td><b>sqlite3_value_bytes16&nbsp;&nbsp;</b>
 6030** <td>&rarr;&nbsp;&nbsp;<td>Size of UTF-16
 6031** TEXT in bytes
 6032** <tr><td><b>sqlite3_value_type</b><td>&rarr;<td>Default
 6033** datatype of the value
 6034** <tr><td><b>sqlite3_value_numeric_type&nbsp;&nbsp;</b>
 6035** <td>&rarr;&nbsp;&nbsp;<td>Best numeric datatype of the value
 6036** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
 6037** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
 6038** against a virtual table.
 6039** <tr><td><b>sqlite3_value_frombind&nbsp;&nbsp;</b>
 6040** <td>&rarr;&nbsp;&nbsp;<td>True if value originated from a [bound parameter]
 6041** </table></blockquote>
 6042**
 6043** <b>Details:</b>
 6044**
 6045** These routines extract type, size, and content information from
 6046** [protected sqlite3_value] objects.  Protected sqlite3_value objects
 6047** are used to pass parameter information into the functions that
 6048** implement [application-defined SQL functions] and [virtual tables].
 6049**
 6050** These routines work only with [protected sqlite3_value] objects.
 6051** Any attempt to use these routines on an [unprotected sqlite3_value]
 6052** is not threadsafe.
 6053**
 6054** ^These routines work just like the corresponding [column access functions]
 6055** except that these routines take a single [protected sqlite3_value] object
 6056** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
 6057**
 6058** ^The sqlite3_value_text16() interface extracts a UTF-16 string
 6059** in the native byte-order of the host machine.  ^The
 6060** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
 6061** extract UTF-16 strings as big-endian and little-endian respectively.
 6062**
 6063** ^If [sqlite3_value] object V was initialized
 6064** using [sqlite3_bind_pointer(S,I,P,X,D)] or [sqlite3_result_pointer(C,P,X,D)]
 6065** and if X and Y are strings that compare equal according to strcmp(X,Y),
 6066** then sqlite3_value_pointer(V,Y) will return the pointer P.  ^Otherwise,
 6067** sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer()
 6068** routine is part of the [pointer passing interface] added for SQLite 3.20.0.
 6069**
 6070** ^(The sqlite3_value_type(V) interface returns the
 6071** [SQLITE_INTEGER | datatype code] for the initial datatype of the
 6072** [sqlite3_value] object V. The returned value is one of [SQLITE_INTEGER],
 6073** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].)^
 6074** Other interfaces might change the datatype for an sqlite3_value object.
 6075** For example, if the datatype is initially SQLITE_INTEGER and
 6076** sqlite3_value_text(V) is called to extract a text value for that
 6077** integer, then subsequent calls to sqlite3_value_type(V) might return
 6078** SQLITE_TEXT.  Whether or not a persistent internal datatype conversion
 6079** occurs is undefined and may change from one release of SQLite to the next.
 6080**
 6081** ^(The sqlite3_value_numeric_type() interface attempts to apply
 6082** numeric affinity to the value.  This means that an attempt is
 6083** made to convert the value to an integer or floating point.  If
 6084** such a conversion is possible without loss of information (in other
 6085** words, if the value is a string that looks like a number)
 6086** then the conversion is performed.  Otherwise no conversion occurs.
 6087** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
 6088**
 6089** ^Within the [xUpdate] method of a [virtual table], the
 6090** sqlite3_value_nochange(X) interface returns true if and only if
 6091** the column corresponding to X is unchanged by the UPDATE operation
 6092** that the xUpdate method call was invoked to implement and if
 6093** the prior [xColumn] method call that was invoked to extract
 6094** the value for that column returned without setting a result (probably
 6095** because it queried [sqlite3_vtab_nochange()] and found that the column
 6096** was unchanging).  ^Within an [xUpdate] method, any value for which
 6097** sqlite3_value_nochange(X) is true will in all other respects appear
 6098** to be a NULL value.  If sqlite3_value_nochange(X) is invoked anywhere other
 6099** than within an [xUpdate] method call for an UPDATE statement, then
 6100** the return value is arbitrary and meaningless.
 6101**
 6102** ^The sqlite3_value_frombind(X) interface returns non-zero if the
 6103** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()]
 6104** interfaces.  ^If X comes from an SQL literal value, or a table column,
 6105** or an expression, then sqlite3_value_frombind(X) returns zero.
 6106**
 6107** Please pay particular attention to the fact that the pointer returned
 6108** from [sqlite3_value_blob()], [sqlite3_value_text()], or
 6109** [sqlite3_value_text16()] can be invalidated by a subsequent call to
 6110** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()],
 6111** or [sqlite3_value_text16()].
 6112**
 6113** These routines must be called from the same thread as
 6114** the SQL function that supplied the [sqlite3_value*] parameters.
 6115**
 6116** As long as the input parameter is correct, these routines can only
 6117** fail if an out-of-memory error occurs while trying to do a
 6118** UTF8&rarr;UTF16 or UTF16&rarr;UTF8 conversion.
 6119** If an out-of-memory error occurs, then the return value from these
 6120** routines is the same as if the column had contained an SQL NULL value.
 6121** If the input sqlite3_value was not obtained from [sqlite3_value_dup()],
 6122** then valid SQL NULL returns can also be distinguished from
 6123** out-of-memory errors after extracting the value
 6124** by invoking the [sqlite3_errcode()] immediately after the suspicious
 6125** return value is obtained and before any
 6126** other SQLite interface is called on the same [database connection].
 6127** If the input sqlite3_value was obtained from sqlite3_value_dup() then
 6128** it is disconnected from the database connection and so sqlite3_errcode()
 6129** will not work.
 6130** In that case, the only way to distinguish an out-of-memory
 6131** condition from a true SQL NULL is to invoke sqlite3_value_type() on the
 6132** input to see if it is NULL prior to trying to extract the value.
 6133*/
 6134SQLITE_API const void *sqlite3_value_blob(sqlite3_value*);
 6135SQLITE_API double sqlite3_value_double(sqlite3_value*);
 6136SQLITE_API int sqlite3_value_int(sqlite3_value*);
 6137SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
 6138SQLITE_API void *sqlite3_value_pointer(sqlite3_value*, const char*);
 6139SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*);
 6140SQLITE_API const void *sqlite3_value_text16(sqlite3_value*);
 6141SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*);
 6142SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*);
 6143SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
 6144SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
 6145SQLITE_API int sqlite3_value_type(sqlite3_value*);
 6146SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
 6147SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
 6148SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
 6149
 6150/*
 6151** CAPI3REF: Report the internal text encoding state of an sqlite3_value object
 6152** METHOD: sqlite3_value
 6153**
 6154** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
 6155** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding
 6156** of the value X, assuming that X has type TEXT.)^  If sqlite3_value_type(X)
 6157** returns something other than SQLITE_TEXT, then the return value from
 6158** sqlite3_value_encoding(X) is meaningless.  ^Calls to
 6159** [sqlite3_value_text(X)], [sqlite3_value_text16(X)],
 6160** [sqlite3_value_text16be(X)],
 6161** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or
 6162** [sqlite3_value_bytes16(X)] might change the encoding of the value X and
 6163** thus change the return from subsequent calls to sqlite3_value_encoding(X).
 6164**
 6165** This routine is intended for used by applications that test and validate
 6166** the SQLite implementation.  This routine is inquiring about the opaque
 6167** internal state of an [sqlite3_value] object.  Ordinary applications should
 6168** not need to know what the internal state of an sqlite3_value object is and
 6169** hence should not need to use this interface.
 6170*/
 6171SQLITE_API int sqlite3_value_encoding(sqlite3_value*);
 6172
 6173/*
 6174** CAPI3REF: Finding The Subtype Of SQL Values
 6175** METHOD: sqlite3_value
 6176**
 6177** The sqlite3_value_subtype(V) function returns the subtype for
 6178** an [application-defined SQL function] argument V.  The subtype
 6179** information can be used to pass a limited amount of context from
 6180** one SQL function to another.  Use the [sqlite3_result_subtype()]
 6181** routine to set the subtype for the return value of an SQL function.
 6182**
 6183** Every [application-defined SQL function] that invokes this interface
 6184** should include the [SQLITE_SUBTYPE] property in the text
 6185** encoding argument when the function is [sqlite3_create_function|registered].
 6186** If the [SQLITE_SUBTYPE] property is omitted, then sqlite3_value_subtype()
 6187** might return zero instead of the upstream subtype in some corner cases.
 6188*/
 6189SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*);
 6190
 6191/*
 6192** CAPI3REF: Copy And Free SQL Values
 6193** METHOD: sqlite3_value
 6194**
 6195** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value]
 6196** object V and returns a pointer to that copy.  ^The [sqlite3_value] returned
 6197** is a [protected sqlite3_value] object even if the input is not.
 6198** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a
 6199** memory allocation fails. ^If V is a [pointer value], then the result
 6200** of sqlite3_value_dup(V) is a NULL value.
 6201**
 6202** ^The sqlite3_value_free(V) interface frees an [sqlite3_value] object
 6203** previously obtained from [sqlite3_value_dup()].  ^If V is a NULL pointer
 6204** then sqlite3_value_free(V) is a harmless no-op.
 6205*/
 6206SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value*);
 6207SQLITE_API void sqlite3_value_free(sqlite3_value*);
 6208
 6209/*
 6210** CAPI3REF: Obtain Aggregate Function Context
 6211** METHOD: sqlite3_context
 6212**
 6213** Implementations of aggregate SQL functions use this
 6214** routine to allocate memory for storing their state.
 6215**
 6216** ^The first time the sqlite3_aggregate_context(C,N) routine is called
 6217** for a particular aggregate function, SQLite allocates
 6218** N bytes of memory, zeroes out that memory, and returns a pointer
 6219** to the new memory. ^On second and subsequent calls to
 6220** sqlite3_aggregate_context() for the same aggregate function instance,
 6221** the same buffer is returned.  Sqlite3_aggregate_context() is normally
 6222** called once for each invocation of the xStep callback and then one
 6223** last time when the xFinal callback is invoked.  ^(When no rows match
 6224** an aggregate query, the xStep() callback of the aggregate function
 6225** implementation is never called and xFinal() is called exactly once.
 6226** In those cases, sqlite3_aggregate_context() might be called for the
 6227** first time from within xFinal().)^
 6228**
 6229** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer
 6230** when first called if N is less than or equal to zero or if a memory
 6231** allocation error occurs.
 6232**
 6233** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
 6234** determined by the N parameter on the first successful call.  Changing the
 6235** value of N in any subsequent call to sqlite3_aggregate_context() within
 6236** the same aggregate function instance will not resize the memory
 6237** allocation.)^  Within the xFinal callback, it is customary to set
 6238** N=0 in calls to sqlite3_aggregate_context(C,N) so that no
 6239** pointless memory allocations occur.
 6240**
 6241** ^SQLite automatically frees the memory allocated by
 6242** sqlite3_aggregate_context() when the aggregate query concludes.
 6243**
 6244** The first parameter must be a copy of the
 6245** [sqlite3_context | SQL function context] that is the first parameter
 6246** to the xStep or xFinal callback routine that implements the aggregate
 6247** function.
 6248**
 6249** This routine must be called from the same thread in which
 6250** the aggregate SQL function is running.
 6251*/
 6252SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
 6253
 6254/*
 6255** CAPI3REF: User Data For Functions
 6256** METHOD: sqlite3_context
 6257**
 6258** ^The sqlite3_user_data() interface returns a copy of
 6259** the pointer that was the pUserData parameter (the 5th parameter)
 6260** of the [sqlite3_create_function()]
 6261** and [sqlite3_create_function16()] routines that originally
 6262** registered the application defined function.
 6263**
 6264** This routine must be called from the same thread in which
 6265** the application-defined function is running.
 6266*/
 6267SQLITE_API void *sqlite3_user_data(sqlite3_context*);
 6268
 6269/*
 6270** CAPI3REF: Database Connection For Functions
 6271** METHOD: sqlite3_context
 6272**
 6273** ^The sqlite3_context_db_handle() interface returns a copy of
 6274** the pointer to the [database connection] (the 1st parameter)
 6275** of the [sqlite3_create_function()]
 6276** and [sqlite3_create_function16()] routines that originally
 6277** registered the application defined function.
 6278*/
 6279SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
 6280
 6281/*
 6282** CAPI3REF: Function Auxiliary Data
 6283** METHOD: sqlite3_context
 6284**
 6285** These functions may be used by (non-aggregate) SQL functions to
 6286** associate auxiliary data with argument values. If the same argument
 6287** value is passed to multiple invocations of the same SQL function during
 6288** query execution, under some circumstances the associated auxiliary data
 6289** might be preserved.  An example of where this might be useful is in a
 6290** regular-expression matching function. The compiled version of the regular
 6291** expression can be stored as auxiliary data associated with the pattern
 6292** string. Then as long as the pattern string remains the same,
 6293** the compiled regular expression can be reused on multiple
 6294** invocations of the same function.
 6295**
 6296** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the auxiliary
 6297** data associated by the sqlite3_set_auxdata(C,N,P,X) function with the
 6298** Nth argument value to the application-defined function.  ^N is zero
 6299** for the left-most function argument.  ^If there is no auxiliary data
 6300** associated with the function argument, the sqlite3_get_auxdata(C,N)
 6301** interface returns a NULL pointer.
 6302**
 6303** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as auxiliary data for the
 6304** N-th argument of the application-defined function.  ^Subsequent
 6305** calls to sqlite3_get_auxdata(C,N) return P from the most recent
 6306** sqlite3_set_auxdata(C,N,P,X) call if the auxiliary data is still valid or
 6307** NULL if the auxiliary data has been discarded.
 6308** ^After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL,
 6309** SQLite will invoke the destructor function X with parameter P exactly
 6310** once, when the auxiliary data is discarded.
 6311** SQLite is free to discard the auxiliary data at any time, including: <ul>
 6312** <li> ^(when the corresponding function parameter changes)^, or
 6313** <li> ^(when [sqlite3_reset()] or [sqlite3_finalize()] is called for the
 6314**      SQL statement)^, or
 6315** <li> ^(when sqlite3_set_auxdata() is invoked again on the same
 6316**       parameter)^, or
 6317** <li> ^(during the original sqlite3_set_auxdata() call when a memory
 6318**      allocation error occurs.)^
 6319** <li> ^(during the original sqlite3_set_auxdata() call if the function
 6320**      is evaluated during query planning instead of during query execution,
 6321**      as sometimes happens with [SQLITE_ENABLE_STAT4].)^ </ul>
 6322**
 6323** Note the last two bullets in particular.  The destructor X in
 6324** sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the
 6325** sqlite3_set_auxdata() interface even returns.  Hence sqlite3_set_auxdata()
 6326** should be called near the end of the function implementation and the
 6327** function implementation should not make any use of P after
 6328** sqlite3_set_auxdata() has been called.  Furthermore, a call to
 6329** sqlite3_get_auxdata() that occurs immediately after a corresponding call
 6330** to sqlite3_set_auxdata() might still return NULL if an out-of-memory
 6331** condition occurred during the sqlite3_set_auxdata() call or if the
 6332** function is being evaluated during query planning rather than during
 6333** query execution.
 6334**
 6335** ^(In practice, auxiliary data is preserved between function calls for
 6336** function parameters that are compile-time constants, including literal
 6337** values and [parameters] and expressions composed from the same.)^
 6338**
 6339** The value of the N parameter to these interfaces should be non-negative.
 6340** Future enhancements may make use of negative N values to define new
 6341** kinds of function caching behavior.
 6342**
 6343** These routines must be called from the same thread in which
 6344** the SQL function is running.
 6345**
 6346** See also: [sqlite3_get_clientdata()] and [sqlite3_set_clientdata()].
 6347*/
 6348SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N);
 6349SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
 6350
 6351/*
 6352** CAPI3REF: Database Connection Client Data
 6353** METHOD: sqlite3
 6354**
 6355** These functions are used to associate one or more named pointers
 6356** with a [database connection].
 6357** A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P
 6358** to be attached to [database connection] D using name N.  Subsequent
 6359** calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P
 6360** or a NULL pointer if there were no prior calls to
 6361** sqlite3_set_clientdata() with the same values of D and N.
 6362** Names are compared using strcmp() and are thus case sensitive.
 6363** It returns 0 on success and SQLITE_NOMEM on allocation failure.
 6364**
 6365** If P and X are both non-NULL, then the destructor X is invoked with
 6366** argument P on the first of the following occurrences:
 6367** <ul>
 6368** <li> An out-of-memory error occurs during the call to
 6369**      sqlite3_set_clientdata() which attempts to register pointer P.
 6370** <li> A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made
 6371**      with the same D and N parameters.
 6372** <li> The database connection closes.  SQLite does not make any guarantees
 6373**      about the order in which destructors are called, only that all
 6374**      destructors will be called exactly once at some point during the
 6375**      database connection closing process.
 6376** </ul>
 6377**
 6378** SQLite does not do anything with client data other than invoke
 6379** destructors on the client data at the appropriate time.  The intended
 6380** use for client data is to provide a mechanism for wrapper libraries
 6381** to store additional information about an SQLite database connection.
 6382**
 6383** There is no limit (other than available memory) on the number of different
 6384** client data pointers (with different names) that can be attached to a
 6385** single database connection.  However, the current implementation stores
 6386** the content on a linked list.  Insert and retrieval performance will
 6387** be proportional to the number of entries.  The design use case, and
 6388** the use case for which the implementation is optimized, is
 6389** that an application will store only small number of client data names,
 6390** typically just one or two.  This interface is not intended to be a
 6391** generalized key/value store for thousands or millions of keys.  It
 6392** will work for that, but performance might be disappointing.
 6393**
 6394** There is no way to enumerate the client data pointers
 6395** associated with a database connection.  The N parameter can be thought
 6396** of as a secret key such that only code that knows the secret key is able
 6397** to access the associated data.
 6398**
 6399** Security Warning:  These interfaces should not be exposed in scripting
 6400** languages or in other circumstances where it might be possible for an
 6401** attacker to invoke them.  Any agent that can invoke these interfaces
 6402** can probably also take control of the process.
 6403**
 6404** Database connection client data is only available for SQLite
 6405** version 3.44.0 ([dateof:3.44.0]) and later.
 6406**
 6407** See also: [sqlite3_set_auxdata()] and [sqlite3_get_auxdata()].
 6408*/
 6409SQLITE_API void *sqlite3_get_clientdata(sqlite3*,const char*);
 6410SQLITE_API int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*));
 6411
 6412/*
 6413** CAPI3REF: Constants Defining Special Destructor Behavior
 6414**
 6415** These are special values for the destructor that is passed in as the
 6416** final argument to routines like [sqlite3_result_blob()].  ^If the destructor
 6417** argument is SQLITE_STATIC, it means that the content pointer is constant
 6418** and will never change.  It does not need to be destroyed.  ^The
 6419** SQLITE_TRANSIENT value means that the content will likely change in
 6420** the near future and that SQLite should make its own private copy of
 6421** the content before returning.
 6422**
 6423** The typedef is necessary to work around problems in certain
 6424** C++ compilers.
 6425*/
 6426typedef void (*sqlite3_destructor_type)(void*);
 6427#define SQLITE_STATIC      ((sqlite3_destructor_type)0)
 6428#define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
 6429
 6430/*
 6431** CAPI3REF: Setting The Result Of An SQL Function
 6432** METHOD: sqlite3_context
 6433**
 6434** These routines are used by the xFunc or xFinal callbacks that
 6435** implement SQL functions and aggregates.  See
 6436** [sqlite3_create_function()] and [sqlite3_create_function16()]
 6437** for additional information.
 6438**
 6439** These functions work very much like the [parameter binding] family of
 6440** functions used to bind values to host parameters in prepared statements.
 6441** Refer to the [SQL parameter] documentation for additional information.
 6442**
 6443** ^The sqlite3_result_blob() interface sets the result from
 6444** an application-defined function to be the BLOB whose content is pointed
 6445** to by the second parameter and which is N bytes long where N is the
 6446** third parameter.
 6447**
 6448** ^The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N)
 6449** interfaces set the result of the application-defined function to be
 6450** a BLOB containing all zero bytes and N bytes in size.
 6451**
 6452** ^The sqlite3_result_double() interface sets the result from
 6453** an application-defined function to be a floating point value specified
 6454** by its 2nd argument.
 6455**
 6456** ^The sqlite3_result_error() and sqlite3_result_error16() functions
 6457** cause the implemented SQL function to throw an exception.
 6458** ^SQLite uses the string pointed to by the
 6459** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
 6460** as the text of an error message.  ^SQLite interprets the error
 6461** message string from sqlite3_result_error() as UTF-8. ^SQLite
 6462** interprets the string from sqlite3_result_error16() as UTF-16 using
 6463** the same [byte-order determination rules] as [sqlite3_bind_text16()].
 6464** ^If the third parameter to sqlite3_result_error()
 6465** or sqlite3_result_error16() is negative then SQLite takes as the error
 6466** message all text up through the first zero character.
 6467** ^If the third parameter to sqlite3_result_error() or
 6468** sqlite3_result_error16() is non-negative then SQLite takes that many
 6469** bytes (not characters) from the 2nd parameter as the error message.
 6470** ^The sqlite3_result_error() and sqlite3_result_error16()
 6471** routines make a private copy of the error message text before
 6472** they return.  Hence, the calling function can deallocate or
 6473** modify the text after they return without harm.
 6474** ^The sqlite3_result_error_code() function changes the error code
 6475** returned by SQLite as a result of an error in a function.  ^By default,
 6476** the error code is SQLITE_ERROR.  ^A subsequent call to sqlite3_result_error()
 6477** or sqlite3_result_error16() resets the error code to SQLITE_ERROR.
 6478**
 6479** ^The sqlite3_result_error_toobig() interface causes SQLite to throw an
 6480** error indicating that a string or BLOB is too long to represent.
 6481**
 6482** ^The sqlite3_result_error_nomem() interface causes SQLite to throw an
 6483** error indicating that a memory allocation failed.
 6484**
 6485** ^The sqlite3_result_int() interface sets the return value
 6486** of the application-defined function to be the 32-bit signed integer
 6487** value given in the 2nd argument.
 6488** ^The sqlite3_result_int64() interface sets the return value
 6489** of the application-defined function to be the 64-bit signed integer
 6490** value given in the 2nd argument.
 6491**
 6492** ^The sqlite3_result_null() interface sets the return value
 6493** of the application-defined function to be NULL.
 6494**
 6495** ^The sqlite3_result_text(), sqlite3_result_text16(),
 6496** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
 6497** set the return value of the application-defined function to be
 6498** a text string which is represented as UTF-8, UTF-16 native byte order,
 6499** UTF-16 little endian, or UTF-16 big endian, respectively.
 6500** ^The sqlite3_result_text64(C,Z,N,D,E) interface sets the return value of an
 6501** application-defined function to be a text string in an encoding
 6502** specified the E parameter, which must be one
 6503** of [SQLITE_UTF8], [SQLITE_UTF8_ZT], [SQLITE_UTF16], [SQLITE_UTF16BE],
 6504** or [SQLITE_UTF16LE].  ^The special value [SQLITE_UTF8_ZT] means that
 6505** the result text is both UTF-8 and zero-terminated.  In other words,
 6506** SQLITE_UTF8_ZT means that the Z array holds at least N+1 bytes and that
 6507** the Z&#91;N&#93; is zero.
 6508** ^SQLite takes the text result from the application from
 6509** the 2nd parameter of the sqlite3_result_text* interfaces.
 6510** ^If the 3rd parameter to any of the sqlite3_result_text* interfaces
 6511** other than sqlite3_result_text64() is negative, then SQLite computes
 6512** the string length itself by searching the 2nd parameter for the first
 6513** zero character.
 6514** ^If the 3rd parameter to the sqlite3_result_text* interfaces
 6515** is non-negative, then as many bytes (not characters) of the text
 6516** pointed to by the 2nd parameter are taken as the application-defined
 6517** function result.  If the 3rd parameter is non-negative, then it
 6518** must be the byte offset into the string where the NUL terminator would
 6519** appear if the string were NUL terminated.  If any NUL characters occur
 6520** in the string at a byte offset that is less than the value of the 3rd
 6521** parameter, then the resulting string will contain embedded NULs and the
 6522** result of expressions operating on strings with embedded NULs is undefined.
 6523** ^If the 4th parameter to the sqlite3_result_text* interfaces
 6524** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
 6525** function as the destructor on the text or BLOB result when it has
 6526** finished using that result.
 6527** ^If the 4th parameter to the sqlite3_result_text* interfaces or to
 6528** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
 6529** assumes that the text or BLOB result is in constant space and does not
 6530** copy the content of the parameter nor call a destructor on the content
 6531** when it has finished using that result.
 6532** ^If the 4th parameter to the sqlite3_result_text* interfaces
 6533** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
 6534** then SQLite makes a copy of the result into space obtained
 6535** from [sqlite3_malloc()] before it returns.
 6536**
 6537** ^For the sqlite3_result_text16(), sqlite3_result_text16le(), and
 6538** sqlite3_result_text16be() routines, and for sqlite3_result_text64()
 6539** when the encoding is not UTF8, if the input UTF16 begins with a
 6540** byte-order mark (BOM, U+FEFF) then the BOM is removed from the
 6541** string and the rest of the string is interpreted according to the
 6542** byte-order specified by the BOM.  ^The byte-order specified by
 6543** the BOM at the beginning of the text overrides the byte-order
 6544** specified by the interface procedure.  ^So, for example, if
 6545** sqlite3_result_text16le() is invoked with text that begins
 6546** with bytes 0xfe, 0xff (a big-endian byte-order mark) then the
 6547** first two bytes of input are skipped and the remaining input
 6548** is interpreted as UTF16BE text.
 6549**
 6550** ^For UTF16 input text to the sqlite3_result_text16(),
 6551** sqlite3_result_text16be(), sqlite3_result_text16le(), and
 6552** sqlite3_result_text64() routines, if the text contains invalid
 6553** UTF16 characters, the invalid characters might be converted
 6554** into the unicode replacement character, U+FFFD.
 6555**
 6556** ^The sqlite3_result_value() interface sets the result of
 6557** the application-defined function to be a copy of the
 6558** [unprotected sqlite3_value] object specified by the 2nd parameter.  ^The
 6559** sqlite3_result_value() interface makes a copy of the [sqlite3_value]
 6560** so that the [sqlite3_value] specified in the parameter may change or
 6561** be deallocated after sqlite3_result_value() returns without harm.
 6562** ^A [protected sqlite3_value] object may always be used where an
 6563** [unprotected sqlite3_value] object is required, so either
 6564** kind of [sqlite3_value] object can be used with this interface.
 6565**
 6566** ^The sqlite3_result_pointer(C,P,T,D) interface sets the result to an
 6567** SQL NULL value, just like [sqlite3_result_null(C)], except that it
 6568** also associates the host-language pointer P or type T with that
 6569** NULL value such that the pointer can be retrieved within an
 6570** [application-defined SQL function] using [sqlite3_value_pointer()].
 6571** ^If the D parameter is not NULL, then it is a pointer to a destructor
 6572** for the P parameter.  ^SQLite invokes D with P as its only argument
 6573** when SQLite is finished with P.  The T parameter should be a static
 6574** string and preferably a string literal. The sqlite3_result_pointer()
 6575** routine is part of the [pointer passing interface] added for SQLite 3.20.0.
 6576**
 6577** If these routines are called from within a different thread
 6578** than the one containing the application-defined function that received
 6579** the [sqlite3_context] pointer, the results are undefined.
 6580*/
 6581SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
 6582SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*,
 6583                           sqlite3_uint64,void(*)(void*));
 6584SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
 6585SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
 6586SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
 6587SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*);
 6588SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*);
 6589SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int);
 6590SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
 6591SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
 6592SQLITE_API void sqlite3_result_null(sqlite3_context*);
 6593SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
 6594SQLITE_API void sqlite3_result_text64(sqlite3_context*, const char *z, sqlite3_uint64 n,
 6595                           void(*)(void*), unsigned char encoding);
 6596SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
 6597SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
 6598SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
 6599SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
 6600SQLITE_API void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*));
 6601SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
 6602SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);
 6603
 6604
 6605/*
 6606** CAPI3REF: Setting The Subtype Of An SQL Function
 6607** METHOD: sqlite3_context
 6608**
 6609** The sqlite3_result_subtype(C,T) function causes the subtype of
 6610** the result from the [application-defined SQL function] with
 6611** [sqlite3_context] C to be the value T.  Only the lower 8 bits
 6612** of the subtype T are preserved in current versions of SQLite;
 6613** higher order bits are discarded.
 6614** The number of subtype bytes preserved by SQLite might increase
 6615** in future releases of SQLite.
 6616**
 6617** Every [application-defined SQL function] that invokes this interface
 6618** should include the [SQLITE_RESULT_SUBTYPE] property in its
 6619** text encoding argument when the SQL function is
 6620** [sqlite3_create_function|registered].  If the [SQLITE_RESULT_SUBTYPE]
 6621** property is omitted from the function that invokes sqlite3_result_subtype(),
 6622** then in some cases the sqlite3_result_subtype() might fail to set
 6623** the result subtype.
 6624**
 6625** If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any
 6626** SQL function that invokes the sqlite3_result_subtype() interface
 6627** and that does not have the SQLITE_RESULT_SUBTYPE property will raise
 6628** an error.  Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1
 6629** by default.
 6630*/
 6631SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int);
 6632
 6633/*
 6634** CAPI3REF: Define New Collating Sequences
 6635** METHOD: sqlite3
 6636**
 6637** ^These functions add, remove, or modify a [collation] associated
 6638** with the [database connection] specified as the first argument.
 6639**
 6640** ^The name of the collation is a UTF-8 string
 6641** for sqlite3_create_collation() and sqlite3_create_collation_v2()
 6642** and a UTF-16 string in native byte order for sqlite3_create_collation16().
 6643** ^Collation names that compare equal according to [sqlite3_strnicmp()] are
 6644** considered to be the same name.
 6645**
 6646** ^(The third argument (eTextRep) must be one of the constants:
 6647** <ul>
 6648** <li> [SQLITE_UTF8],
 6649** <li> [SQLITE_UTF16LE],
 6650** <li> [SQLITE_UTF16BE],
 6651** <li> [SQLITE_UTF16], or
 6652** <li> [SQLITE_UTF16_ALIGNED].
 6653** </ul>)^
 6654** ^The eTextRep argument determines the encoding of strings passed
 6655** to the collating function callback, xCompare.
 6656** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
 6657** force strings to be UTF16 with native byte order.
 6658** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
 6659** on an even byte address.
 6660**
 6661** ^The fourth argument, pArg, is an application data pointer that is passed
 6662** through as the first argument to the collating function callback.
 6663**
 6664** ^The fifth argument, xCompare, is a pointer to the collating function.
 6665** ^Multiple collating functions can be registered using the same name but
 6666** with different eTextRep parameters and SQLite will use whichever
 6667** function requires the least amount of data transformation.
 6668** ^If the xCompare argument is NULL then the collating function is
 6669** deleted.  ^When all collating functions having the same name are deleted,
 6670** that collation is no longer usable.
 6671**
 6672** ^The collating function callback is invoked with a copy of the pArg
 6673** application data pointer and with two strings in the encoding specified
 6674** by the eTextRep argument.  The two integer parameters to the collating
 6675** function callback are the length of the two strings, in bytes. The collating
 6676** function must return an integer that is negative, zero, or positive
 6677** if the first string is less than, equal to, or greater than the second,
 6678** respectively.  A collating function must always return the same answer
 6679** given the same inputs.  If two or more collating functions are registered
 6680** to the same collation name (using different eTextRep values) then all
 6681** must give an equivalent answer when invoked with equivalent strings.
 6682** The collating function must obey the following properties for all
 6683** strings A, B, and C:
 6684**
 6685** <ol>
 6686** <li> If A==B then B==A.
 6687** <li> If A==B and B==C then A==C.
 6688** <li> If A&lt;B THEN B&gt;A.
 6689** <li> If A&lt;B and B&lt;C then A&lt;C.
 6690** </ol>
 6691**
 6692** If a collating function fails any of the above constraints and that
 6693** collating function is registered and used, then the behavior of SQLite
 6694** is undefined.
 6695**
 6696** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation()
 6697** with the addition that the xDestroy callback is invoked on pArg when
 6698** the collating function is deleted.
 6699** ^Collating functions are deleted when they are overridden by later
 6700** calls to the collation creation functions or when the
 6701** [database connection] is closed using [sqlite3_close()].
 6702**
 6703** ^The xDestroy callback is <u>not</u> called if the
 6704** sqlite3_create_collation_v2() function fails.  Applications that invoke
 6705** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should
 6706** check the return code and dispose of the application data pointer
 6707** themselves rather than expecting SQLite to deal with it for them.
 6708** This is different from every other SQLite interface.  The inconsistency
 6709** is unfortunate but cannot be changed without breaking backwards
 6710** compatibility.
 6711**
 6712** See also:  [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
 6713*/
 6714SQLITE_API int sqlite3_create_collation(
 6715  sqlite3*,
 6716  const char *zName,
 6717  int eTextRep,
 6718  void *pArg,
 6719  int(*xCompare)(void*,int,const void*,int,const void*)
 6720);
 6721SQLITE_API int sqlite3_create_collation_v2(
 6722  sqlite3*,
 6723  const char *zName,
 6724  int eTextRep,
 6725  void *pArg,
 6726  int(*xCompare)(void*,int,const void*,int,const void*),
 6727  void(*xDestroy)(void*)
 6728);
 6729SQLITE_API int sqlite3_create_collation16(
 6730  sqlite3*,
 6731  const void *zName,
 6732  int eTextRep,
 6733  void *pArg,
 6734  int(*xCompare)(void*,int,const void*,int,const void*)
 6735);
 6736
 6737/*
 6738** CAPI3REF: Collation Needed Callbacks
 6739** METHOD: sqlite3
 6740**
 6741** ^To avoid having to register all collation sequences before a database
 6742** can be used, a single callback function may be registered with the
 6743** [database connection] to be invoked whenever an undefined collation
 6744** sequence is required.
 6745**
 6746** ^If the function is registered using the sqlite3_collation_needed() API,
 6747** then it is passed the names of undefined collation sequences as strings
 6748** encoded in UTF-8. ^If sqlite3_collation_needed16() is used,
 6749** the names are passed as UTF-16 in machine native byte order.
 6750** ^A call to either function replaces the existing collation-needed callback.
 6751**
 6752** ^(When the callback is invoked, the first argument passed is a copy
 6753** of the second argument to sqlite3_collation_needed() or
 6754** sqlite3_collation_needed16().  The second argument is the database
 6755** connection.  The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE],
 6756** or [SQLITE_UTF16LE], indicating the most desirable form of the collation
 6757** sequence function required.  The fourth parameter is the name of the
 6758** required collation sequence.)^
 6759**
 6760** The callback function should register the desired collation using
 6761** [sqlite3_create_collation()], [sqlite3_create_collation16()], or
 6762** [sqlite3_create_collation_v2()].
 6763*/
 6764SQLITE_API int sqlite3_collation_needed(
 6765  sqlite3*,
 6766  void*,
 6767  void(*)(void*,sqlite3*,int eTextRep,const char*)
 6768);
 6769SQLITE_API int sqlite3_collation_needed16(
 6770  sqlite3*,
 6771  void*,
 6772  void(*)(void*,sqlite3*,int eTextRep,const void*)
 6773);
 6774
 6775#ifdef SQLITE_ENABLE_CEROD
 6776/*
 6777** Specify the activation key for a CEROD database.  Unless
 6778** activated, none of the CEROD routines will work.
 6779*/
 6780SQLITE_API void sqlite3_activate_cerod(
 6781  const char *zPassPhrase        /* Activation phrase */
 6782);
 6783#endif
 6784
 6785/*
 6786** CAPI3REF: Suspend Execution For A Short Time
 6787**
 6788** The sqlite3_sleep() function causes the current thread to suspend execution
 6789** for at least a number of milliseconds specified in its parameter.
 6790**
 6791** If the operating system does not support sleep requests with
 6792** millisecond time resolution, then the time will be rounded up to
 6793** the nearest second. The number of milliseconds of sleep actually
 6794** requested from the operating system is returned.
 6795**
 6796** ^SQLite implements this interface by calling the xSleep()
 6797** method of the default [sqlite3_vfs] object.  If the xSleep() method
 6798** of the default VFS is not implemented correctly, or not implemented at
 6799** all, then the behavior of sqlite3_sleep() may deviate from the description
 6800** in the previous paragraphs.
 6801**
 6802** If a negative argument is passed to sqlite3_sleep() the results vary by
 6803** VFS and operating system.  Some system treat a negative argument as an
 6804** instruction to sleep forever.  Others understand it to mean do not sleep
 6805** at all. ^In SQLite version 3.42.0 and later, a negative
 6806** argument passed into sqlite3_sleep() is changed to zero before it is relayed
 6807** down into the xSleep method of the VFS.
 6808*/
 6809SQLITE_API int sqlite3_sleep(int);
 6810
 6811/*
 6812** CAPI3REF: Name Of The Folder Holding Temporary Files
 6813**
 6814** ^(If this global variable is made to point to a string which is
 6815** the name of a folder (a.k.a. directory), then all temporary files
 6816** created by SQLite when using a built-in [sqlite3_vfs | VFS]
 6817** will be placed in that directory.)^  ^If this variable
 6818** is a NULL pointer, then SQLite performs a search for an appropriate
 6819** temporary file directory.
 6820**
 6821** Applications are strongly discouraged from using this global variable.
 6822** It is required to set a temporary folder on Windows Runtime (WinRT).
 6823** But for all other platforms, it is highly recommended that applications
 6824** neither read nor write this variable.  This global variable is a relic
 6825** that exists for backwards compatibility of legacy applications and should
 6826** be avoided in new projects.
 6827**
 6828** It is not safe to read or modify this variable in more than one
 6829** thread at a time.  It is not safe to read or modify this variable
 6830** if a [database connection] is being used at the same time in a separate
 6831** thread.
 6832** It is intended that this variable be set once
 6833** as part of process initialization and before any SQLite interface
 6834** routines have been called and that this variable remain unchanged
 6835** thereafter.
 6836**
 6837** ^The [temp_store_directory pragma] may modify this variable and cause
 6838** it to point to memory obtained from [sqlite3_malloc].  ^Furthermore,
 6839** the [temp_store_directory pragma] always assumes that any string
 6840** that this variable points to is held in memory obtained from
 6841** [sqlite3_malloc] and the pragma may attempt to free that memory
 6842** using [sqlite3_free].
 6843** Hence, if this variable is modified directly, either it should be
 6844** made NULL or made to point to memory obtained from [sqlite3_malloc]
 6845** or else the use of the [temp_store_directory pragma] should be avoided.
 6846** Except when requested by the [temp_store_directory pragma], SQLite
 6847** does not free the memory that sqlite3_temp_directory points to.  If
 6848** the application wants that memory to be freed, it must do
 6849** so itself, taking care to only do so after all [database connection]
 6850** objects have been destroyed.
 6851**
 6852** <b>Note to Windows Runtime users:</b>  The temporary directory must be set
 6853** prior to calling [sqlite3_open] or [sqlite3_open_v2].  Otherwise, various
 6854** features that require the use of temporary files may fail.  Here is an
 6855** example of how to do this using C++ with the Windows Runtime:
 6856**
 6857** <blockquote><pre>
 6858** LPCWSTR zPath = Windows::Storage::ApplicationData::Current->
 6859** &nbsp;     TemporaryFolder->Path->Data();
 6860** char zPathBuf&#91;MAX_PATH + 1&#93;;
 6861** memset(zPathBuf, 0, sizeof(zPathBuf));
 6862** WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf),
 6863** &nbsp;     NULL, NULL);
 6864** sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf);
 6865** </pre></blockquote>
 6866*/
 6867SQLITE_API SQLITE_EXTERN char *sqlite3_temp_directory;
 6868
 6869/*
 6870** CAPI3REF: Name Of The Folder Holding Database Files
 6871**
 6872** ^(If this global variable is made to point to a string which is
 6873** the name of a folder (a.k.a. directory), then all database files
 6874** specified with a relative pathname and created or accessed by
 6875** SQLite when using a built-in windows [sqlite3_vfs | VFS] will be assumed
 6876** to be relative to that directory.)^ ^If this variable is a NULL
 6877** pointer, then SQLite assumes that all database files specified
 6878** with a relative pathname are relative to the current directory
 6879** for the process.  Only the windows VFS makes use of this global
 6880** variable; it is ignored by the unix VFS.
 6881**
 6882** Changing the value of this variable while a database connection is
 6883** open can result in a corrupt database.
 6884**
 6885** It is not safe to read or modify this variable in more than one
 6886** thread at a time.  It is not safe to read or modify this variable
 6887** if a [database connection] is being used at the same time in a separate
 6888** thread.
 6889** It is intended that this variable be set once
 6890** as part of process initialization and before any SQLite interface
 6891** routines have been called and that this variable remain unchanged
 6892** thereafter.
 6893**
 6894** ^The [data_store_directory pragma] may modify this variable and cause
 6895** it to point to memory obtained from [sqlite3_malloc].  ^Furthermore,
 6896** the [data_store_directory pragma] always assumes that any string
 6897** that this variable points to is held in memory obtained from
 6898** [sqlite3_malloc] and the pragma may attempt to free that memory
 6899** using [sqlite3_free].
 6900** Hence, if this variable is modified directly, either it should be
 6901** made NULL or made to point to memory obtained from [sqlite3_malloc]
 6902** or else the use of the [data_store_directory pragma] should be avoided.
 6903*/
 6904SQLITE_API SQLITE_EXTERN char *sqlite3_data_directory;
 6905
 6906/*
 6907** CAPI3REF: Win32 Specific Interface
 6908**
 6909** These interfaces are available only on Windows.  The
 6910** [sqlite3_win32_set_directory] interface is used to set the value associated
 6911** with the [sqlite3_temp_directory] or [sqlite3_data_directory] variable, to
 6912** zValue, depending on the value of the type parameter.  The zValue parameter
 6913** should be NULL to cause the previous value to be freed via [sqlite3_free];
 6914** a non-NULL value will be copied into memory obtained from [sqlite3_malloc]
 6915** prior to being used.  The [sqlite3_win32_set_directory] interface returns
 6916** [SQLITE_OK] to indicate success, [SQLITE_ERROR] if the type is unsupported,
 6917** or [SQLITE_NOMEM] if memory could not be allocated.  The value of the
 6918** [sqlite3_data_directory] variable is intended to act as a replacement for
 6919** the current directory on the sub-platforms of Win32 where that concept is
 6920** not present, e.g. WinRT and UWP.  The [sqlite3_win32_set_directory8] and
 6921** [sqlite3_win32_set_directory16] interfaces behave exactly the same as the
 6922** sqlite3_win32_set_directory interface except the string parameter must be
 6923** UTF-8 or UTF-16, respectively.
 6924*/
 6925SQLITE_API int sqlite3_win32_set_directory(
 6926  unsigned long type, /* Identifier for directory being set or reset */
 6927  void *zValue        /* New value for directory being set or reset */
 6928);
 6929SQLITE_API int sqlite3_win32_set_directory8(unsigned long type, const char *zValue);
 6930SQLITE_API int sqlite3_win32_set_directory16(unsigned long type, const void *zValue);
 6931
 6932/*
 6933** CAPI3REF: Win32 Directory Types
 6934**
 6935** These macros are only available on Windows.  They define the allowed values
 6936** for the type argument to the [sqlite3_win32_set_directory] interface.
 6937*/
 6938#define SQLITE_WIN32_DATA_DIRECTORY_TYPE  1
 6939#define SQLITE_WIN32_TEMP_DIRECTORY_TYPE  2
 6940
 6941/*
 6942** CAPI3REF: Test For Auto-Commit Mode
 6943** KEYWORDS: {autocommit mode}
 6944** METHOD: sqlite3
 6945**
 6946** ^The sqlite3_get_autocommit() interface returns non-zero or
 6947** zero if the given database connection is or is not in autocommit mode,
 6948** respectively.  ^Autocommit mode is on by default.
 6949** ^Autocommit mode is disabled by a [BEGIN] statement.
 6950** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK].
 6951**
 6952** If certain kinds of errors occur on a statement within a multi-statement
 6953** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR],
 6954** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the
 6955** transaction might be rolled back automatically.  The only way to
 6956** find out whether SQLite automatically rolled back the transaction after
 6957** an error is to use this function.
 6958**
 6959** If another thread changes the autocommit status of the database
 6960** connection while this routine is running, then the return value
 6961** is undefined.
 6962*/
 6963SQLITE_API int sqlite3_get_autocommit(sqlite3*);
 6964
 6965/*
 6966** CAPI3REF: Find The Database Handle Of A Prepared Statement
 6967** METHOD: sqlite3_stmt
 6968**
 6969** ^The sqlite3_db_handle interface returns the [database connection] handle
 6970** to which a [prepared statement] belongs.  ^The [database connection]
 6971** returned by sqlite3_db_handle is the same [database connection]
 6972** that was the first argument
 6973** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
 6974** create the statement in the first place.
 6975*/
 6976SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
 6977
 6978/*
 6979** CAPI3REF: Return The Schema Name For A Database Connection
 6980** METHOD: sqlite3
 6981**
 6982** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
 6983** for the N-th database on database connection D, or a NULL pointer if N is
 6984** out of range.  An N value of 0 means the main database file.  An N of 1 is
 6985** the "temp" schema.  Larger values of N correspond to various ATTACH-ed
 6986** databases.
 6987**
 6988** Space to hold the string that is returned by sqlite3_db_name() is managed
 6989** by SQLite itself.  The string might be deallocated by any operation that
 6990** changes the schema, including [ATTACH] or [DETACH] or calls to
 6991** [sqlite3_serialize()] or [sqlite3_deserialize()], even operations that
 6992** occur on a different thread.  Applications that need to
 6993** remember the string long-term should make their own copy.  Applications that
 6994** are accessing the same database connection simultaneously on multiple
 6995** threads should mutex-protect calls to this API and should make their own
 6996** private copy of the result prior to releasing the mutex.
 6997*/
 6998SQLITE_API const char *sqlite3_db_name(sqlite3 *db, int N);
 6999
 7000/*
 7001** CAPI3REF: Return The Filename For A Database Connection
 7002** METHOD: sqlite3
 7003**
 7004** ^The sqlite3_db_filename(D,N) interface returns a pointer to the filename
 7005** associated with database N of connection D.
 7006** ^If there is no attached database N on the database
 7007** connection D, or if database N is a temporary or in-memory database, then
 7008** this function will return either a NULL pointer or an empty string.
 7009**
 7010** ^The string value returned by this routine is owned and managed by
 7011** the database connection.  ^The value will be valid until the database N
 7012** is [DETACH]-ed or until the database connection closes.
 7013**
 7014** ^The filename returned by this function is the output of the
 7015** xFullPathname method of the [VFS].  ^In other words, the filename
 7016** will be an absolute pathname, even if the filename used
 7017** to open the database originally was a URI or relative pathname.
 7018**
 7019** If the filename pointer returned by this routine is not NULL, then it
 7020** can be used as the filename input parameter to these routines:
 7021** <ul>
 7022** <li> [sqlite3_uri_parameter()]
 7023** <li> [sqlite3_uri_boolean()]
 7024** <li> [sqlite3_uri_int64()]
 7025** <li> [sqlite3_filename_database()]
 7026** <li> [sqlite3_filename_journal()]
 7027** <li> [sqlite3_filename_wal()]
 7028** </ul>
 7029*/
 7030SQLITE_API sqlite3_filename sqlite3_db_filename(sqlite3 *db, const char *zDbName);
 7031
 7032/*
 7033** CAPI3REF: Determine if a database is read-only
 7034** METHOD: sqlite3
 7035**
 7036** ^The sqlite3_db_readonly(D,N) interface returns 1 if the database N
 7037** of connection D is read-only, 0 if it is read/write, or -1 if N is not
 7038** the name of a database on connection D.
 7039*/
 7040SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName);
 7041
 7042/*
 7043** CAPI3REF: Determine the transaction state of a database
 7044** METHOD: sqlite3
 7045**
 7046** ^The sqlite3_txn_state(D,S) interface returns the current
 7047** [transaction state] of schema S in database connection D.  ^If S is NULL,
 7048** then the highest transaction state of any schema on database connection D
 7049** is returned.  Transaction states are (in order of lowest to highest):
 7050** <ol>
 7051** <li value="0"> SQLITE_TXN_NONE
 7052** <li value="1"> SQLITE_TXN_READ
 7053** <li value="2"> SQLITE_TXN_WRITE
 7054** </ol>
 7055** ^If the S argument to sqlite3_txn_state(D,S) is not the name of
 7056** a valid schema, then -1 is returned.
 7057*/
 7058SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema);
 7059
 7060/*
 7061** CAPI3REF: Allowed return values from sqlite3_txn_state()
 7062** KEYWORDS: {transaction state}
 7063**
 7064** These constants define the current transaction state of a database file.
 7065** ^The [sqlite3_txn_state(D,S)] interface returns one of these
 7066** constants in order to describe the transaction state of schema S
 7067** in [database connection] D.
 7068**
 7069** <dl>
 7070** [[SQLITE_TXN_NONE]] <dt>SQLITE_TXN_NONE</dt>
 7071** <dd>The SQLITE_TXN_NONE state means that no transaction is currently
 7072** pending.</dd>
 7073**
 7074** [[SQLITE_TXN_READ]] <dt>SQLITE_TXN_READ</dt>
 7075** <dd>The SQLITE_TXN_READ state means that the database is currently
 7076** in a read transaction.  Content has been read from the database file
 7077** but nothing in the database file has changed.  The transaction state
 7078** will be advanced to SQLITE_TXN_WRITE if any changes occur and there are
 7079** no other conflicting concurrent write transactions.  The transaction
 7080** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or
 7081** [COMMIT].</dd>
 7082**
 7083** [[SQLITE_TXN_WRITE]] <dt>SQLITE_TXN_WRITE</dt>
 7084** <dd>The SQLITE_TXN_WRITE state means that the database is currently
 7085** in a write transaction.  Content has been written to the database file
 7086** but has not yet committed.  The transaction state will change to
 7087** SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].</dd>
 7088*/
 7089#define SQLITE_TXN_NONE  0
 7090#define SQLITE_TXN_READ  1
 7091#define SQLITE_TXN_WRITE 2
 7092
 7093/*
 7094** CAPI3REF: Find the next prepared statement
 7095** METHOD: sqlite3
 7096**
 7097** ^This interface returns a pointer to the next [prepared statement] after
 7098** pStmt associated with the [database connection] pDb.  ^If pStmt is NULL
 7099** then this interface returns a pointer to the first prepared statement
 7100** associated with the database connection pDb.  ^If no prepared statement
 7101** satisfies the conditions of this routine, it returns NULL.
 7102**
 7103** The [database connection] pointer D in a call to
 7104** [sqlite3_next_stmt(D,S)] must refer to an open database
 7105** connection and in particular must not be a NULL pointer.
 7106*/
 7107SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
 7108
 7109/*
 7110** CAPI3REF: Commit And Rollback Notification Callbacks
 7111** METHOD: sqlite3
 7112**
 7113** ^The sqlite3_commit_hook() interface registers a callback
 7114** function to be invoked whenever a transaction is [COMMIT | committed].
 7115** ^Any callback set by a previous call to sqlite3_commit_hook()
 7116** for the same database connection is overridden.
 7117** ^The sqlite3_rollback_hook() interface registers a callback
 7118** function to be invoked whenever a transaction is [ROLLBACK | rolled back].
 7119** ^Any callback set by a previous call to sqlite3_rollback_hook()
 7120** for the same database connection is overridden.
 7121** ^The pArg argument is passed through to the callback.
 7122** ^If the callback on a commit hook function returns non-zero,
 7123** then the commit is converted into a rollback.
 7124**
 7125** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
 7126** return the P argument from the previous call of the same function
 7127** on the same [database connection] D, or NULL for
 7128** the first call for each function on D.
 7129**
 7130** The commit and rollback hook callbacks are not reentrant.
 7131** The callback implementation must not do anything that will modify
 7132** the database connection that invoked the callback.  Any actions
 7133** to modify the database connection must be deferred until after the
 7134** completion of the [sqlite3_step()] call that triggered the commit
 7135** or rollback hook in the first place.
 7136** Note that running any other SQL statements, including SELECT statements,
 7137** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify
 7138** the database connections for the meaning of "modify" in this paragraph.
 7139**
 7140** ^Registering a NULL function disables the callback.
 7141**
 7142** ^When the commit hook callback routine returns zero, the [COMMIT]
 7143** operation is allowed to continue normally.  ^If the commit hook
 7144** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK].
 7145** ^The rollback hook is invoked on a rollback that results from a commit
 7146** hook returning non-zero, just as it would be with any other rollback.
 7147**
 7148** ^For the purposes of this API, a transaction is said to have been
 7149** rolled back if an explicit "ROLLBACK" statement is executed, or
 7150** an error or constraint causes an implicit rollback to occur.
 7151** ^The rollback callback is not invoked if a transaction is
 7152** automatically rolled back because the database connection is closed.
 7153**
 7154** See also the [sqlite3_update_hook()] interface.
 7155*/
 7156SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
 7157SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
 7158
 7159/*
 7160** CAPI3REF: Autovacuum Compaction Amount Callback
 7161** METHOD: sqlite3
 7162**
 7163** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
 7164** function C that is invoked prior to each autovacuum of the database
 7165** file.  ^The callback is passed a copy of the generic data pointer (P),
 7166** the schema-name of the attached database that is being autovacuumed,
 7167** the size of the database file in pages, the number of free pages,
 7168** and the number of bytes per page, respectively.  The callback should
 7169** return the number of free pages that should be removed by the
 7170** autovacuum.  ^If the callback returns zero, then no autovacuum happens.
 7171** ^If the value returned is greater than or equal to the number of
 7172** free pages, then a complete autovacuum happens.
 7173**
 7174** <p>^If there are multiple ATTACH-ed database files that are being
 7175** modified as part of a transaction commit, then the autovacuum pages
 7176** callback is invoked separately for each file.
 7177**
 7178** <p><b>The callback is not reentrant.</b> The callback function should
 7179** not attempt to invoke any other SQLite interface.  If it does, bad
 7180** things may happen, including segmentation faults and corrupt database
 7181** files.  The callback function should be a simple function that
 7182** does some arithmetic on its input parameters and returns a result.
 7183**
 7184** ^The X parameter to sqlite3_autovacuum_pages(D,C,P,X) is an optional
 7185** destructor for the P parameter.  ^If X is not NULL, then X(P) is
 7186** invoked whenever the database connection closes or when the callback
 7187** is overwritten by another invocation of sqlite3_autovacuum_pages().
 7188**
 7189** <p>^There is only one autovacuum pages callback per database connection.
 7190** ^Each call to the sqlite3_autovacuum_pages() interface overrides all
 7191** previous invocations for that database connection.  ^If the callback
 7192** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer,
 7193** then the autovacuum steps callback is canceled.  The return value
 7194** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might
 7195** be some other error code if something goes wrong.  The current
 7196** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other
 7197** return codes might be added in future releases.
 7198**
 7199** <p>If no autovacuum pages callback is specified (the usual case) or
 7200** a NULL pointer is provided for the callback,
 7201** then the default behavior is to vacuum all free pages.  So, in other
 7202** words, the default behavior is the same as if the callback function
 7203** were something like this:
 7204**
 7205** <blockquote><pre>
 7206** &nbsp;   unsigned int demonstration_autovac_pages_callback(
 7207** &nbsp;     void *pClientData,
 7208** &nbsp;     const char *zSchema,
 7209** &nbsp;     unsigned int nDbPage,
 7210** &nbsp;     unsigned int nFreePage,
 7211** &nbsp;     unsigned int nBytePerPage
 7212** &nbsp;   ){
 7213** &nbsp;     return nFreePage;
 7214** &nbsp;   }
 7215** </pre></blockquote>
 7216*/
 7217SQLITE_API int sqlite3_autovacuum_pages(
 7218  sqlite3 *db,
 7219  unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int),
 7220  void*,
 7221  void(*)(void*)
 7222);
 7223
 7224
 7225/*
 7226** CAPI3REF: Data Change Notification Callbacks
 7227** METHOD: sqlite3
 7228**
 7229** ^The sqlite3_update_hook() interface registers a callback function
 7230** with the [database connection] identified by the first argument
 7231** to be invoked whenever a row is updated, inserted or deleted in
 7232** a [rowid table].
 7233** ^Any callback set by a previous call to this function
 7234** for the same database connection is overridden.
 7235**
 7236** ^The second argument is a pointer to the function to invoke when a
 7237** row is updated, inserted or deleted in a rowid table.
 7238** ^The update hook is disabled by invoking sqlite3_update_hook()
 7239** with a NULL pointer as the second parameter.
 7240** ^The first argument to the callback is a copy of the third argument
 7241** to sqlite3_update_hook().
 7242** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE],
 7243** or [SQLITE_UPDATE], depending on the operation that caused the callback
 7244** to be invoked.
 7245** ^The third and fourth arguments to the callback contain pointers to the
 7246** database and table name containing the affected row.
 7247** ^The final callback parameter is the [rowid] of the row.
 7248** ^In the case of an update, this is the [rowid] after the update takes place.
 7249**
 7250** ^(The update hook is not invoked when internal system tables are
 7251** modified (i.e. sqlite_sequence).)^
 7252** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified.
 7253**
 7254** ^In the current implementation, the update hook
 7255** is not invoked when conflicting rows are deleted because of an
 7256** [ON CONFLICT | ON CONFLICT REPLACE] clause.  ^Nor is the update hook
 7257** invoked when rows are deleted using the [truncate optimization].
 7258** The exceptions defined in this paragraph might change in a future
 7259** release of SQLite.
 7260**
 7261** Whether the update hook is invoked before or after the
 7262** corresponding change is currently unspecified and may differ
 7263** depending on the type of change. Do not rely on the order of the
 7264** hook call with regards to the final result of the operation which
 7265** triggers the hook.
 7266**
 7267** The update hook implementation must not do anything that will modify
 7268** the database connection that invoked the update hook.  Any actions
 7269** to modify the database connection must be deferred until after the
 7270** completion of the [sqlite3_step()] call that triggered the update hook.
 7271** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
 7272** database connections for the meaning of "modify" in this paragraph.
 7273**
 7274** ^The sqlite3_update_hook(D,C,P) function
 7275** returns the P argument from the previous call
 7276** on the same [database connection] D, or NULL for
 7277** the first call on D.
 7278**
 7279** See also the [sqlite3_commit_hook()], [sqlite3_rollback_hook()],
 7280** and [sqlite3_preupdate_hook()] interfaces.
 7281*/
 7282SQLITE_API void *sqlite3_update_hook(
 7283  sqlite3*,
 7284  void(*)(void *,int ,char const *,char const *,sqlite3_int64),
 7285  void*
 7286);
 7287
 7288/*
 7289** CAPI3REF: Enable Or Disable Shared Pager Cache
 7290**
 7291** ^(This routine enables or disables the sharing of the database cache
 7292** and schema data structures between [database connection | connections]
 7293** to the same database. Sharing is enabled if the argument is true
 7294** and disabled if the argument is false.)^
 7295**
 7296** This interface is omitted if SQLite is compiled with
 7297** [-DSQLITE_OMIT_SHARED_CACHE].  The [-DSQLITE_OMIT_SHARED_CACHE]
 7298** compile-time option is recommended because the
 7299** [use of shared cache mode is discouraged].
 7300**
 7301** ^Cache sharing is enabled and disabled for an entire process.
 7302** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
 7303** In prior versions of SQLite,
 7304** sharing was enabled or disabled for each thread separately.
 7305**
 7306** ^(The cache sharing mode set by this interface effects all subsequent
 7307** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()].
 7308** Existing database connections continue to use the sharing mode
 7309** that was in effect at the time they were opened.)^
 7310**
 7311** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled
 7312** successfully.  An [error code] is returned otherwise.)^
 7313**
 7314** ^Shared cache is disabled by default. It is recommended that it stay
 7315** that way.  In other words, do not use this routine.  This interface
 7316** continues to be provided for historical compatibility, but its use is
 7317** discouraged.  Any use of shared cache is discouraged.  If shared cache
 7318** must be used, it is recommended that shared cache only be enabled for
 7319** individual database connections using the [sqlite3_open_v2()] interface
 7320** with the [SQLITE_OPEN_SHAREDCACHE] flag.
 7321**
 7322** Note: This method is disabled on MacOS X 10.7 and iOS version 5.0
 7323** and will always return SQLITE_MISUSE. On those systems,
 7324** shared cache mode should be enabled per-database connection via
 7325** [sqlite3_open_v2()] with [SQLITE_OPEN_SHAREDCACHE].
 7326**
 7327** This interface is threadsafe on processors where writing a
 7328** 32-bit integer is atomic.
 7329**
 7330** See Also:  [SQLite Shared-Cache Mode]
 7331*/
 7332SQLITE_API int sqlite3_enable_shared_cache(int);
 7333
 7334/*
 7335** CAPI3REF: Attempt To Free Heap Memory
 7336**
 7337** ^The sqlite3_release_memory() interface attempts to free N bytes
 7338** of heap memory by deallocating non-essential memory allocations
 7339** held by the database library.   Memory used to cache database
 7340** pages to improve performance is an example of non-essential memory.
 7341** ^sqlite3_release_memory() returns the number of bytes actually freed,
 7342** which might be more or less than the amount requested.
 7343** ^The sqlite3_release_memory() routine is a no-op returning zero
 7344** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT].
 7345**
 7346** See also: [sqlite3_db_release_memory()]
 7347*/
 7348SQLITE_API int sqlite3_release_memory(int);
 7349
 7350/*
 7351** CAPI3REF: Free Memory Used By A Database Connection
 7352** METHOD: sqlite3
 7353**
 7354** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap
 7355** memory as possible from database connection D. Unlike the
 7356** [sqlite3_release_memory()] interface, this interface is in effect even
 7357** when the [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is
 7358** omitted.
 7359**
 7360** See also: [sqlite3_release_memory()]
 7361*/
 7362SQLITE_API int sqlite3_db_release_memory(sqlite3*);
 7363
 7364/*
 7365** CAPI3REF: Impose A Limit On Heap Size
 7366**
 7367** These interfaces impose limits on the amount of heap memory that will be
 7368** used by all database connections within a single process.
 7369**
 7370** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
 7371** soft limit on the amount of heap memory that may be allocated by SQLite.
 7372** ^SQLite strives to keep heap memory utilization below the soft heap
 7373** limit by reducing the number of pages held in the page cache
 7374** as heap memory usages approaches the limit.
 7375** ^The soft heap limit is "soft" because even though SQLite strives to stay
 7376** below the limit, it will exceed the limit rather than generate
 7377** an [SQLITE_NOMEM] error.  In other words, the soft heap limit
 7378** is advisory only.
 7379**
 7380** ^The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of
 7381** N bytes on the amount of memory that will be allocated.  ^The
 7382** sqlite3_hard_heap_limit64(N) interface is similar to
 7383** sqlite3_soft_heap_limit64(N) except that memory allocations will fail
 7384** when the hard heap limit is reached.
 7385**
 7386** ^The return value from both sqlite3_soft_heap_limit64() and
 7387** sqlite3_hard_heap_limit64() is the size of
 7388** the heap limit prior to the call, or negative in the case of an
 7389** error.  ^If the argument N is negative
 7390** then no change is made to the heap limit.  Hence, the current
 7391** size of heap limits can be determined by invoking
 7392** sqlite3_soft_heap_limit64(-1) or sqlite3_hard_heap_limit(-1).
 7393**
 7394** ^Setting the heap limits to zero disables the heap limiter mechanism.
 7395**
 7396** ^The soft heap limit may not be greater than the hard heap limit.
 7397** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
 7398** is invoked with a value of N that is greater than the hard heap limit,
 7399** the soft heap limit is set to the value of the hard heap limit.
 7400** ^The soft heap limit is automatically enabled whenever the hard heap
 7401** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
 7402** the soft heap limit is outside the range of 1..N, then the soft heap
 7403** limit is set to N.  ^Invoking sqlite3_soft_heap_limit64(0) when the
 7404** hard heap limit is enabled makes the soft heap limit equal to the
 7405** hard heap limit.
 7406**
 7407** The memory allocation limits can also be adjusted using
 7408** [PRAGMA soft_heap_limit] and [PRAGMA hard_heap_limit].
 7409**
 7410** ^(The heap limits are not enforced in the current implementation
 7411** if one or more of following conditions are true:
 7412**
 7413** <ul>
 7414** <li> The limit value is set to zero.
 7415** <li> Memory accounting is disabled using a combination of the
 7416**      [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
 7417**      the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
 7418** <li> An alternative page cache implementation is specified using
 7419**      [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...).
 7420** <li> The page cache allocates from its own memory pool supplied
 7421**      by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than
 7422**      from the heap.
 7423** </ul>)^
 7424**
 7425** The circumstances under which SQLite will enforce the heap limits may
 7426** change in future releases of SQLite.
 7427*/
 7428SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
 7429SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
 7430
 7431/*
 7432** CAPI3REF: Deprecated Soft Heap Limit Interface
 7433** DEPRECATED
 7434**
 7435** This is a deprecated version of the [sqlite3_soft_heap_limit64()]
 7436** interface.  This routine is provided for historical compatibility
 7437** only.  All new applications should use the
 7438** [sqlite3_soft_heap_limit64()] interface rather than this one.
 7439*/
 7440SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
 7441
 7442
 7443/*
 7444** CAPI3REF: Extract Metadata About A Column Of A Table
 7445** METHOD: sqlite3
 7446**
 7447** ^(The sqlite3_table_column_metadata(X,D,T,C,....) routine returns
 7448** information about column C of table T in database D
 7449** on [database connection] X.)^  ^The sqlite3_table_column_metadata()
 7450** interface returns SQLITE_OK and fills in the non-NULL pointers in
 7451** the final five arguments with appropriate values if the specified
 7452** column exists.  ^The sqlite3_table_column_metadata() interface returns
 7453** SQLITE_ERROR if the specified column does not exist.
 7454** ^If the column-name parameter to sqlite3_table_column_metadata() is a
 7455** NULL pointer, then this routine simply checks for the existence of the
 7456** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it
 7457** does not.  If the table name parameter T in a call to
 7458** sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is
 7459** undefined behavior.
 7460**
 7461** ^The column is identified by the second, third and fourth parameters to
 7462** this function. ^(The second parameter is either the name of the database
 7463** (i.e. "main", "temp", or an attached database) containing the specified
 7464** table or NULL.)^ ^If it is NULL, then all attached databases are searched
 7465** for the table using the same algorithm used by the database engine to
 7466** resolve unqualified table references.
 7467**
 7468** ^The third and fourth parameters to this function are the table and column
 7469** name of the desired column, respectively.
 7470**
 7471** ^Metadata is returned by writing to the memory locations passed as the 5th
 7472** and subsequent parameters to this function. ^Any of these arguments may be
 7473** NULL, in which case the corresponding element of metadata is omitted.
 7474**
 7475** ^(<blockquote>
 7476** <table border="1">
 7477** <tr><th> Parameter <th> Output<br>Type <th>  Description
 7478**
 7479** <tr><td> 5th <td> const char* <td> Data type
 7480** <tr><td> 6th <td> const char* <td> Name of default collation sequence
 7481** <tr><td> 7th <td> int         <td> True if column has a NOT NULL constraint
 7482** <tr><td> 8th <td> int         <td> True if column is part of the PRIMARY KEY
 7483** <tr><td> 9th <td> int         <td> True if column is [AUTOINCREMENT]
 7484** </table>
 7485** </blockquote>)^
 7486**
 7487** ^The memory pointed to by the character pointers returned for the
 7488** declaration type and collation sequence is valid until the next
 7489** call to any SQLite API function.
 7490**
 7491** ^If the specified table is actually a view, an [error code] is returned.
 7492**
 7493** ^If the specified column is "rowid", "oid" or "_rowid_" and the table
 7494** is not a [WITHOUT ROWID] table and an
 7495** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output
 7496** parameters are set for the explicitly declared column. ^(If there is no
 7497** [INTEGER PRIMARY KEY] column, then the outputs
 7498** for the [rowid] are set as follows:
 7499**
 7500** <pre>
 7501**     data type: "INTEGER"
 7502**     collation sequence: "BINARY"
 7503**     not null: 0
 7504**     primary key: 1
 7505**     auto increment: 0
 7506** </pre>)^
 7507**
 7508** ^This function causes all database schemas to be read from disk and
 7509** parsed, if that has not already been done, and returns an error if
 7510** any errors are encountered while loading the schema.
 7511*/
 7512SQLITE_API int sqlite3_table_column_metadata(
 7513  sqlite3 *db,                /* Connection handle */
 7514  const char *zDbName,        /* Database name or NULL */
 7515  const char *zTableName,     /* Table name */
 7516  const char *zColumnName,    /* Column name */
 7517  char const **pzDataType,    /* OUTPUT: Declared data type */
 7518  char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
 7519  int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
 7520  int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
 7521  int *pAutoinc               /* OUTPUT: True if column is auto-increment */
 7522);
 7523
 7524/*
 7525** CAPI3REF: Load An Extension
 7526** METHOD: sqlite3
 7527**
 7528** ^This interface loads an SQLite extension library from the named file.
 7529**
 7530** ^The sqlite3_load_extension() interface attempts to load an
 7531** [SQLite extension] library contained in the file zFile.  If
 7532** the file cannot be loaded directly, attempts are made to load
 7533** with various operating-system specific filename extensions added.
 7534** So for example, if "samplelib" cannot be loaded, then names like
 7535** "samplelib.so" or "samplelib.dylib" or "samplelib.dll" might
 7536** be tried also.
 7537**
 7538** ^The entry point is zProc.
 7539** ^(zProc may be 0, in which case SQLite will try to come up with an
 7540** entry point name on its own.  It first tries "sqlite3_extension_init".
 7541** If that does not work, it tries names of the form "sqlite3_X_init"
 7542** where X consists of the lower-case equivalent of all ASCII alphabetic
 7543** characters or all ASCII alphanumeric characters in the filename from
 7544** the last "/" to the first following "." and omitting any initial "lib".)^
 7545** ^The sqlite3_load_extension() interface returns
 7546** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong.
 7547** ^If an error occurs and pzErrMsg is not 0, then the
 7548** [sqlite3_load_extension()] interface shall attempt to
 7549** fill *pzErrMsg with error message text stored in memory
 7550** obtained from [sqlite3_malloc()]. The calling function
 7551** should free this memory by calling [sqlite3_free()].
 7552**
 7553** ^Extension loading must be enabled using
 7554** [sqlite3_enable_load_extension()] or
 7555** [sqlite3_db_config](db,[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION],1,NULL)
 7556** prior to calling this API,
 7557** otherwise an error will be returned.
 7558**
 7559** <b>Security warning:</b> It is recommended that the
 7560** [SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION] method be used to enable only this
 7561** interface.  The use of the [sqlite3_enable_load_extension()] interface
 7562** should be avoided.  This will keep the SQL function [load_extension()]
 7563** disabled and prevent SQL injections from giving attackers
 7564** access to extension loading capabilities.
 7565**
 7566** See also the [load_extension() SQL function].
 7567*/
 7568SQLITE_API int sqlite3_load_extension(
 7569  sqlite3 *db,          /* Load the extension into this database connection */
 7570  const char *zFile,    /* Name of the shared library containing extension */
 7571  const char *zProc,    /* Entry point.  Derived from zFile if 0 */
 7572  char **pzErrMsg       /* Put error message here if not 0 */
 7573);
 7574
 7575/*
 7576** CAPI3REF: Enable Or Disable Extension Loading
 7577** METHOD: sqlite3
 7578**
 7579** ^So as not to open security holes in older applications that are
 7580** unprepared to deal with [extension loading], and as a means of disabling
 7581** [extension loading] while evaluating user-entered SQL, the following API
 7582** is provided to turn the [sqlite3_load_extension()] mechanism on and off.
 7583**
 7584** ^Extension loading is off by default.
 7585** ^Call the sqlite3_enable_load_extension() routine with onoff==1
 7586** to turn extension loading on and call it with onoff==0 to turn
 7587** it back off again.
 7588**
 7589** ^This interface enables or disables both the C-API
 7590** [sqlite3_load_extension()] and the SQL function [load_extension()].
 7591** ^(Use [sqlite3_db_config](db,[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION],..)
 7592** to enable or disable only the C-API.)^
 7593**
 7594** <b>Security warning:</b> It is recommended that extension loading
 7595** be enabled using the [SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION] method
 7596** rather than this interface, so the [load_extension()] SQL function
 7597** remains disabled. This will prevent SQL injections from giving attackers
 7598** access to extension loading capabilities.
 7599*/
 7600SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
 7601
 7602/*
 7603** CAPI3REF: Automatically Load Statically Linked Extensions
 7604**
 7605** ^This interface causes the xEntryPoint() function to be invoked for
 7606** each new [database connection] that is created.  The idea here is that
 7607** xEntryPoint() is the entry point for a statically linked [SQLite extension]
 7608** that is to be automatically loaded into all new database connections.
 7609**
 7610** ^(Even though the function prototype shows that xEntryPoint() takes
 7611** no arguments and returns void, SQLite invokes xEntryPoint() with three
 7612** arguments and expects an integer result as if the signature of the
 7613** entry point were as follows:
 7614**
 7615** <blockquote><pre>
 7616** &nbsp;  int xEntryPoint(
 7617** &nbsp;    sqlite3 *db,
 7618** &nbsp;    char **pzErrMsg,
 7619** &nbsp;    const struct sqlite3_api_routines *pThunk
 7620** &nbsp;  );
 7621** </pre></blockquote>)^
 7622**
 7623** If the xEntryPoint routine encounters an error, it should make *pzErrMsg
 7624** point to an appropriate error message (obtained from [sqlite3_mprintf()])
 7625** and return an appropriate [error code].  ^SQLite ensures that *pzErrMsg
 7626** is NULL before calling the xEntryPoint().  ^SQLite will invoke
 7627** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns.  ^If any
 7628** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()],
 7629** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail.
 7630**
 7631** ^Calling sqlite3_auto_extension(X) with an entry point X that is already
 7632** on the list of automatic extensions is a harmless no-op. ^No entry point
 7633** will be called more than once for each database connection that is opened.
 7634**
 7635** See also: [sqlite3_reset_auto_extension()]
 7636** and [sqlite3_cancel_auto_extension()]
 7637*/
 7638SQLITE_API int sqlite3_auto_extension(void(*xEntryPoint)(void));
 7639
 7640/*
 7641** CAPI3REF: Cancel Automatic Extension Loading
 7642**
 7643** ^The [sqlite3_cancel_auto_extension(X)] interface unregisters the
 7644** initialization routine X that was registered using a prior call to
 7645** [sqlite3_auto_extension(X)].  ^The [sqlite3_cancel_auto_extension(X)]
 7646** routine returns 1 if initialization routine X was successfully
 7647** unregistered and it returns 0 if X was not on the list of initialization
 7648** routines.
 7649*/
 7650SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void));
 7651
 7652/*
 7653** CAPI3REF: Reset Automatic Extension Loading
 7654**
 7655** ^This interface disables all automatic extensions previously
 7656** registered using [sqlite3_auto_extension()].
 7657*/
 7658SQLITE_API void sqlite3_reset_auto_extension(void);
 7659
 7660/*
 7661** Structures used by the virtual table interface
 7662*/
 7663typedef struct sqlite3_vtab sqlite3_vtab;
 7664typedef struct sqlite3_index_info sqlite3_index_info;
 7665typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
 7666typedef struct sqlite3_module sqlite3_module;
 7667
 7668/*
 7669** CAPI3REF: Virtual Table Object
 7670** KEYWORDS: sqlite3_module {virtual table module}
 7671**
 7672** This structure, sometimes called a "virtual table module",
 7673** defines the implementation of a [virtual table].
 7674** This structure consists mostly of methods for the module.
 7675**
 7676** ^A virtual table module is created by filling in a persistent
 7677** instance of this structure and passing a pointer to that instance
 7678** to [sqlite3_create_module()] or [sqlite3_create_module_v2()].
 7679** ^The registration remains valid until it is replaced by a different
 7680** module or until the [database connection] closes.  The content
 7681** of this structure must not change while it is registered with
 7682** any database connection.
 7683*/
 7684struct sqlite3_module {
 7685  int iVersion;
 7686  int (*xCreate)(sqlite3*, void *pAux,
 7687               int argc, const char *const*argv,
 7688               sqlite3_vtab **ppVTab, char**);
 7689  int (*xConnect)(sqlite3*, void *pAux,
 7690               int argc, const char *const*argv,
 7691               sqlite3_vtab **ppVTab, char**);
 7692  int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
 7693  int (*xDisconnect)(sqlite3_vtab *pVTab);
 7694  int (*xDestroy)(sqlite3_vtab *pVTab);
 7695  int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
 7696  int (*xClose)(sqlite3_vtab_cursor*);
 7697  int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
 7698                int argc, sqlite3_value **argv);
 7699  int (*xNext)(sqlite3_vtab_cursor*);
 7700  int (*xEof)(sqlite3_vtab_cursor*);
 7701  int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
 7702  int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
 7703  int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
 7704  int (*xBegin)(sqlite3_vtab *pVTab);
 7705  int (*xSync)(sqlite3_vtab *pVTab);
 7706  int (*xCommit)(sqlite3_vtab *pVTab);
 7707  int (*xRollback)(sqlite3_vtab *pVTab);
 7708  int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
 7709                       void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
 7710                       void **ppArg);
 7711  int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
 7712  /* The methods above are in version 1 of the sqlite_module object. Those
 7713  ** below are for version 2 and greater. */
 7714  int (*xSavepoint)(sqlite3_vtab *pVTab, int);
 7715  int (*xRelease)(sqlite3_vtab *pVTab, int);
 7716  int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
 7717  /* The methods above are in versions 1 and 2 of the sqlite_module object.
 7718  ** Those below are for version 3 and greater. */
 7719  int (*xShadowName)(const char*);
 7720  /* The methods above are in versions 1 through 3 of the sqlite_module object.
 7721  ** Those below are for version 4 and greater. */
 7722  int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema,
 7723                    const char *zTabName, int mFlags, char **pzErr);
 7724};
 7725
 7726/*
 7727** CAPI3REF: Virtual Table Indexing Information
 7728** KEYWORDS: sqlite3_index_info
 7729**
 7730** The sqlite3_index_info structure and its substructures is used as part
 7731** of the [virtual table] interface to
 7732** pass information into and receive the reply from the [xBestIndex]
 7733** method of a [virtual table module].  The fields under **Inputs** are the
 7734** inputs to xBestIndex and are read-only.  xBestIndex inserts its
 7735** results into the **Outputs** fields.
 7736**
 7737** ^(The aConstraint[] array records WHERE clause constraints of the form:
 7738**
 7739** <blockquote>column OP expr</blockquote>
 7740**
 7741** where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^  ^(The particular operator is
 7742** stored in aConstraint[].op using one of the
 7743** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
 7744** ^(The index of the column is stored in
 7745** aConstraint[].iColumn.)^  ^(aConstraint[].usable is TRUE if the
 7746** expr on the right-hand side can be evaluated (and thus the constraint
 7747** is usable) and false if it cannot.)^
 7748**
 7749** ^The optimizer automatically inverts terms of the form "expr OP column"
 7750** and makes other simplifications to the WHERE clause in an attempt to
 7751** get as many WHERE clause terms into the form shown above as possible.
 7752** ^The aConstraint[] array only reports WHERE clause terms that are
 7753** relevant to the particular virtual table being queried.
 7754**
 7755** ^Information about the ORDER BY clause is stored in aOrderBy[].
 7756** ^Each term of aOrderBy records a column of the ORDER BY clause.
 7757**
 7758** The colUsed field indicates which columns of the virtual table may be
 7759** required by the current scan. Virtual table columns are numbered from
 7760** zero in the order in which they appear within the CREATE TABLE statement
 7761** passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
 7762** the corresponding bit is set within the colUsed mask if the column may be
 7763** required by SQLite. If the table has at least 64 columns and any column
 7764** to the right of the first 63 is required, then bit 63 of colUsed is also
 7765** set. In other words, column iCol may be required if the expression
 7766** (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to
 7767** non-zero.
 7768**
 7769** The [xBestIndex] method must fill aConstraintUsage[] with information
 7770** about what parameters to pass to xFilter.  ^If argvIndex>0 then
 7771** the right-hand side of the corresponding aConstraint[] is evaluated
 7772** and becomes the argvIndex-th entry in argv.  ^(If aConstraintUsage[].omit
 7773** is true, then the constraint is assumed to be fully handled by the
 7774** virtual table and might not be checked again by the byte code.)^ ^(The
 7775** aConstraintUsage[].omit flag is an optimization hint. When the omit flag
 7776** is left in its default setting of false, the constraint will always be
 7777** checked separately in byte code.  If the omit flag is changed to true, then
 7778** the constraint may or may not be checked in byte code.  In other words,
 7779** when the omit flag is true there is no guarantee that the constraint will
 7780** not be checked again using byte code.)^
 7781**
 7782** ^The idxNum and idxStr values are recorded and passed into the
 7783** [xFilter] method.
 7784** ^[sqlite3_free()] is used to free idxStr if and only if
 7785** needToFreeIdxStr is true.
 7786**
 7787** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
 7788** the correct order to satisfy the ORDER BY clause so that no separate
 7789** sorting step is required.
 7790**
 7791** ^The estimatedCost value is an estimate of the cost of a particular
 7792** strategy. A cost of N indicates that the cost of the strategy is similar
 7793** to a linear scan of an SQLite table with N rows. A cost of log(N)
 7794** indicates that the expense of the operation is similar to that of a
 7795** binary search on a unique indexed field of an SQLite table with N rows.
 7796**
 7797** ^The estimatedRows value is an estimate of the number of rows that
 7798** will be returned by the strategy.
 7799**
 7800** The xBestIndex method may optionally populate the idxFlags field with a
 7801** mask of SQLITE_INDEX_SCAN_* flags. One such flag is
 7802** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN]
 7803** output to show the idxNum as hex instead of as decimal.  Another flag is
 7804** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will
 7805** return at most one row.
 7806**
 7807** Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
 7808** SQLite also assumes that if a call to the xUpdate() method is made as
 7809** part of the same statement to delete or update a virtual table row and the
 7810** implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
 7811** any database changes. In other words, if the xUpdate() returns
 7812** SQLITE_CONSTRAINT, the database contents must be exactly as they were
 7813** before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not
 7814** set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by
 7815** the xUpdate method are automatically rolled back by SQLite.
 7816**
 7817** IMPORTANT: The estimatedRows field was added to the sqlite3_index_info
 7818** structure for SQLite [version 3.8.2] ([dateof:3.8.2]).
 7819** If a virtual table extension is
 7820** used with an SQLite version earlier than 3.8.2, the results of attempting
 7821** to read or write the estimatedRows field are undefined (but are likely
 7822** to include crashing the application). The estimatedRows field should
 7823** therefore only be used if [sqlite3_libversion_number()] returns a
 7824** value greater than or equal to 3008002. Similarly, the idxFlags field
 7825** was added for [version 3.9.0] ([dateof:3.9.0]).
 7826** It may therefore only be used if
 7827** sqlite3_libversion_number() returns a value greater than or equal to
 7828** 3009000.
 7829*/
 7830struct sqlite3_index_info {
 7831  /* Inputs */
 7832  int nConstraint;           /* Number of entries in aConstraint */
 7833  struct sqlite3_index_constraint {
 7834     int iColumn;              /* Column constrained.  -1 for ROWID */
 7835     unsigned char op;         /* Constraint operator */
 7836     unsigned char usable;     /* True if this constraint is usable */
 7837     int iTermOffset;          /* Used internally - xBestIndex should ignore */
 7838  } *aConstraint;            /* Table of WHERE clause constraints */
 7839  int nOrderBy;              /* Number of terms in the ORDER BY clause */
 7840  struct sqlite3_index_orderby {
 7841     int iColumn;              /* Column number */
 7842     unsigned char desc;       /* True for DESC.  False for ASC. */
 7843  } *aOrderBy;               /* The ORDER BY clause */
 7844  /* Outputs */
 7845  struct sqlite3_index_constraint_usage {
 7846    int argvIndex;           /* if >0, constraint is part of argv to xFilter */
 7847    unsigned char omit;      /* Do not code a test for this constraint */
 7848  } *aConstraintUsage;
 7849  int idxNum;                /* Number used to identify the index */
 7850  char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
 7851  int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
 7852  int orderByConsumed;       /* True if output is already ordered */
 7853  double estimatedCost;           /* Estimated cost of using this index */
 7854  /* Fields below are only available in SQLite 3.8.2 and later */
 7855  sqlite3_int64 estimatedRows;    /* Estimated number of rows returned */
 7856  /* Fields below are only available in SQLite 3.9.0 and later */
 7857  int idxFlags;              /* Mask of SQLITE_INDEX_SCAN_* flags */
 7858  /* Fields below are only available in SQLite 3.10.0 and later */
 7859  sqlite3_uint64 colUsed;    /* Input: Mask of columns used by statement */
 7860};
 7861
 7862/*
 7863** CAPI3REF: Virtual Table Scan Flags
 7864**
 7865** Virtual table implementations are allowed to set the
 7866** [sqlite3_index_info].idxFlags field to some combination of
 7867** these bits.
 7868*/
 7869#define SQLITE_INDEX_SCAN_UNIQUE 0x00000001 /* Scan visits at most 1 row */
 7870#define SQLITE_INDEX_SCAN_HEX    0x00000002 /* Display idxNum as hex */
 7871                                            /* in EXPLAIN QUERY PLAN */
 7872
 7873/*
 7874** CAPI3REF: Virtual Table Constraint Operator Codes
 7875**
 7876** These macros define the allowed values for the
 7877** [sqlite3_index_info].aConstraint[].op field.  Each value represents
 7878** an operator that is part of a constraint term in the WHERE clause of
 7879** a query that uses a [virtual table].
 7880**
 7881** ^The left-hand operand of the operator is given by the corresponding
 7882** aConstraint[].iColumn field.  ^An iColumn of -1 indicates the left-hand
 7883** operand is the rowid.
 7884** The SQLITE_INDEX_CONSTRAINT_LIMIT and SQLITE_INDEX_CONSTRAINT_OFFSET
 7885** operators have no left-hand operand, and so for those operators the
 7886** corresponding aConstraint[].iColumn is meaningless and should not be
 7887** used.
 7888**
 7889** All operator values from SQLITE_INDEX_CONSTRAINT_FUNCTION through
 7890** value 255 are reserved to represent functions that are overloaded
 7891** by the [xFindFunction|xFindFunction method] of the virtual table
 7892** implementation.
 7893**
 7894** The right-hand operands for each constraint might be accessible using
 7895** the [sqlite3_vtab_rhs_value()] interface.  Usually the right-hand
 7896** operand is only available if it appears as a single constant literal
 7897** in the input SQL.  If the right-hand operand is another column or an
 7898** expression (even a constant expression) or a parameter, then the
 7899** sqlite3_vtab_rhs_value() probably will not be able to extract it.
 7900** ^The SQLITE_INDEX_CONSTRAINT_ISNULL and
 7901** SQLITE_INDEX_CONSTRAINT_ISNOTNULL operators have no right-hand operand
 7902** and hence calls to sqlite3_vtab_rhs_value() for those operators will
 7903** always return SQLITE_NOTFOUND.
 7904**
 7905** The collating sequence to be used for comparison can be found using
 7906** the [sqlite3_vtab_collation()] interface.  For most real-world virtual
 7907** tables, the collating sequence of constraints does not matter (for example
 7908** because the constraints are numeric) and so the sqlite3_vtab_collation()
 7909** interface is not commonly needed.
 7910*/
 7911#define SQLITE_INDEX_CONSTRAINT_EQ          2
 7912#define SQLITE_INDEX_CONSTRAINT_GT          4
 7913#define SQLITE_INDEX_CONSTRAINT_LE          8
 7914#define SQLITE_INDEX_CONSTRAINT_LT         16
 7915#define SQLITE_INDEX_CONSTRAINT_GE         32
 7916#define SQLITE_INDEX_CONSTRAINT_MATCH      64
 7917#define SQLITE_INDEX_CONSTRAINT_LIKE       65
 7918#define SQLITE_INDEX_CONSTRAINT_GLOB       66
 7919#define SQLITE_INDEX_CONSTRAINT_REGEXP     67
 7920#define SQLITE_INDEX_CONSTRAINT_NE         68
 7921#define SQLITE_INDEX_CONSTRAINT_ISNOT      69
 7922#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL  70
 7923#define SQLITE_INDEX_CONSTRAINT_ISNULL     71
 7924#define SQLITE_INDEX_CONSTRAINT_IS         72
 7925#define SQLITE_INDEX_CONSTRAINT_LIMIT      73
 7926#define SQLITE_INDEX_CONSTRAINT_OFFSET     74
 7927#define SQLITE_INDEX_CONSTRAINT_FUNCTION  150
 7928
 7929/*
 7930** CAPI3REF: Register A Virtual Table Implementation
 7931** METHOD: sqlite3
 7932**
 7933** ^These routines are used to register a new [virtual table module] name.
 7934** ^Module names must be registered before
 7935** creating a new [virtual table] using the module and before using a
 7936** preexisting [virtual table] for the module.
 7937**
 7938** ^The module name is registered on the [database connection] specified
 7939** by the first parameter.  ^The name of the module is given by the
 7940** second parameter.  ^The third parameter is a pointer to
 7941** the implementation of the [virtual table module].   ^The fourth
 7942** parameter is an arbitrary client data pointer that is passed through
 7943** into the [xCreate] and [xConnect] methods of the virtual table module
 7944** when a new virtual table is being created or reinitialized.
 7945**
 7946** ^The sqlite3_create_module_v2() interface has a fifth parameter which
 7947** is a pointer to a destructor for the pClientData.  ^SQLite will
 7948** invoke the destructor function (if it is not NULL) when SQLite
 7949** no longer needs the pClientData pointer.  ^The destructor will also
 7950** be invoked if the call to sqlite3_create_module_v2() fails.
 7951** ^The sqlite3_create_module()
 7952** interface is equivalent to sqlite3_create_module_v2() with a NULL
 7953** destructor.
 7954**
 7955** ^If the third parameter (the pointer to the sqlite3_module object) is
 7956** NULL then no new module is created and any existing modules with the
 7957** same name are dropped.
 7958**
 7959** See also: [sqlite3_drop_modules()]
 7960*/
 7961SQLITE_API int sqlite3_create_module(
 7962  sqlite3 *db,               /* SQLite connection to register module with */
 7963  const char *zName,         /* Name of the module */
 7964  const sqlite3_module *p,   /* Methods for the module */
 7965  void *pClientData          /* Client data for xCreate/xConnect */
 7966);
 7967SQLITE_API int sqlite3_create_module_v2(
 7968  sqlite3 *db,               /* SQLite connection to register module with */
 7969  const char *zName,         /* Name of the module */
 7970  const sqlite3_module *p,   /* Methods for the module */
 7971  void *pClientData,         /* Client data for xCreate/xConnect */
 7972  void(*xDestroy)(void*)     /* Module destructor function */
 7973);
 7974
 7975/*
 7976** CAPI3REF: Remove Unnecessary Virtual Table Implementations
 7977** METHOD: sqlite3
 7978**
 7979** ^The sqlite3_drop_modules(D,L) interface removes all virtual
 7980** table modules from database connection D except those named on list L.
 7981** The L parameter must be either NULL or a pointer to an array of pointers
 7982** to strings where the array is terminated by a single NULL pointer.
 7983** ^If the L parameter is NULL, then all virtual table modules are removed.
 7984**
 7985** See also: [sqlite3_create_module()]
 7986*/
 7987SQLITE_API int sqlite3_drop_modules(
 7988  sqlite3 *db,                /* Remove modules from this connection */
 7989  const char **azKeep         /* Except, do not remove the ones named here */
 7990);
 7991
 7992/*
 7993** CAPI3REF: Virtual Table Instance Object
 7994** KEYWORDS: sqlite3_vtab
 7995**
 7996** Every [virtual table module] implementation uses a subclass
 7997** of this object to describe a particular instance
 7998** of the [virtual table].  Each subclass will
 7999** be tailored to the specific needs of the module implementation.
 8000** The purpose of this superclass is to define certain fields that are
 8001** common to all module implementations.
 8002**
 8003** ^Virtual tables methods can set an error message by assigning a
 8004** string obtained from [sqlite3_mprintf()] to zErrMsg.  The method should
 8005** take care that any prior string is freed by a call to [sqlite3_free()]
 8006** prior to assigning a new string to zErrMsg.  ^After the error message
 8007** is delivered up to the client application, the string will be automatically
 8008** freed by sqlite3_free() and the zErrMsg field will be zeroed.
 8009*/
 8010struct sqlite3_vtab {
 8011  const sqlite3_module *pModule;  /* The module for this virtual table */
 8012  int nRef;                       /* Number of open cursors */
 8013  char *zErrMsg;                  /* Error message from sqlite3_mprintf() */
 8014  /* Virtual table implementations will typically add additional fields */
 8015};
 8016
 8017/*
 8018** CAPI3REF: Virtual Table Cursor Object
 8019** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor}
 8020**
 8021** Every [virtual table module] implementation uses a subclass of the
 8022** following structure to describe cursors that point into the
 8023** [virtual table] and are used
 8024** to loop through the virtual table.  Cursors are created using the
 8025** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed
 8026** by the [sqlite3_module.xClose | xClose] method.  Cursors are used
 8027** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods
 8028** of the module.  Each module implementation will define
 8029** the content of a cursor structure to suit its own needs.
 8030**
 8031** This superclass exists in order to define fields of the cursor that
 8032** are common to all implementations.
 8033*/
 8034struct sqlite3_vtab_cursor {
 8035  sqlite3_vtab *pVtab;      /* Virtual table of this cursor */
 8036  /* Virtual table implementations will typically add additional fields */
 8037};
 8038
 8039/*
 8040** CAPI3REF: Declare The Schema Of A Virtual Table
 8041**
 8042** ^The [xCreate] and [xConnect] methods of a
 8043** [virtual table module] call this interface
 8044** to declare the format (the names and datatypes of the columns) of
 8045** the virtual tables they implement.
 8046*/
 8047SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
 8048
 8049/*
 8050** CAPI3REF: Overload A Function For A Virtual Table
 8051** METHOD: sqlite3
 8052**
 8053** ^(Virtual tables can provide alternative implementations of functions
 8054** using the [xFindFunction] method of the [virtual table module].
 8055** But global versions of those functions
 8056** must exist in order to be overloaded.)^
 8057**
 8058** ^(This API makes sure a global version of a function with a particular
 8059** name and number of parameters exists.  If no such function exists
 8060** before this API is called, a new function is created.)^  ^The implementation
 8061** of the new function always causes an exception to be thrown.  So
 8062** the new function is not good for anything by itself.  Its only
 8063** purpose is to be a placeholder function that can be overloaded
 8064** by a [virtual table].
 8065*/
 8066SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
 8067
 8068/*
 8069** CAPI3REF: A Handle To An Open BLOB
 8070** KEYWORDS: {BLOB handle} {BLOB handles}
 8071**
 8072** An instance of this object represents an open BLOB on which
 8073** [sqlite3_blob_open | incremental BLOB I/O] can be performed.
 8074** ^Objects of this type are created by [sqlite3_blob_open()]
 8075** and destroyed by [sqlite3_blob_close()].
 8076** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces
 8077** can be used to read or write small subsections of the BLOB.
 8078** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes.
 8079*/
 8080typedef struct sqlite3_blob sqlite3_blob;
 8081
 8082/*
 8083** CAPI3REF: Open A BLOB For Incremental I/O
 8084** METHOD: sqlite3
 8085** CONSTRUCTOR: sqlite3_blob
 8086**
 8087** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located
 8088** in row iRow, column zColumn, table zTable in database zDb;
 8089** in other words, the same BLOB that would be selected by:
 8090**
 8091** <pre>
 8092**     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
 8093** </pre>)^
 8094**
 8095** ^(Parameter zDb is not the filename that contains the database, but
 8096** rather the symbolic name of the database. For attached databases, this is
 8097** the name that appears after the AS keyword in the [ATTACH] statement.
 8098** For the main database file, the database name is "main". For TEMP
 8099** tables, the database name is "temp".)^
 8100**
 8101** ^If the flags parameter is non-zero, then the BLOB is opened for read
 8102** and write access. ^If the flags parameter is zero, the BLOB is opened for
 8103** read-only access.
 8104**
 8105** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored
 8106** in *ppBlob. Otherwise an [error code] is returned and, unless the error
 8107** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
 8108** the API is not misused, it is always safe to call [sqlite3_blob_close()]
 8109** on *ppBlob after this function returns.
 8110**
 8111** This function fails with SQLITE_ERROR if any of the following are true:
 8112** <ul>
 8113**   <li> ^(Database zDb does not exist)^,
 8114**   <li> ^(Table zTable does not exist within database zDb)^,
 8115**   <li> ^(Table zTable is a WITHOUT ROWID table)^,
 8116**   <li> ^(Column zColumn does not exist)^,
 8117**   <li> ^(Row iRow is not present in the table)^,
 8118**   <li> ^(The specified column of row iRow contains a value that is not
 8119**         a TEXT or BLOB value)^,
 8120**   <li> ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE
 8121**         constraint and the blob is being opened for read/write access)^,
 8122**   <li> ^([foreign key constraints | Foreign key constraints] are enabled,
 8123**         column zColumn is part of a [child key] definition and the blob is
 8124**         being opened for read/write access)^.
 8125** </ul>
 8126**
 8127** ^Unless it returns SQLITE_MISUSE, this function sets the
 8128** [database connection] error code and message accessible via
 8129** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
 8130**
 8131** A BLOB referenced by sqlite3_blob_open() may be read using the
 8132** [sqlite3_blob_read()] interface and modified by using
 8133** [sqlite3_blob_write()].  The [BLOB handle] can be moved to a
 8134** different row of the same table using the [sqlite3_blob_reopen()]
 8135** interface.  However, the column, table, or database of a [BLOB handle]
 8136** cannot be changed after the [BLOB handle] is opened.
 8137**
 8138** ^(If the row that a BLOB handle points to is modified by an
 8139** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
 8140** then the BLOB handle is marked as "expired".
 8141** This is true if any column of the row is changed, even a column
 8142** other than the one the BLOB handle is open on.)^
 8143** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for
 8144** an expired BLOB handle fail with a return code of [SQLITE_ABORT].
 8145** ^(Changes written into a BLOB prior to the BLOB expiring are not
 8146** rolled back by the expiration of the BLOB.  Such changes will eventually
 8147** commit if the transaction continues to completion.)^
 8148**
 8149** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
 8150** the opened blob.  ^The size of a blob may not be changed by this
 8151** interface.  Use the [UPDATE] SQL command to change the size of a
 8152** blob.
 8153**
 8154** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
 8155** and the built-in [zeroblob] SQL function may be used to create a
 8156** zero-filled blob to read or write using the incremental-blob interface.
 8157**
 8158** To avoid a resource leak, every open [BLOB handle] should eventually
 8159** be released by a call to [sqlite3_blob_close()].
 8160**
 8161** See also: [sqlite3_blob_close()],
 8162** [sqlite3_blob_reopen()], [sqlite3_blob_read()],
 8163** [sqlite3_blob_bytes()], [sqlite3_blob_write()].
 8164*/
 8165SQLITE_API int sqlite3_blob_open(
 8166  sqlite3*,
 8167  const char *zDb,
 8168  const char *zTable,
 8169  const char *zColumn,
 8170  sqlite3_int64 iRow,
 8171  int flags,
 8172  sqlite3_blob **ppBlob
 8173);
 8174
 8175/*
 8176** CAPI3REF: Move a BLOB Handle to a New Row
 8177** METHOD: sqlite3_blob
 8178**
 8179** ^This function is used to move an existing [BLOB handle] so that it points
 8180** to a different row of the same database table. ^The new row is identified
 8181** by the rowid value passed as the second argument. Only the row can be
 8182** changed. ^The database, table and column on which the blob handle is open
 8183** remain the same. Moving an existing [BLOB handle] to a new row is
 8184** faster than closing the existing handle and opening a new one.
 8185**
 8186** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
 8187** it must exist and there must be either a blob or text value stored in
 8188** the nominated column.)^ ^If the new row is not present in the table, or if
 8189** it does not contain a blob or text value, or if another error occurs, an
 8190** SQLite error code is returned and the blob handle is considered aborted.
 8191** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
 8192** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
 8193** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
 8194** always returns zero.
 8195**
 8196** ^This function sets the database handle error code and message.
 8197*/
 8198SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
 8199
 8200/*
 8201** CAPI3REF: Close A BLOB Handle
 8202** DESTRUCTOR: sqlite3_blob
 8203**
 8204** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed
 8205** unconditionally.  Even if this routine returns an error code, the
 8206** handle is still closed.)^
 8207**
 8208** ^If the blob handle being closed was opened for read-write access, and if
 8209** the database is in auto-commit mode and there are no other open read-write
 8210** blob handles or active write statements, the current transaction is
 8211** committed. ^If an error occurs while committing the transaction, an error
 8212** code is returned and the transaction rolled back.
 8213**
 8214** Calling this function with an argument that is not a NULL pointer or an
 8215** open blob handle results in undefined behavior. ^Calling this routine
 8216** with a null pointer (such as would be returned by a failed call to
 8217** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function
 8218** is passed a valid open blob handle, the values returned by the
 8219** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
 8220*/
 8221SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
 8222
 8223/*
 8224** CAPI3REF: Return The Size Of An Open BLOB
 8225** METHOD: sqlite3_blob
 8226**
 8227** ^Returns the size in bytes of the BLOB accessible via the
 8228** successfully opened [BLOB handle] in its only argument.  ^The
 8229** incremental blob I/O routines can only read or overwrite existing
 8230** blob content; they cannot change the size of a blob.
 8231**
 8232** This routine only works on a [BLOB handle] which has been created
 8233** by a prior successful call to [sqlite3_blob_open()] and which has not
 8234** been closed by [sqlite3_blob_close()].  Passing any other pointer in
 8235** to this routine results in undefined and probably undesirable behavior.
 8236*/
 8237SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *);
 8238
 8239/*
 8240** CAPI3REF: Read Data From A BLOB Incrementally
 8241** METHOD: sqlite3_blob
 8242**
 8243** ^(This function is used to read data from an open [BLOB handle] into a
 8244** caller-supplied buffer. N bytes of data are copied into buffer Z
 8245** from the open BLOB, starting at offset iOffset.)^
 8246**
 8247** ^If offset iOffset is less than N bytes from the end of the BLOB,
 8248** [SQLITE_ERROR] is returned and no data is read.  ^If N or iOffset is
 8249** less than zero, [SQLITE_ERROR] is returned and no data is read.
 8250** ^The size of the blob (and hence the maximum value of N+iOffset)
 8251** can be determined using the [sqlite3_blob_bytes()] interface.
 8252**
 8253** ^An attempt to read from an expired [BLOB handle] fails with an
 8254** error code of [SQLITE_ABORT].
 8255**
 8256** ^(On success, sqlite3_blob_read() returns SQLITE_OK.
 8257** Otherwise, an [error code] or an [extended error code] is returned.)^
 8258**
 8259** This routine only works on a [BLOB handle] which has been created
 8260** by a prior successful call to [sqlite3_blob_open()] and which has not
 8261** been closed by [sqlite3_blob_close()].  Passing any other pointer in
 8262** to this routine results in undefined and probably undesirable behavior.
 8263**
 8264** See also: [sqlite3_blob_write()].
 8265*/
 8266SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
 8267
 8268/*
 8269** CAPI3REF: Write Data Into A BLOB Incrementally
 8270** METHOD: sqlite3_blob
 8271**
 8272** ^(This function is used to write data into an open [BLOB handle] from a
 8273** caller-supplied buffer. N bytes of data are copied from the buffer Z
 8274** into the open BLOB, starting at offset iOffset.)^
 8275**
 8276** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
 8277** Otherwise, an  [error code] or an [extended error code] is returned.)^
 8278** ^Unless SQLITE_MISUSE is returned, this function sets the
 8279** [database connection] error code and message accessible via
 8280** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
 8281**
 8282** ^If the [BLOB handle] passed as the first argument was not opened for
 8283** writing (the flags parameter to [sqlite3_blob_open()] was zero),
 8284** this function returns [SQLITE_READONLY].
 8285**
 8286** This function may only modify the contents of the BLOB; it is
 8287** not possible to increase the size of a BLOB using this API.
 8288** ^If offset iOffset is less than N bytes from the end of the BLOB,
 8289** [SQLITE_ERROR] is returned and no data is written. The size of the
 8290** BLOB (and hence the maximum value of N+iOffset) can be determined
 8291** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less
 8292** than zero [SQLITE_ERROR] is returned and no data is written.
 8293**
 8294** ^An attempt to write to an expired [BLOB handle] fails with an
 8295** error code of [SQLITE_ABORT].  ^Writes to the BLOB that occurred
 8296** before the [BLOB handle] expired are not rolled back by the
 8297** expiration of the handle, though of course those changes might
 8298** have been overwritten by the statement that expired the BLOB handle
 8299** or by other independent statements.
 8300**
 8301** This routine only works on a [BLOB handle] which has been created
 8302** by a prior successful call to [sqlite3_blob_open()] and which has not
 8303** been closed by [sqlite3_blob_close()].  Passing any other pointer in
 8304** to this routine results in undefined and probably undesirable behavior.
 8305**
 8306** See also: [sqlite3_blob_read()].
 8307*/
 8308SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
 8309
 8310/*
 8311** CAPI3REF: Virtual File System Objects
 8312**
 8313** A virtual filesystem (VFS) is an [sqlite3_vfs] object
 8314** that SQLite uses to interact
 8315** with the underlying operating system.  Most SQLite builds come with a
 8316** single default VFS that is appropriate for the host computer.
 8317** New VFSes can be registered and existing VFSes can be unregistered.
 8318** The following interfaces are provided.
 8319**
 8320** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
 8321** ^Names are case sensitive.
 8322** ^Names are zero-terminated UTF-8 strings.
 8323** ^If there is no match, a NULL pointer is returned.
 8324** ^If zVfsName is NULL then the default VFS is returned.
 8325**
 8326** ^New VFSes are registered with sqlite3_vfs_register().
 8327** ^Each new VFS becomes the default VFS if the makeDflt flag is set.
 8328** ^The same VFS can be registered multiple times without injury.
 8329** ^To make an existing VFS into the default VFS, register it again
 8330** with the makeDflt flag set.  If two different VFSes with the
 8331** same name are registered, the behavior is undefined.  If a
 8332** VFS is registered with a name that is NULL or an empty string,
 8333** then the behavior is undefined.
 8334**
 8335** ^Unregister a VFS with the sqlite3_vfs_unregister() interface.
 8336** ^(If the default VFS is unregistered, another VFS is chosen as
 8337** the default.  The choice for the new VFS is arbitrary.)^
 8338*/
 8339SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
 8340SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
 8341SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
 8342
 8343/*
 8344** CAPI3REF: Mutexes
 8345**
 8346** The SQLite core uses these routines for thread
 8347** synchronization. Though they are intended for internal
 8348** use by SQLite, code that links against SQLite is
 8349** permitted to use any of these routines.
 8350**
 8351** The SQLite source code contains multiple implementations
 8352** of these mutex routines.  An appropriate implementation
 8353** is selected automatically at compile-time.  The following
 8354** implementations are available in the SQLite core:
 8355**
 8356** <ul>
 8357** <li>   SQLITE_MUTEX_PTHREADS
 8358** <li>   SQLITE_MUTEX_W32
 8359** <li>   SQLITE_MUTEX_NOOP
 8360** </ul>
 8361**
 8362** The SQLITE_MUTEX_NOOP implementation is a set of routines
 8363** that does no real locking and is appropriate for use in
 8364** a single-threaded application.  The SQLITE_MUTEX_PTHREADS and
 8365** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
 8366** and Windows.
 8367**
 8368**
 8369** ^The sqlite3_mutex_alloc() routine allocates a new
 8370** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
 8371** routine returns NULL if it is unable to allocate the requested
 8372** mutex.  The argument to sqlite3_mutex_alloc() must be one of these
 8373** integer constants:
 8374**
 8375** <ul>
 8376** <li>  SQLITE_MUTEX_FAST
 8377** <li>  SQLITE_MUTEX_RECURSIVE
 8378** <li>  SQLITE_MUTEX_STATIC_MAIN
 8379** <li>  SQLITE_MUTEX_STATIC_MEM
 8380** <li>  SQLITE_MUTEX_STATIC_OPEN
 8381** <li>  SQLITE_MUTEX_STATIC_PRNG
 8382** <li>  SQLITE_MUTEX_STATIC_LRU
 8383** <li>  SQLITE_MUTEX_STATIC_PMEM
 8384** <li>  SQLITE_MUTEX_STATIC_APP1
 8385** <li>  SQLITE_MUTEX_STATIC_APP2
 8386** <li>  SQLITE_MUTEX_STATIC_APP3
 8387** <li>  SQLITE_MUTEX_STATIC_VFS1
 8388** <li>  SQLITE_MUTEX_STATIC_VFS2
 8389** <li>  SQLITE_MUTEX_STATIC_VFS3
 8390** </ul>
 8391**
 8392** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
 8393** cause sqlite3_mutex_alloc() to create
 8394** a new mutex.  ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
 8395** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
 8396** The mutex implementation does not need to make a distinction
 8397** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
 8398** not want to.  SQLite will only request a recursive mutex in
 8399** cases where it really needs one.  If a faster non-recursive mutex
 8400** implementation is available on the host platform, the mutex subsystem
 8401** might return such a mutex in response to SQLITE_MUTEX_FAST.
 8402**
 8403** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
 8404** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
 8405** a pointer to a static preexisting mutex.  ^Nine static mutexes are
 8406** used by the current version of SQLite.  Future versions of SQLite
 8407** may add additional static mutexes.  Static mutexes are for internal
 8408** use by SQLite only.  Applications that use SQLite mutexes should
 8409** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
 8410** SQLITE_MUTEX_RECURSIVE.
 8411**
 8412** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
 8413** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
 8414** returns a different mutex on every call.  ^For the static
 8415** mutex types, the same mutex is returned on every call that has
 8416** the same type number.
 8417**
 8418** ^The sqlite3_mutex_free() routine deallocates a previously
 8419** allocated dynamic mutex.  Attempting to deallocate a static
 8420** mutex results in undefined behavior.
 8421**
 8422** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
 8423** to enter a mutex.  ^If another thread is already within the mutex,
 8424** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
 8425** SQLITE_BUSY.  ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
 8426** upon successful entry.  ^(Mutexes created using
 8427** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
 8428** In such cases, the
 8429** mutex must be exited an equal number of times before another thread
 8430** can enter.)^  If the same thread tries to enter any mutex other
 8431** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.
 8432**
 8433** ^(Some systems (for example, Windows 95) do not support the operation
 8434** implemented by sqlite3_mutex_try().  On those systems, sqlite3_mutex_try()
 8435** will always return SQLITE_BUSY. In most cases the SQLite core only uses
 8436** sqlite3_mutex_try() as an optimization, so this is acceptable
 8437** behavior. The exceptions are unix builds that set the
 8438** SQLITE_ENABLE_SETLK_TIMEOUT build option. In that case a working
 8439** sqlite3_mutex_try() is required.)^
 8440**
 8441** ^The sqlite3_mutex_leave() routine exits a mutex that was
 8442** previously entered by the same thread.   The behavior
 8443** is undefined if the mutex is not currently entered by the
 8444** calling thread or is not currently allocated.
 8445**
 8446** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(),
 8447** sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer,
 8448** then any of the four routines behaves as a no-op.
 8449**
 8450** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
 8451*/
 8452SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int);
 8453SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*);
 8454SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*);
 8455SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*);
 8456SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*);
 8457
 8458/*
 8459** CAPI3REF: Mutex Methods Object
 8460**
 8461** An instance of this structure defines the low-level routines
 8462** used to allocate and use mutexes.
 8463**
 8464** Usually, the default mutex implementations provided by SQLite are
 8465** sufficient, however the application has the option of substituting a custom
 8466** implementation for specialized deployments or systems for which SQLite
 8467** does not provide a suitable implementation. In this case, the application
 8468** creates and populates an instance of this structure to pass
 8469** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
 8470** Additionally, an instance of this structure can be used as an
 8471** output variable when querying the system for the current mutex
 8472** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
 8473**
 8474** ^The xMutexInit method defined by this structure is invoked as
 8475** part of system initialization by the sqlite3_initialize() function.
 8476** ^The xMutexInit routine is called by SQLite exactly once for each
 8477** effective call to [sqlite3_initialize()].
 8478**
 8479** ^The xMutexEnd method defined by this structure is invoked as
 8480** part of system shutdown by the sqlite3_shutdown() function. The
 8481** implementation of this method is expected to release all outstanding
 8482** resources obtained by the mutex methods implementation, especially
 8483** those obtained by the xMutexInit method.  ^The xMutexEnd()
 8484** interface is invoked exactly once for each call to [sqlite3_shutdown()].
 8485**
 8486** ^(The remaining seven methods defined by this structure (xMutexAlloc,
 8487** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
 8488** xMutexNotheld) implement the following interfaces (respectively):
 8489**
 8490** <ul>
 8491**   <li>  [sqlite3_mutex_alloc()] </li>
 8492**   <li>  [sqlite3_mutex_free()] </li>
 8493**   <li>  [sqlite3_mutex_enter()] </li>
 8494**   <li>  [sqlite3_mutex_try()] </li>
 8495**   <li>  [sqlite3_mutex_leave()] </li>
 8496**   <li>  [sqlite3_mutex_held()] </li>
 8497**   <li>  [sqlite3_mutex_notheld()] </li>
 8498** </ul>)^
 8499**
 8500** The only difference is that the public sqlite3_XXX functions enumerated
 8501** above silently ignore any invocations that pass a NULL pointer instead
 8502** of a valid mutex handle. The implementations of the methods defined
 8503** by this structure are not required to handle this case. The results
 8504** of passing a NULL pointer instead of a valid mutex handle are undefined
 8505** (i.e. it is acceptable to provide an implementation that segfaults if
 8506** it is passed a NULL pointer).
 8507**
 8508** The xMutexInit() method must be threadsafe.  It must be harmless to
 8509** invoke xMutexInit() multiple times within the same process and without
 8510** intervening calls to xMutexEnd().  Second and subsequent calls to
 8511** xMutexInit() must be no-ops.
 8512**
 8513** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
 8514** and its associates).  Similarly, xMutexAlloc() must not use SQLite memory
 8515** allocation for a static mutex.  ^However xMutexAlloc() may use SQLite
 8516** memory allocation for a fast or recursive mutex.
 8517**
 8518** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
 8519** called, but only if the prior call to xMutexInit returned SQLITE_OK.
 8520** If xMutexInit fails in any way, it is expected to clean up after itself
 8521** prior to returning.
 8522*/
 8523typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
 8524struct sqlite3_mutex_methods {
 8525  int (*xMutexInit)(void);
 8526  int (*xMutexEnd)(void);
 8527  sqlite3_mutex *(*xMutexAlloc)(int);
 8528  void (*xMutexFree)(sqlite3_mutex *);
 8529  void (*xMutexEnter)(sqlite3_mutex *);
 8530  int (*xMutexTry)(sqlite3_mutex *);
 8531  void (*xMutexLeave)(sqlite3_mutex *);
 8532  int (*xMutexHeld)(sqlite3_mutex *);
 8533  int (*xMutexNotheld)(sqlite3_mutex *);
 8534};
 8535
 8536/*
 8537** CAPI3REF: Mutex Verification Routines
 8538**
 8539** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
 8540** are intended for use inside assert() statements.  The SQLite core
 8541** never uses these routines except inside an assert() and applications
 8542** are advised to follow the lead of the core.  The SQLite core only
 8543** provides implementations for these routines when it is compiled
 8544** with the SQLITE_DEBUG flag.  External mutex implementations
 8545** are only required to provide these routines if SQLITE_DEBUG is
 8546** defined and if NDEBUG is not defined.
 8547**
 8548** These routines should return true if the mutex in their argument
 8549** is held or not held, respectively, by the calling thread.
 8550**
 8551** The implementation is not required to provide versions of these
 8552** routines that actually work. If the implementation does not provide working
 8553** versions of these routines, it should at least provide stubs that always
 8554** return true so that one does not get spurious assertion failures.
 8555**
 8556** If the argument to sqlite3_mutex_held() is a NULL pointer then
 8557** the routine should return 1.   This seems counter-intuitive since
 8558** clearly the mutex cannot be held if it does not exist.  But
 8559** the reason the mutex does not exist is because the build is not
 8560** using mutexes.  And we do not want the assert() containing the
 8561** call to sqlite3_mutex_held() to fail, so a non-zero return is
 8562** the appropriate thing to do.  The sqlite3_mutex_notheld()
 8563** interface should also return 1 when given a NULL pointer.
 8564*/
 8565#ifndef NDEBUG
 8566SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
 8567SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
 8568#endif
 8569
 8570/*
 8571** CAPI3REF: Mutex Types
 8572**
 8573** The [sqlite3_mutex_alloc()] interface takes a single argument
 8574** which is one of these integer constants.
 8575**
 8576** The set of static mutexes may change from one SQLite release to the
 8577** next.  Applications that override the built-in mutex logic must be
 8578** prepared to accommodate additional static mutexes.
 8579*/
 8580#define SQLITE_MUTEX_FAST             0
 8581#define SQLITE_MUTEX_RECURSIVE        1
 8582#define SQLITE_MUTEX_STATIC_MAIN      2
 8583#define SQLITE_MUTEX_STATIC_MEM       3  /* sqlite3_malloc() */
 8584#define SQLITE_MUTEX_STATIC_MEM2      4  /* NOT USED */
 8585#define SQLITE_MUTEX_STATIC_OPEN      4  /* sqlite3BtreeOpen() */
 8586#define SQLITE_MUTEX_STATIC_PRNG      5  /* sqlite3_randomness() */
 8587#define SQLITE_MUTEX_STATIC_LRU       6  /* lru page list */
 8588#define SQLITE_MUTEX_STATIC_LRU2      7  /* NOT USED */
 8589#define SQLITE_MUTEX_STATIC_PMEM      7  /* sqlite3PageMalloc() */
 8590#define SQLITE_MUTEX_STATIC_APP1      8  /* For use by application */
 8591#define SQLITE_MUTEX_STATIC_APP2      9  /* For use by application */
 8592#define SQLITE_MUTEX_STATIC_APP3     10  /* For use by application */
 8593#define SQLITE_MUTEX_STATIC_VFS1     11  /* For use by built-in VFS */
 8594#define SQLITE_MUTEX_STATIC_VFS2     12  /* For use by extension VFS */
 8595#define SQLITE_MUTEX_STATIC_VFS3     13  /* For use by application VFS */
 8596
 8597/* Legacy compatibility: */
 8598#define SQLITE_MUTEX_STATIC_MASTER    2
 8599
 8600
 8601/*
 8602** CAPI3REF: Retrieve the mutex for a database connection
 8603** METHOD: sqlite3
 8604**
 8605** ^This interface returns a pointer to the [sqlite3_mutex] object that
 8606** serializes access to the [database connection] given in the argument
 8607** when the [threading mode] is Serialized.
 8608** ^If the [threading mode] is Single-thread or Multi-thread then this
 8609** routine returns a NULL pointer.
 8610*/
 8611SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
 8612
 8613/*
 8614** CAPI3REF: Low-Level Control Of Database Files
 8615** METHOD: sqlite3
 8616** KEYWORDS: {file control}
 8617**
 8618** ^The [sqlite3_file_control()] interface makes a direct call to the
 8619** xFileControl method for the [sqlite3_io_methods] object associated
 8620** with a particular database identified by the second argument. ^The
 8621** name of the database is "main" for the main database or "temp" for the
 8622** TEMP database, or the name that appears after the AS keyword for
 8623** databases that are added using the [ATTACH] SQL command.
 8624** ^A NULL pointer can be used in place of "main" to refer to the
 8625** main database file.
 8626** ^The third and fourth parameters to this routine
 8627** are passed directly through to the second and third parameters of
 8628** the xFileControl method.  ^The return value of the xFileControl
 8629** method becomes the return value of this routine.
 8630**
 8631** A few opcodes for [sqlite3_file_control()] are handled directly
 8632** by the SQLite core and never invoke the
 8633** sqlite3_io_methods.xFileControl method.
 8634** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes
 8635** a pointer to the underlying [sqlite3_file] object to be written into
 8636** the space pointed to by the 4th parameter.  The
 8637** [SQLITE_FCNTL_JOURNAL_POINTER] works similarly except that it returns
 8638** the [sqlite3_file] object associated with the journal file instead of
 8639** the main database.  The [SQLITE_FCNTL_VFS_POINTER] opcode returns
 8640** a pointer to the underlying [sqlite3_vfs] object for the file.
 8641** The [SQLITE_FCNTL_DATA_VERSION] returns the data version counter
 8642** from the pager.
 8643**
 8644** ^If the second parameter (zDbName) does not match the name of any
 8645** open database file, then SQLITE_ERROR is returned.  ^This error
 8646** code is not remembered and will not be recalled by [sqlite3_errcode()]
 8647** or [sqlite3_errmsg()].  The underlying xFileControl method might
 8648** also return SQLITE_ERROR.  There is no way to distinguish between
 8649** an incorrect zDbName and an SQLITE_ERROR return from the underlying
 8650** xFileControl method.
 8651**
 8652** See also: [file control opcodes]
 8653*/
 8654SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
 8655
 8656/*
 8657** CAPI3REF: Testing Interface
 8658**
 8659** ^The sqlite3_test_control() interface is used to read out internal
 8660** state of SQLite and to inject faults into SQLite for testing
 8661** purposes.  ^The first parameter is an operation code that determines
 8662** the number, meaning, and operation of all subsequent parameters.
 8663**
 8664** This interface is not for use by applications.  It exists solely
 8665** for verifying the correct operation of the SQLite library.  Depending
 8666** on how the SQLite library is compiled, this interface might not exist.
 8667**
 8668** The details of the operation codes, their meanings, the parameters
 8669** they take, and what they do are all subject to change without notice.
 8670** Unlike most of the SQLite API, this function is not guaranteed to
 8671** operate consistently from one release to the next.
 8672*/
 8673SQLITE_API int sqlite3_test_control(int op, ...);
 8674
 8675/*
 8676** CAPI3REF: Testing Interface Operation Codes
 8677**
 8678** These constants are the valid operation code parameters used
 8679** as the first argument to [sqlite3_test_control()].
 8680**
 8681** These parameters and their meanings are subject to change
 8682** without notice.  These values are for testing purposes only.
 8683** Applications should not use any of these parameters or the
 8684** [sqlite3_test_control()] interface.
 8685*/
 8686#define SQLITE_TESTCTRL_FIRST                    5
 8687#define SQLITE_TESTCTRL_PRNG_SAVE                5
 8688#define SQLITE_TESTCTRL_PRNG_RESTORE             6
 8689#define SQLITE_TESTCTRL_PRNG_RESET               7  /* NOT USED */
 8690#define SQLITE_TESTCTRL_FK_NO_ACTION             7
 8691#define SQLITE_TESTCTRL_BITVEC_TEST              8
 8692#define SQLITE_TESTCTRL_FAULT_INSTALL            9
 8693#define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS     10
 8694#define SQLITE_TESTCTRL_PENDING_BYTE            11
 8695#define SQLITE_TESTCTRL_ASSERT                  12
 8696#define SQLITE_TESTCTRL_ALWAYS                  13
 8697#define SQLITE_TESTCTRL_RESERVE                 14  /* NOT USED */
 8698#define SQLITE_TESTCTRL_JSON_SELFCHECK          14
 8699#define SQLITE_TESTCTRL_OPTIMIZATIONS           15
 8700#define SQLITE_TESTCTRL_ISKEYWORD               16  /* NOT USED */
 8701#define SQLITE_TESTCTRL_GETOPT                  16
 8702#define SQLITE_TESTCTRL_SCRATCHMALLOC           17  /* NOT USED */
 8703#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS      17
 8704#define SQLITE_TESTCTRL_LOCALTIME_FAULT         18
 8705#define SQLITE_TESTCTRL_EXPLAIN_STMT            19  /* NOT USED */
 8706#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD    19
 8707#define SQLITE_TESTCTRL_NEVER_CORRUPT           20
 8708#define SQLITE_TESTCTRL_VDBE_COVERAGE           21
 8709#define SQLITE_TESTCTRL_BYTEORDER               22
 8710#define SQLITE_TESTCTRL_ISINIT                  23
 8711#define SQLITE_TESTCTRL_SORTER_MMAP             24
 8712#define SQLITE_TESTCTRL_IMPOSTER                25
 8713#define SQLITE_TESTCTRL_PARSER_COVERAGE         26
 8714#define SQLITE_TESTCTRL_RESULT_INTREAL          27
 8715#define SQLITE_TESTCTRL_PRNG_SEED               28
 8716#define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS     29
 8717#define SQLITE_TESTCTRL_SEEK_COUNT              30
 8718#define SQLITE_TESTCTRL_TRACEFLAGS              31
 8719#define SQLITE_TESTCTRL_TUNE                    32
 8720#define SQLITE_TESTCTRL_LOGEST                  33
 8721#define SQLITE_TESTCTRL_USELONGDOUBLE           34  /* NOT USED */
 8722#define SQLITE_TESTCTRL_ATOF                    34
 8723#define SQLITE_TESTCTRL_LAST                    34  /* Largest TESTCTRL */
 8724
 8725/*
 8726** CAPI3REF: SQL Keyword Checking
 8727**
 8728** These routines provide access to the set of SQL language keywords
 8729** recognized by SQLite.  Applications can use these routines to determine
 8730** whether or not a specific identifier needs to be escaped (for example,
 8731** by enclosing in double-quotes) so as not to confuse the parser.
 8732**
 8733** The sqlite3_keyword_count() interface returns the number of distinct
 8734** keywords understood by SQLite.
 8735**
 8736** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and
 8737** makes *Z point to that keyword expressed as UTF8 and writes the number
 8738** of bytes in the keyword into *L.  The string that *Z points to is not
 8739** zero-terminated.  The sqlite3_keyword_name(N,Z,L) routine returns
 8740** SQLITE_OK if N is within bounds and SQLITE_ERROR if not. If either Z
 8741** or L are NULL or invalid pointers then calls to
 8742** sqlite3_keyword_name(N,Z,L) result in undefined behavior.
 8743**
 8744** The sqlite3_keyword_check(Z,L) interface checks to see whether or not
 8745** the L-byte UTF8 identifier that Z points to is a keyword, returning non-zero
 8746** if it is and zero if not.
 8747**
 8748** The parser used by SQLite is forgiving.  It is often possible to use
 8749** a keyword as an identifier as long as such use does not result in a
 8750** parsing ambiguity.  For example, the statement
 8751** "CREATE TABLE BEGIN(REPLACE,PRAGMA,END);" is accepted by SQLite, and
 8752** creates a new table named "BEGIN" with three columns named
 8753** "REPLACE", "PRAGMA", and "END".  Nevertheless, best practice is to avoid
 8754** using keywords as identifiers.  Common techniques used to avoid keyword
 8755** name collisions include:
 8756** <ul>
 8757** <li> Put all identifier names inside double-quotes.  This is the official
 8758**      SQL way to escape identifier names.
 8759** <li> Put identifier names inside &#91;...&#93;.  This is not standard SQL,
 8760**      but it is what SQL Server does and so lots of programmers use this
 8761**      technique.
 8762** <li> Begin every identifier with the letter "Z" as no SQL keywords start
 8763**      with "Z".
 8764** <li> Include a digit somewhere in every identifier name.
 8765** </ul>
 8766**
 8767** Note that the number of keywords understood by SQLite can depend on
 8768** compile-time options.  For example, "VACUUM" is not a keyword if
 8769** SQLite is compiled with the [-DSQLITE_OMIT_VACUUM] option.  Also,
 8770** new keywords may be added to future releases of SQLite.
 8771*/
 8772SQLITE_API int sqlite3_keyword_count(void);
 8773SQLITE_API int sqlite3_keyword_name(int,const char**,int*);
 8774SQLITE_API int sqlite3_keyword_check(const char*,int);
 8775
 8776/*
 8777** CAPI3REF: Dynamic String Object
 8778** KEYWORDS: {dynamic string}
 8779**
 8780** An instance of the sqlite3_str object contains a dynamically-sized
 8781** string under construction.
 8782**
 8783** The lifecycle of an sqlite3_str object is as follows:
 8784** <ol>
 8785** <li> ^The sqlite3_str object is created using [sqlite3_str_new()].
 8786** <li> ^Text is appended to the sqlite3_str object using various
 8787** methods, such as [sqlite3_str_appendf()].
 8788** <li> ^The sqlite3_str object is destroyed and the string it created
 8789** is returned using the [sqlite3_str_finish()] interface.
 8790** </ol>
 8791*/
 8792typedef struct sqlite3_str sqlite3_str;
 8793
 8794/*
 8795** CAPI3REF: Create A New Dynamic String Object
 8796** CONSTRUCTOR: sqlite3_str
 8797**
 8798** ^The [sqlite3_str_new(D)] interface allocates and initializes
 8799** a new [sqlite3_str] object.  To avoid memory leaks, the object returned by
 8800** [sqlite3_str_new()] must be freed by a subsequent call to
 8801** [sqlite3_str_finish(X)].
 8802**
 8803** ^The [sqlite3_str_new(D)] interface always returns a pointer to a
 8804** valid [sqlite3_str] object, though in the event of an out-of-memory
 8805** error the returned object might be a special singleton that will
 8806** silently reject new text, always return SQLITE_NOMEM from
 8807** [sqlite3_str_errcode()], always return 0 for
 8808** [sqlite3_str_length()], and always return NULL from
 8809** [sqlite3_str_finish(X)].  It is always safe to use the value
 8810** returned by [sqlite3_str_new(D)] as the sqlite3_str parameter
 8811** to any of the other [sqlite3_str] methods.
 8812**
 8813** The D parameter to [sqlite3_str_new(D)] may be NULL.  If the
 8814** D parameter in [sqlite3_str_new(D)] is not NULL, then the maximum
 8815** length of the string contained in the [sqlite3_str] object will be
 8816** the value set for [sqlite3_limit](D,[SQLITE_LIMIT_LENGTH]) instead
 8817** of [SQLITE_MAX_LENGTH].
 8818*/
 8819SQLITE_API sqlite3_str *sqlite3_str_new(sqlite3*);
 8820
 8821/*
 8822** CAPI3REF: Finalize A Dynamic String
 8823** DESTRUCTOR: sqlite3_str
 8824**
 8825** ^The [sqlite3_str_finish(X)] interface destroys the sqlite3_str object X
 8826** and returns a pointer to a memory buffer obtained from [sqlite3_malloc64()]
 8827** that contains the constructed string.  The calling application should
 8828** pass the returned value to [sqlite3_free()] to avoid a memory leak.
 8829** ^The [sqlite3_str_finish(X)] interface may return a NULL pointer if any
 8830** errors were encountered during construction of the string.  ^The
 8831** [sqlite3_str_finish(X)] interface might also return a NULL pointer if the
 8832** string in [sqlite3_str] object X is zero bytes long.
 8833**
 8834** ^The [sqlite3_str_free(X)] interface destroys both the sqlite3_str object
 8835** X and the string content it contains.  Calling sqlite3_str_free(X) is
 8836** the equivalent of calling [sqlite3_free](sqlite3_str_finish(X)).
 8837*/
 8838SQLITE_API char *sqlite3_str_finish(sqlite3_str*);
 8839SQLITE_API void sqlite3_str_free(sqlite3_str*);
 8840
 8841/*
 8842** CAPI3REF: Add Content To A Dynamic String
 8843** METHOD: sqlite3_str
 8844**
 8845** These interfaces add or remove content to an sqlite3_str object
 8846** previously obtained from [sqlite3_str_new()].
 8847**
 8848** ^The [sqlite3_str_appendf(X,F,...)] and
 8849** [sqlite3_str_vappendf(X,F,V)] interfaces uses the [built-in printf]
 8850** functionality of SQLite to append formatted text onto the end of
 8851** [sqlite3_str] object X.
 8852**
 8853** ^The [sqlite3_str_append(X,S,N)] method appends exactly N bytes from string S
 8854** onto the end of the [sqlite3_str] object X.  N must be non-negative.
 8855** S must contain at least N non-zero bytes of content.  To append a
 8856** zero-terminated string in its entirety, use the [sqlite3_str_appendall()]
 8857** method instead.
 8858**
 8859** ^The [sqlite3_str_appendall(X,S)] method appends the complete content of
 8860** zero-terminated string S onto the end of [sqlite3_str] object X.
 8861**
 8862** ^The [sqlite3_str_appendchar(X,N,C)] method appends N copies of the
 8863** single-byte character C onto the end of [sqlite3_str] object X.
 8864** ^This method can be used, for example, to add whitespace indentation.
 8865**
 8866** ^The [sqlite3_str_reset(X)] method resets the string under construction
 8867** inside [sqlite3_str] object X back to zero bytes in length.
 8868**
 8869** ^The [sqlite3_str_truncate(X,N)] method changes the length of the string
 8870** under construction to be N bytes or less.  This routine is a no-op if
 8871** N is negative or if the string is already N bytes or smaller in size.
 8872**
 8873** These methods do not return a result code.  ^If an error occurs, that fact
 8874** is recorded in the [sqlite3_str] object and can be recovered by a
 8875** subsequent call to [sqlite3_str_errcode(X)].
 8876*/
 8877SQLITE_API void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...);
 8878SQLITE_API void sqlite3_str_vappendf(sqlite3_str*, const char *zFormat, va_list);
 8879SQLITE_API void sqlite3_str_append(sqlite3_str*, const char *zIn, int N);
 8880SQLITE_API void sqlite3_str_appendall(sqlite3_str*, const char *zIn);
 8881SQLITE_API void sqlite3_str_appendchar(sqlite3_str*, int N, char C);
 8882SQLITE_API void sqlite3_str_reset(sqlite3_str*);
 8883SQLITE_API void sqlite3_str_truncate(sqlite3_str*,int N);
 8884
 8885/*
 8886** CAPI3REF: Status Of A Dynamic String
 8887** METHOD: sqlite3_str
 8888**
 8889** These interfaces return the current status of an [sqlite3_str] object.
 8890**
 8891** ^If any prior errors have occurred while constructing the dynamic string
 8892** in sqlite3_str X, then the [sqlite3_str_errcode(X)] method will return
 8893** an appropriate error code.  ^The [sqlite3_str_errcode(X)] method returns
 8894** [SQLITE_NOMEM] following any out-of-memory error, or
 8895** [SQLITE_TOOBIG] if the size of the dynamic string exceeds
 8896** [SQLITE_MAX_LENGTH], or [SQLITE_OK] if there have been no errors.
 8897**
 8898** ^The [sqlite3_str_length(X)] method returns the current length, in bytes,
 8899** of the dynamic string under construction in [sqlite3_str] object X.
 8900** ^The length returned by [sqlite3_str_length(X)] does not include the
 8901** zero-termination byte.
 8902**
 8903** ^The [sqlite3_str_value(X)] method returns a pointer to the current
 8904** content of the dynamic string under construction in X.  The value
 8905** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X
 8906** and might be freed or altered by any subsequent method on the same
 8907** [sqlite3_str] object.  Applications must not use the pointer returned by
 8908** [sqlite3_str_value(X)] after any subsequent method call on the same
 8909** object.  ^Applications may change the content of the string returned
 8910** by [sqlite3_str_value(X)] as long as they do not write into any bytes
 8911** outside the range of 0 to [sqlite3_str_length(X)] and do not read or
 8912** write any byte after any subsequent sqlite3_str method call.
 8913*/
 8914SQLITE_API int sqlite3_str_errcode(sqlite3_str*);
 8915SQLITE_API int sqlite3_str_length(sqlite3_str*);
 8916SQLITE_API char *sqlite3_str_value(sqlite3_str*);
 8917
 8918/*
 8919** CAPI3REF: SQLite Runtime Status
 8920**
 8921** ^These interfaces are used to retrieve runtime status information
 8922** about the performance of SQLite, and optionally to reset various
 8923** highwater marks.  ^The first argument is an integer code for
 8924** the specific parameter to measure.  ^(Recognized integer codes
 8925** are of the form [status parameters | SQLITE_STATUS_...].)^
 8926** ^The current value of the parameter is returned into *pCurrent.
 8927** ^The highest recorded value is returned in *pHighwater.  ^If the
 8928** resetFlag is true, then the highest record value is reset after
 8929** *pHighwater is written.  ^(Some parameters do not record the highest
 8930** value.  For those parameters
 8931** nothing is written into *pHighwater and the resetFlag is ignored.)^
 8932** ^(Other parameters record only the highwater mark and not the current
 8933** value.  For these latter parameters nothing is written into *pCurrent.)^
 8934**
 8935** ^The sqlite3_status() and sqlite3_status64() routines return
 8936** SQLITE_OK on success and a non-zero [error code] on failure.
 8937**
 8938** If either the current value or the highwater mark is too large to
 8939** be represented by a 32-bit integer, then the values returned by
 8940** sqlite3_status() are undefined.
 8941**
 8942** See also: [sqlite3_db_status()]
 8943*/
 8944SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
 8945SQLITE_API int sqlite3_status64(
 8946  int op,
 8947  sqlite3_int64 *pCurrent,
 8948  sqlite3_int64 *pHighwater,
 8949  int resetFlag
 8950);
 8951
 8952
 8953/*
 8954** CAPI3REF: Status Parameters
 8955** KEYWORDS: {status parameters}
 8956**
 8957** These integer constants designate various run-time status parameters
 8958** that can be returned by [sqlite3_status()].
 8959**
 8960** <dl>
 8961** [[SQLITE_STATUS_MEMORY_USED]] ^(<dt>SQLITE_STATUS_MEMORY_USED</dt>
 8962** <dd>This parameter is the current amount of memory checked out
 8963** using [sqlite3_malloc()], either directly or indirectly.  The
 8964** figure includes calls made to [sqlite3_malloc()] by the application
 8965** and internal memory usage by the SQLite library.  Auxiliary page-cache
 8966** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
 8967** this parameter.  The amount returned is the sum of the allocation
 8968** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
 8969**
 8970** [[SQLITE_STATUS_MALLOC_SIZE]] ^(<dt>SQLITE_STATUS_MALLOC_SIZE</dt>
 8971** <dd>This parameter records the largest memory allocation request
 8972** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their
 8973** internal equivalents).  Only the value returned in the
 8974** *pHighwater parameter to [sqlite3_status()] is of interest.
 8975** The value written into the *pCurrent parameter is undefined.</dd>)^
 8976**
 8977** [[SQLITE_STATUS_MALLOC_COUNT]] ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt>
 8978** <dd>This parameter records the number of separate memory allocations
 8979** currently checked out.</dd>)^
 8980**
 8981** [[SQLITE_STATUS_PAGECACHE_USED]] ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt>
 8982** <dd>This parameter returns the number of pages used out of the
 8983** [pagecache memory allocator] that was configured using
 8984** [SQLITE_CONFIG_PAGECACHE].  The
 8985** value returned is in pages, not in bytes.</dd>)^
 8986**
 8987** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]]
 8988** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
 8989** <dd>This parameter returns the number of bytes of page cache
 8990** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
 8991** buffer and where forced to overflow to [sqlite3_malloc()].  The
 8992** returned value includes allocations that overflowed because they
 8993** were too large (they were larger than the "sz" parameter to
 8994** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
 8995** no space was left in the page cache.</dd>)^
 8996**
 8997** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(<dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
 8998** <dd>This parameter records the largest memory allocation request
 8999** handed to the [pagecache memory allocator].  Only the value returned in the
 9000** *pHighwater parameter to [sqlite3_status()] is of interest.
 9001** The value written into the *pCurrent parameter is undefined.</dd>)^
 9002**
 9003** [[SQLITE_STATUS_SCRATCH_USED]] <dt>SQLITE_STATUS_SCRATCH_USED</dt>
 9004** <dd>No longer used.</dd>
 9005**
 9006** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
 9007** <dd>No longer used.</dd>
 9008**
 9009** [[SQLITE_STATUS_SCRATCH_SIZE]] <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
 9010** <dd>No longer used.</dd>
 9011**
 9012** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
 9013** <dd>The *pHighwater parameter records the deepest parser stack.
 9014** The *pCurrent value is undefined.  The *pHighwater value is only
 9015** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>)^
 9016** </dl>
 9017**
 9018** New status parameters may be added from time to time.
 9019*/
 9020#define SQLITE_STATUS_MEMORY_USED          0
 9021#define SQLITE_STATUS_PAGECACHE_USED       1
 9022#define SQLITE_STATUS_PAGECACHE_OVERFLOW   2
 9023#define SQLITE_STATUS_SCRATCH_USED         3  /* NOT USED */
 9024#define SQLITE_STATUS_SCRATCH_OVERFLOW     4  /* NOT USED */
 9025#define SQLITE_STATUS_MALLOC_SIZE          5
 9026#define SQLITE_STATUS_PARSER_STACK         6
 9027#define SQLITE_STATUS_PAGECACHE_SIZE       7
 9028#define SQLITE_STATUS_SCRATCH_SIZE         8  /* NOT USED */
 9029#define SQLITE_STATUS_MALLOC_COUNT         9
 9030
 9031/*
 9032** CAPI3REF: Database Connection Status
 9033** METHOD: sqlite3
 9034**
 9035** ^This interface is used to retrieve runtime status information
 9036** about a single [database connection].  ^The first argument is the
 9037** database connection object to be interrogated.  ^The second argument
 9038** is an integer constant, taken from the set of
 9039** [SQLITE_DBSTATUS options], that
 9040** determines the parameter to interrogate.  The set of
 9041** [SQLITE_DBSTATUS options] is likely
 9042** to grow in future releases of SQLite.
 9043**
 9044** ^The current value of the requested parameter is written into *pCur
 9045** and the highest instantaneous value is written into *pHiwtr.  ^If
 9046** the resetFlg is true, then the highest instantaneous value is
 9047** reset back down to the current value.
 9048**
 9049** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
 9050** non-zero [error code] on failure.
 9051**
 9052** ^The sqlite3_db_status64(D,O,C,H,R) routine works exactly the same
 9053** way as sqlite3_db_status(D,O,C,H,R) routine except that the C and H
 9054** parameters are pointer to 64-bit integers (type: sqlite3_int64) instead
 9055** of pointers to 32-bit integers, which allows larger status values
 9056** to be returned.  If a status value exceeds 2,147,483,647 then
 9057** sqlite3_db_status() will truncate the value whereas sqlite3_db_status64()
 9058** will return the full value.
 9059**
 9060** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
 9061*/
 9062SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
 9063SQLITE_API int sqlite3_db_status64(sqlite3*,int,sqlite3_int64*,sqlite3_int64*,int);
 9064
 9065/*
 9066** CAPI3REF: Status Parameters for database connections
 9067** KEYWORDS: {SQLITE_DBSTATUS options}
 9068**
 9069** These constants are the available integer "verbs" that can be passed as
 9070** the second argument to the [sqlite3_db_status()] interface.
 9071**
 9072** New verbs may be added in future releases of SQLite. Existing verbs
 9073** might be discontinued. Applications should check the return code from
 9074** [sqlite3_db_status()] to make sure that the call worked.
 9075** The [sqlite3_db_status()] interface will return a non-zero error code
 9076** if a discontinued or unsupported verb is invoked.
 9077**
 9078** <dl>
 9079** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
 9080** <dd>This parameter returns the number of lookaside memory slots currently
 9081** checked out.</dd>)^
 9082**
 9083** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
 9084** <dd>This parameter returns the number of malloc attempts that were
 9085** satisfied using lookaside memory. Only the high-water value is meaningful;
 9086** the current value is always zero.</dd>)^
 9087**
 9088** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]]
 9089** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
 9090** <dd>This parameter returns the number of malloc attempts that might have
 9091** been satisfied using lookaside memory but failed due to the amount of
 9092** memory requested being larger than the lookaside slot size.
 9093** Only the high-water value is meaningful;
 9094** the current value is always zero.</dd>)^
 9095**
 9096** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]]
 9097** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
 9098** <dd>This parameter returns the number of malloc attempts that might have
 9099** been satisfied using lookaside memory but failed due to all lookaside
 9100** memory already being in use.
 9101** Only the high-water value is meaningful;
 9102** the current value is always zero.</dd>)^
 9103**
 9104** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
 9105** <dd>This parameter returns the approximate number of bytes of heap
 9106** memory used by all pager caches associated with the database connection.)^
 9107** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
 9108** </dd>
 9109**
 9110** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]]
 9111** ^(<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt>
 9112** <dd>This parameter is similar to DBSTATUS_CACHE_USED, except that if a
 9113** pager cache is shared between two or more connections the bytes of heap
 9114** memory used by that pager cache is divided evenly between the attached
 9115** connections.)^  In other words, if none of the pager caches associated
 9116** with the database connection are shared, this request returns the same
 9117** value as DBSTATUS_CACHE_USED. Or, if one or more of the pager caches are
 9118** shared, the value returned by this call will be smaller than that returned
 9119** by DBSTATUS_CACHE_USED. ^The highwater mark associated with
 9120** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.</dd>
 9121**
 9122** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
 9123** <dd>This parameter returns the approximate number of bytes of heap
 9124** memory used to store the schema for all databases associated
 9125** with the connection - main, temp, and any [ATTACH]-ed databases.)^
 9126** ^The full amount of memory used by the schemas is reported, even if the
 9127** schema memory is shared with other database connections due to
 9128** [shared cache mode] being enabled.
 9129** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
 9130** </dd>
 9131**
 9132** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
 9133** <dd>This parameter returns the approximate number of bytes of heap
 9134** and lookaside memory used by all prepared statements associated with
 9135** the database connection.)^
 9136** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
 9137** </dd>
 9138**
 9139** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(<dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
 9140** <dd>This parameter returns the number of pager cache hits that have
 9141** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT
 9142** is always 0.
 9143** </dd>
 9144**
 9145** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(<dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
 9146** <dd>This parameter returns the number of pager cache misses that have
 9147** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS
 9148** is always 0.
 9149** </dd>
 9150**
 9151** [[SQLITE_DBSTATUS_CACHE_WRITE]] ^(<dt>SQLITE_DBSTATUS_CACHE_WRITE</dt>
 9152** <dd>This parameter returns the number of dirty cache entries that have
 9153** been written to disk. Specifically, the number of pages written to the
 9154** wal file in wal mode databases, or the number of pages written to the
 9155** database file in rollback mode databases. Any pages written as part of
 9156** transaction rollback or database recovery operations are not included.
 9157** If an IO or other error occurs while writing a page to disk, the effect
 9158** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The
 9159** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0.
 9160** <p>
 9161** ^(There is overlap between the quantities measured by this parameter
 9162** (SQLITE_DBSTATUS_CACHE_WRITE) and SQLITE_DBSTATUS_TEMPBUF_SPILL.
 9163** Resetting one will reduce the other.)^
 9164** </dd>
 9165**
 9166** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(<dt>SQLITE_DBSTATUS_CACHE_SPILL</dt>
 9167** <dd>This parameter returns the number of dirty cache entries that have
 9168** been written to disk in the middle of a transaction due to the page
 9169** cache overflowing. Transactions are more efficient if they are written
 9170** to disk all at once. When pages spill mid-transaction, that introduces
 9171** additional overhead. This parameter can be used to help identify
 9172** inefficiencies that can be resolved by increasing the cache size.
 9173** </dd>
 9174**
 9175** [[SQLITE_DBSTATUS_DEFERRED_FKS]] ^(<dt>SQLITE_DBSTATUS_DEFERRED_FKS</dt>
 9176** <dd>This parameter returns zero for the current value if and only if
 9177** all foreign key constraints (deferred or immediate) have been
 9178** resolved.)^  ^The highwater mark is always 0.
 9179**
 9180** [[SQLITE_DBSTATUS_TEMPBUF_SPILL] ^(<dt>SQLITE_DBSTATUS_TEMPBUF_SPILL</dt>
 9181** <dd>^(This parameter returns the number of bytes written to temporary
 9182** files on disk that could have been kept in memory had sufficient memory
 9183** been available.  This value includes writes to intermediate tables that
 9184** are part of complex queries, external sorts that spill to disk, and
 9185** writes to TEMP tables.)^
 9186** ^The highwater mark is always 0.
 9187** <p>
 9188** ^(There is overlap between the quantities measured by this parameter
 9189** (SQLITE_DBSTATUS_TEMPBUF_SPILL) and SQLITE_DBSTATUS_CACHE_WRITE.
 9190** Resetting one will reduce the other.)^
 9191** </dd>
 9192** </dl>
 9193*/
 9194#define SQLITE_DBSTATUS_LOOKASIDE_USED       0
 9195#define SQLITE_DBSTATUS_CACHE_USED           1
 9196#define SQLITE_DBSTATUS_SCHEMA_USED          2
 9197#define SQLITE_DBSTATUS_STMT_USED            3
 9198#define SQLITE_DBSTATUS_LOOKASIDE_HIT        4
 9199#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE  5
 9200#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL  6
 9201#define SQLITE_DBSTATUS_CACHE_HIT            7
 9202#define SQLITE_DBSTATUS_CACHE_MISS           8
 9203#define SQLITE_DBSTATUS_CACHE_WRITE          9
 9204#define SQLITE_DBSTATUS_DEFERRED_FKS        10
 9205#define SQLITE_DBSTATUS_CACHE_USED_SHARED   11
 9206#define SQLITE_DBSTATUS_CACHE_SPILL         12
 9207#define SQLITE_DBSTATUS_TEMPBUF_SPILL       13
 9208#define SQLITE_DBSTATUS_MAX                 13   /* Largest defined DBSTATUS */
 9209
 9210
 9211/*
 9212** CAPI3REF: Prepared Statement Status
 9213** METHOD: sqlite3_stmt
 9214**
 9215** ^(Each prepared statement maintains various
 9216** [SQLITE_STMTSTATUS counters] that measure the number
 9217** of times it has performed specific operations.)^  These counters can
 9218** be used to monitor the performance characteristics of the prepared
 9219** statements.  For example, if the number of table steps greatly exceeds
 9220** the number of table searches or result rows, that would tend to indicate
 9221** that the prepared statement is using a full table scan rather than
 9222** an index.
 9223**
 9224** ^(This interface is used to retrieve and reset counter values from
 9225** a [prepared statement].  The first argument is the prepared statement
 9226** object to be interrogated.  The second argument
 9227** is an integer code for a specific [SQLITE_STMTSTATUS counter]
 9228** to be interrogated.)^
 9229** ^The current value of the requested counter is returned.
 9230** ^If the resetFlg is true, then the counter is reset to zero after this
 9231** interface call returns.
 9232**
 9233** See also: [sqlite3_status()] and [sqlite3_db_status()].
 9234*/
 9235SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
 9236
 9237/*
 9238** CAPI3REF: Status Parameters for prepared statements
 9239** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters}
 9240**
 9241** These preprocessor macros define integer codes that name counter
 9242** values associated with the [sqlite3_stmt_status()] interface.
 9243** The meanings of the various counters are as follows:
 9244**
 9245** <dl>
 9246** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]] <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
 9247** <dd>^This is the number of times that SQLite has stepped forward in
 9248** a table as part of a full table scan.  Large numbers for this counter
 9249** may indicate opportunities for performance improvement through
 9250** careful use of indices.</dd>
 9251**
 9252** [[SQLITE_STMTSTATUS_SORT]] <dt>SQLITE_STMTSTATUS_SORT</dt>
 9253** <dd>^This is the number of sort operations that have occurred.
 9254** A non-zero value in this counter may indicate an opportunity to
 9255** improve performance through careful use of indices.</dd>
 9256**
 9257** [[SQLITE_STMTSTATUS_AUTOINDEX]] <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
 9258** <dd>^This is the number of rows inserted into transient indices that
 9259** were created automatically in order to help joins run faster.
 9260** A non-zero value in this counter may indicate an opportunity to
 9261** improve performance by adding permanent indices that do not
 9262** need to be reinitialized each time the statement is run.</dd>
 9263**
 9264** [[SQLITE_STMTSTATUS_VM_STEP]] <dt>SQLITE_STMTSTATUS_VM_STEP</dt>
 9265** <dd>^This is the number of virtual machine operations executed
 9266** by the prepared statement if that number is less than or equal
 9267** to 2147483647.  The number of virtual machine operations can be
 9268** used as a proxy for the total work done by the prepared statement.
 9269** If the number of virtual machine operations exceeds 2147483647
 9270** then the value returned by this statement status code is undefined.</dd>
 9271**
 9272** [[SQLITE_STMTSTATUS_REPREPARE]] <dt>SQLITE_STMTSTATUS_REPREPARE</dt>
 9273** <dd>^This is the number of times that the prepare statement has been
 9274** automatically regenerated due to schema changes or changes to
 9275** [bound parameters] that might affect the query plan.</dd>
 9276**
 9277** [[SQLITE_STMTSTATUS_RUN]] <dt>SQLITE_STMTSTATUS_RUN</dt>
 9278** <dd>^This is the number of times that the prepared statement has
 9279** been run.  A single "run" for the purposes of this counter is one
 9280** or more calls to [sqlite3_step()] followed by a call to [sqlite3_reset()].
 9281** The counter is incremented on the first [sqlite3_step()] call of each
 9282** cycle.</dd>
 9283**
 9284** [[SQLITE_STMTSTATUS_FILTER_MISS]]
 9285** [[SQLITE_STMTSTATUS_FILTER HIT]]
 9286** <dt>SQLITE_STMTSTATUS_FILTER_HIT<br>
 9287** SQLITE_STMTSTATUS_FILTER_MISS</dt>
 9288** <dd>^SQLITE_STMTSTATUS_FILTER_HIT is the number of times that a join
 9289** step was bypassed because a Bloom filter returned not-found.  The
 9290** corresponding SQLITE_STMTSTATUS_FILTER_MISS value is the number of
 9291** times that the Bloom filter returned a find, and thus the join step
 9292** had to be processed as normal.</dd>
 9293**
 9294** [[SQLITE_STMTSTATUS_MEMUSED]] <dt>SQLITE_STMTSTATUS_MEMUSED</dt>
 9295** <dd>^This is the approximate number of bytes of heap memory
 9296** used to store the prepared statement.  ^This value is not actually
 9297** a counter, and so the resetFlg parameter to sqlite3_stmt_status()
 9298** is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED.
 9299** </dd>
 9300** </dl>
 9301*/
 9302#define SQLITE_STMTSTATUS_FULLSCAN_STEP     1
 9303#define SQLITE_STMTSTATUS_SORT              2
 9304#define SQLITE_STMTSTATUS_AUTOINDEX         3
 9305#define SQLITE_STMTSTATUS_VM_STEP           4
 9306#define SQLITE_STMTSTATUS_REPREPARE         5
 9307#define SQLITE_STMTSTATUS_RUN               6
 9308#define SQLITE_STMTSTATUS_FILTER_MISS       7
 9309#define SQLITE_STMTSTATUS_FILTER_HIT        8
 9310#define SQLITE_STMTSTATUS_MEMUSED           99
 9311
 9312/*
 9313** CAPI3REF: Custom Page Cache Object
 9314**
 9315** The sqlite3_pcache type is opaque.  It is implemented by
 9316** the pluggable module.  The SQLite core has no knowledge of
 9317** its size or internal structure and never deals with the
 9318** sqlite3_pcache object except by holding and passing pointers
 9319** to the object.
 9320**
 9321** See [sqlite3_pcache_methods2] for additional information.
 9322*/
 9323typedef struct sqlite3_pcache sqlite3_pcache;
 9324
 9325/*
 9326** CAPI3REF: Custom Page Cache Object
 9327**
 9328** The sqlite3_pcache_page object represents a single page in the
 9329** page cache.  The page cache will allocate instances of this
 9330** object.  Various methods of the page cache use pointers to instances
 9331** of this object as parameters or as their return value.
 9332**
 9333** See [sqlite3_pcache_methods2] for additional information.
 9334*/
 9335typedef struct sqlite3_pcache_page sqlite3_pcache_page;
 9336struct sqlite3_pcache_page {
 9337  void *pBuf;        /* The content of the page */
 9338  void *pExtra;      /* Extra information associated with the page */
 9339};
 9340
 9341/*
 9342** CAPI3REF: Application Defined Page Cache.
 9343** KEYWORDS: {page cache}
 9344**
 9345** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can
 9346** register an alternative page cache implementation by passing in an
 9347** instance of the sqlite3_pcache_methods2 structure.)^
 9348** In many applications, most of the heap memory allocated by
 9349** SQLite is used for the page cache.
 9350** By implementing a
 9351** custom page cache using this API, an application can better control
 9352** the amount of memory consumed by SQLite, the way in which
 9353** that memory is allocated and released, and the policies used to
 9354** determine exactly which parts of a database file are cached and for
 9355** how long.
 9356**
 9357** The alternative page cache mechanism is an
 9358** extreme measure that is only needed by the most demanding applications.
 9359** The built-in page cache is recommended for most uses.
 9360**
 9361** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an
 9362** internal buffer by SQLite within the call to [sqlite3_config].  Hence
 9363** the application may discard the parameter after the call to
 9364** [sqlite3_config()] returns.)^
 9365**
 9366** [[the xInit() page cache method]]
 9367** ^(The xInit() method is called once for each effective
 9368** call to [sqlite3_initialize()])^
 9369** (usually only once during the lifetime of the process). ^(The xInit()
 9370** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^
 9371** The intent of the xInit() method is to set up global data structures
 9372** required by the custom page cache implementation.
 9373** ^(If the xInit() method is NULL, then the
 9374** built-in default page cache is used instead of the application defined
 9375** page cache.)^
 9376**
 9377** [[the xShutdown() page cache method]]
 9378** ^The xShutdown() method is called by [sqlite3_shutdown()].
 9379** It can be used to clean up
 9380** any outstanding resources before process shutdown, if required.
 9381** ^The xShutdown() method may be NULL.
 9382**
 9383** ^SQLite automatically serializes calls to the xInit method,
 9384** so the xInit method need not be threadsafe.  ^The
 9385** xShutdown method is only called from [sqlite3_shutdown()] so it does
 9386** not need to be threadsafe either.  All other methods must be threadsafe
 9387** in multithreaded applications.
 9388**
 9389** ^SQLite will never invoke xInit() more than once without an intervening
 9390** call to xShutdown().
 9391**
 9392** [[the xCreate() page cache methods]]
 9393** ^SQLite invokes the xCreate() method to construct a new cache instance.
 9394** SQLite will typically create one cache instance for each open database file,
 9395** though this is not guaranteed. ^The
 9396** first parameter, szPage, is the size in bytes of the pages that must
 9397** be allocated by the cache.  ^szPage will always be a power of two.  ^The
 9398** second parameter szExtra is a number of bytes of extra storage
 9399** associated with each page cache entry.  ^The szExtra parameter will be
 9400** a number less than 250.  SQLite will use the
 9401** extra szExtra bytes on each page to store metadata about the underlying
 9402** database page on disk.  The value passed into szExtra depends
 9403** on the SQLite version, the target platform, and how SQLite was compiled.
 9404** ^The third argument to xCreate(), bPurgeable, is true if the cache being
 9405** created will be used to cache database pages of a file stored on disk, or
 9406** false if it is used for an in-memory database. The cache implementation
 9407** does not have to do anything special based upon the value of bPurgeable;
 9408** it is purely advisory.  ^On a cache where bPurgeable is false, SQLite will
 9409** never invoke xUnpin() except to deliberately delete a page.
 9410** ^In other words, calls to xUnpin() on a cache with bPurgeable set to
 9411** false will always have the "discard" flag set to true.
 9412** ^Hence, a cache created with bPurgeable set to false will
 9413** never contain any unpinned pages.
 9414**
 9415** [[the xCachesize() page cache method]]
 9416** ^(The xCachesize() method may be called at any time by SQLite to set the
 9417** suggested maximum cache-size (number of pages stored) for the cache
 9418** instance passed as the first argument. This is the value configured using
 9419** the SQLite "[PRAGMA cache_size]" command.)^  As with the bPurgeable
 9420** parameter, the implementation is not required to do anything with this
 9421** value; it is advisory only.
 9422**
 9423** [[the xPagecount() page cache methods]]
 9424** The xPagecount() method must return the number of pages currently
 9425** stored in the cache, both pinned and unpinned.
 9426**
 9427** [[the xFetch() page cache methods]]
 9428** The xFetch() method locates a page in the cache and returns a pointer to
 9429** an sqlite3_pcache_page object associated with that page, or a NULL pointer.
 9430** The pBuf element of the returned sqlite3_pcache_page object will be a
 9431** pointer to a buffer of szPage bytes used to store the content of a
 9432** single database page.  The pExtra element of sqlite3_pcache_page will be
 9433** a pointer to the szExtra bytes of extra storage that SQLite has requested
 9434** for each entry in the page cache.
 9435**
 9436** The page to be fetched is determined by the key. ^The minimum key value
 9437** is 1.  After it has been retrieved using xFetch, the page is considered
 9438** to be "pinned".
 9439**
 9440** If the requested page is already in the page cache, then the page cache
 9441** implementation must return a pointer to the page buffer with its content
 9442** intact.  If the requested page is not already in the cache, then the
 9443** cache implementation should use the value of the createFlag
 9444** parameter to help it determine what action to take:
 9445**
 9446** <table border=1 width=85% align=center>
 9447** <tr><th> createFlag <th> Behavior when page is not already in cache
 9448** <tr><td> 0 <td> Do not allocate a new page.  Return NULL.
 9449** <tr><td> 1 <td> Allocate a new page if it is easy and convenient to do so.
 9450**                 Otherwise return NULL.
 9451** <tr><td> 2 <td> Make every effort to allocate a new page.  Only return
 9452**                 NULL if allocating a new page is effectively impossible.
 9453** </table>
 9454**
 9455** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1.  SQLite
 9456** will only use a createFlag of 2 after a prior call with a createFlag of 1
 9457** failed.)^  In between the xFetch() calls, SQLite may
 9458** attempt to unpin one or more cache pages by spilling the content of
 9459** pinned pages to disk and synching the operating system disk cache.
 9460**
 9461** [[the xUnpin() page cache method]]
 9462** ^xUnpin() is called by SQLite with a pointer to a currently pinned page
 9463** as its second argument.  If the third parameter, discard, is non-zero,
 9464** then the page must be evicted from the cache.
 9465** ^If the discard parameter is
 9466** zero, then the page may be discarded or retained at the discretion of the
 9467** page cache implementation. ^The page cache implementation
 9468** may choose to evict unpinned pages at any time.
 9469**
 9470** The cache must not perform any reference counting. A single
 9471** call to xUnpin() unpins the page regardless of the number of prior calls
 9472** to xFetch().
 9473**
 9474** [[the xRekey() page cache methods]]
 9475** The xRekey() method is used to change the key value associated with the
 9476** page passed as the second argument. If the cache
 9477** previously contains an entry associated with newKey, it must be
 9478** discarded. ^Any prior cache entry associated with newKey is guaranteed not
 9479** to be pinned.
 9480**
 9481** When SQLite calls the xTruncate() method, the cache must discard all
 9482** existing cache entries with page numbers (keys) greater than or equal
 9483** to the value of the iLimit parameter passed to xTruncate(). If any
 9484** of these pages are pinned, they become implicitly unpinned, meaning that
 9485** they can be safely discarded.
 9486**
 9487** [[the xDestroy() page cache method]]
 9488** ^The xDestroy() method is used to delete a cache allocated by xCreate().
 9489** All resources associated with the specified cache should be freed. ^After
 9490** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
 9491** handle invalid, and will not use it with any other sqlite3_pcache_methods2
 9492** functions.
 9493**
 9494** [[the xShrink() page cache method]]
 9495** ^SQLite invokes the xShrink() method when it wants the page cache to
 9496** free up as much of heap memory as possible.  The page cache implementation
 9497** is not obligated to free any memory, but well-behaved implementations should
 9498** do their best.
 9499*/
 9500typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
 9501struct sqlite3_pcache_methods2 {
 9502  int iVersion;
 9503  void *pArg;
 9504  int (*xInit)(void*);
 9505  void (*xShutdown)(void*);
 9506  sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable);
 9507  void (*xCachesize)(sqlite3_pcache*, int nCachesize);
 9508  int (*xPagecount)(sqlite3_pcache*);
 9509  sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
 9510  void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard);
 9511  void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*,
 9512      unsigned oldKey, unsigned newKey);
 9513  void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
 9514  void (*xDestroy)(sqlite3_pcache*);
 9515  void (*xShrink)(sqlite3_pcache*);
 9516};
 9517
 9518/*
 9519** This is the obsolete pcache_methods object that has now been replaced
 9520** by sqlite3_pcache_methods2.  This object is not used by SQLite.  It is
 9521** retained in the header file for backwards compatibility only.
 9522*/
 9523typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
 9524struct sqlite3_pcache_methods {
 9525  void *pArg;
 9526  int (*xInit)(void*);
 9527  void (*xShutdown)(void*);
 9528  sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable);
 9529  void (*xCachesize)(sqlite3_pcache*, int nCachesize);
 9530  int (*xPagecount)(sqlite3_pcache*);
 9531  void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
 9532  void (*xUnpin)(sqlite3_pcache*, void*, int discard);
 9533  void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey);
 9534  void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
 9535  void (*xDestroy)(sqlite3_pcache*);
 9536};
 9537
 9538
 9539/*
 9540** CAPI3REF: Online Backup Object
 9541**
 9542** The sqlite3_backup object records state information about an ongoing
 9543** online backup operation.  ^The sqlite3_backup object is created by
 9544** a call to [sqlite3_backup_init()] and is destroyed by a call to
 9545** [sqlite3_backup_finish()].
 9546**
 9547** See Also: [Using the SQLite Online Backup API]
 9548*/
 9549typedef struct sqlite3_backup sqlite3_backup;
 9550
 9551/*
 9552** CAPI3REF: Online Backup API.
 9553**
 9554** The backup API copies the content of one database into another.
 9555** It is useful either for creating backups of databases or
 9556** for copying in-memory databases to or from persistent files.
 9557**
 9558** See Also: [Using the SQLite Online Backup API]
 9559**
 9560** ^SQLite holds a write transaction open on the destination database file
 9561** for the duration of the backup operation.
 9562** ^The source database is read-locked only while it is being read;
 9563** it is not locked continuously for the entire backup operation.
 9564** ^Thus, the backup may be performed on a live source database without
 9565** preventing other database connections from
 9566** reading or writing to the source database while the backup is underway.
 9567**
 9568** ^(To perform a backup operation:
 9569**   <ol>
 9570**     <li><b>sqlite3_backup_init()</b> is called once to initialize the
 9571**         backup,
 9572**     <li><b>sqlite3_backup_step()</b> is called one or more times to transfer
 9573**         the data between the two databases, and finally
 9574**     <li><b>sqlite3_backup_finish()</b> is called to release all resources
 9575**         associated with the backup operation.
 9576**   </ol>)^
 9577** There should be exactly one call to sqlite3_backup_finish() for each
 9578** successful call to sqlite3_backup_init().
 9579**
 9580** [[sqlite3_backup_init()]] <b>sqlite3_backup_init()</b>
 9581**
 9582** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the
 9583** [database connection] associated with the destination database
 9584** and the database name, respectively.
 9585** ^The database name is "main" for the main database, "temp" for the
 9586** temporary database, or the name specified after the AS keyword in
 9587** an [ATTACH] statement for an attached database.
 9588** ^The S and M arguments passed to
 9589** sqlite3_backup_init(D,N,S,M) identify the [database connection]
 9590** and database name of the source database, respectively.
 9591** ^The source and destination [database connections] (parameters S and D)
 9592** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
 9593** an error.
 9594**
 9595** ^A call to sqlite3_backup_init() will fail, returning NULL, if
 9596** there is already a read or read-write transaction open on the
 9597** destination database.
 9598**
 9599** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
 9600** returned and an error code and error message are stored in the
 9601** destination [database connection] D.
 9602** ^The error code and message for the failed call to sqlite3_backup_init()
 9603** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or
 9604** [sqlite3_errmsg16()] functions.
 9605** ^A successful call to sqlite3_backup_init() returns a pointer to an
 9606** [sqlite3_backup] object.
 9607** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and
 9608** sqlite3_backup_finish() functions to perform the specified backup
 9609** operation.
 9610**
 9611** [[sqlite3_backup_step()]] <b>sqlite3_backup_step()</b>
 9612**
 9613** ^Function sqlite3_backup_step(B,N) will copy up to N pages between
 9614** the source and destination databases specified by [sqlite3_backup] object B.
 9615** ^If N is negative, all remaining source pages are copied.
 9616** ^If sqlite3_backup_step(B,N) successfully copies N pages and there
 9617** are still more pages to be copied, then the function returns [SQLITE_OK].
 9618** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages
 9619** from source to destination, then it returns [SQLITE_DONE].
 9620** ^If an error occurs while running sqlite3_backup_step(B,N),
 9621** then an [error code] is returned. ^As well as [SQLITE_OK] and
 9622** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY],
 9623** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
 9624** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
 9625**
 9626** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if
 9627** <ol>
 9628** <li> the destination database was opened read-only, or
 9629** <li> the destination database is using write-ahead-log journaling
 9630** and the destination and source page sizes differ, or
 9631** <li> the destination database is an in-memory database and the
 9632** destination and source page sizes differ.
 9633** </ol>)^
 9634**
 9635** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then
 9636** the [sqlite3_busy_handler | busy-handler function]
 9637** is invoked (if one is specified). ^If the
 9638** busy-handler returns non-zero before the lock is available, then
 9639** [SQLITE_BUSY] is returned to the caller. ^In this case the call to
 9640** sqlite3_backup_step() can be retried later. ^If the source
 9641** [database connection]
 9642** is being used to write to the source database when sqlite3_backup_step()
 9643** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this
 9644** case the call to sqlite3_backup_step() can be retried later on. ^(If
 9645** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or
 9646** [SQLITE_READONLY] is returned, then
 9647** there is no point in retrying the call to sqlite3_backup_step(). These
 9648** errors are considered fatal.)^  The application must accept
 9649** that the backup operation has failed and pass the backup operation handle
 9650** to the sqlite3_backup_finish() to release associated resources.
 9651**
 9652** ^The first call to sqlite3_backup_step() obtains an exclusive lock
 9653** on the destination file. ^The exclusive lock is not released until either
 9654** sqlite3_backup_finish() is called or the backup operation is complete
 9655** and sqlite3_backup_step() returns [SQLITE_DONE].  ^Every call to
 9656** sqlite3_backup_step() obtains a [shared lock] on the source database that
 9657** lasts for the duration of the sqlite3_backup_step() call.
 9658** ^Because the source database is not locked between calls to
 9659** sqlite3_backup_step(), the source database may be modified mid-way
 9660** through the backup process.  ^If the source database is modified by an
 9661** external process or via a database connection other than the one being
 9662** used by the backup operation, then the backup will be automatically
 9663** restarted by the next call to sqlite3_backup_step(). ^If the source
 9664** database is modified by using the same database connection as is used
 9665** by the backup operation, then the backup database is automatically
 9666** updated at the same time.
 9667**
 9668** [[sqlite3_backup_finish()]] <b>sqlite3_backup_finish()</b>
 9669**
 9670** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the
 9671** application wishes to abandon the backup operation, the application
 9672** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish().
 9673** ^The sqlite3_backup_finish() interfaces releases all
 9674** resources associated with the [sqlite3_backup] object.
 9675** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any
 9676** active write-transaction on the destination database is rolled back.
 9677** The [sqlite3_backup] object is invalid
 9678** and may not be used following a call to sqlite3_backup_finish().
 9679**
 9680** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
 9681** sqlite3_backup_step() errors occurred, regardless of whether or not
 9682** sqlite3_backup_step() completed.
 9683** ^If an out-of-memory condition or IO error occurred during any prior
 9684** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
 9685** sqlite3_backup_finish() returns the corresponding [error code].
 9686**
 9687** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step()
 9688** is not a permanent error and does not affect the return value of
 9689** sqlite3_backup_finish().
 9690**
 9691** [[sqlite3_backup_remaining()]] [[sqlite3_backup_pagecount()]]
 9692** <b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b>
 9693**
 9694** ^The sqlite3_backup_remaining() routine returns the number of pages still
 9695** to be backed up at the conclusion of the most recent sqlite3_backup_step().
 9696** ^The sqlite3_backup_pagecount() routine returns the total number of pages
 9697** in the source database at the conclusion of the most recent
 9698** sqlite3_backup_step().
 9699** ^(The values returned by these functions are only updated by
 9700** sqlite3_backup_step(). If the source database is modified in a way that
 9701** changes the size of the source database or the number of pages remaining,
 9702** those changes are not reflected in the output of sqlite3_backup_pagecount()
 9703** and sqlite3_backup_remaining() until after the next
 9704** sqlite3_backup_step().)^
 9705**
 9706** <b>Concurrent Usage of Database Handles</b>
 9707**
 9708** ^The source [database connection] may be used by the application for other
 9709** purposes while a backup operation is underway or being initialized.
 9710** ^If SQLite is compiled and configured to support threadsafe database
 9711** connections, then the source database connection may be used concurrently
 9712** from within other threads.
 9713**
 9714** However, the application must guarantee that the destination
 9715** [database connection] is not passed to any other API (by any thread) after
 9716** sqlite3_backup_init() is called and before the corresponding call to
 9717** sqlite3_backup_finish().  SQLite does not currently check to see
 9718** if the application incorrectly accesses the destination [database connection]
 9719** and so no error code is reported, but the operations may malfunction
 9720** nevertheless.  Use of the destination database connection while a
 9721** backup is in progress might also cause a mutex deadlock.
 9722**
 9723** If running in [shared cache mode], the application must
 9724** guarantee that the shared cache used by the destination database
 9725** is not accessed while the backup is running. In practice this means
 9726** that the application must guarantee that the disk file being
 9727** backed up to is not accessed by any connection within the process,
 9728** not just the specific connection that was passed to sqlite3_backup_init().
 9729**
 9730** The [sqlite3_backup] object itself is partially threadsafe. Multiple
 9731** threads may safely make multiple concurrent calls to sqlite3_backup_step().
 9732** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
 9733** APIs are not strictly speaking threadsafe. If they are invoked at the
 9734** same time as another thread is invoking sqlite3_backup_step() it is
 9735** possible that they return invalid values.
 9736**
 9737** <b>Alternatives To Using The Backup API</b>
 9738**
 9739** Other techniques for safely creating a consistent backup of an SQLite
 9740** database include:
 9741**
 9742** <ul>
 9743** <li> The [VACUUM INTO] command.
 9744** <li> The [sqlite3_rsync] utility program.
 9745** </ul>
 9746*/
 9747SQLITE_API sqlite3_backup *sqlite3_backup_init(
 9748  sqlite3 *pDest,                        /* Destination database handle */
 9749  const char *zDestName,                 /* Destination database name */
 9750  sqlite3 *pSource,                      /* Source database handle */
 9751  const char *zSourceName                /* Source database name */
 9752);
 9753SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage);
 9754SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p);
 9755SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p);
 9756SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p);
 9757
 9758/*
 9759** CAPI3REF: Unlock Notification
 9760** METHOD: sqlite3
 9761**
 9762** ^When running in shared-cache mode, a database operation may fail with
 9763** an [SQLITE_LOCKED] error if the required locks on the shared-cache or
 9764** individual tables within the shared-cache cannot be obtained. See
 9765** [SQLite Shared-Cache Mode] for a description of shared-cache locking.
 9766** ^This API may be used to register a callback that SQLite will invoke
 9767** when the connection currently holding the required lock relinquishes it.
 9768** ^This API is only available if the library was compiled with the
 9769** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined.
 9770**
 9771** See Also: [Using the SQLite Unlock Notification Feature].
 9772**
 9773** ^Shared-cache locks are released when a database connection concludes
 9774** its current transaction, either by committing it or rolling it back.
 9775**
 9776** ^When a connection (known as the blocked connection) fails to obtain a
 9777** shared-cache lock and SQLITE_LOCKED is returned to the caller, the
 9778** identity of the database connection (the blocking connection) that
 9779** has locked the required resource is stored internally. ^After an
 9780** application receives an SQLITE_LOCKED error, it may call the
 9781** sqlite3_unlock_notify() method with the blocked connection handle as
 9782** the first argument to register for a callback that will be invoked
 9783** when the blocking connection's current transaction is concluded. ^The
 9784** callback is invoked from within the [sqlite3_step] or [sqlite3_close]
 9785** call that concludes the blocking connection's transaction.
 9786**
 9787** ^(If sqlite3_unlock_notify() is called in a multi-threaded application,
 9788** there is a chance that the blocking connection will have already
 9789** concluded its transaction by the time sqlite3_unlock_notify() is invoked.
 9790** If this happens, then the specified callback is invoked immediately,
 9791** from within the call to sqlite3_unlock_notify().)^
 9792**
 9793** ^If the blocked connection is attempting to obtain a write-lock on a
 9794** shared-cache table, and more than one other connection currently holds
 9795** a read-lock on the same table, then SQLite arbitrarily selects one of
 9796** the other connections to use as the blocking connection.
 9797**
 9798** ^(There may be at most one unlock-notify callback registered by a
 9799** blocked connection. If sqlite3_unlock_notify() is called when the
 9800** blocked connection already has a registered unlock-notify callback,
 9801** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is
 9802** called with a NULL pointer as its second argument, then any existing
 9803** unlock-notify callback is canceled. ^The blocked connection's
 9804** unlock-notify callback may also be canceled by closing the blocked
 9805** connection using [sqlite3_close()].
 9806**
 9807** The unlock-notify callback is not reentrant. If an application invokes
 9808** any sqlite3_xxx API functions from within an unlock-notify callback, a
 9809** crash or deadlock may be the result.
 9810**
 9811** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always
 9812** returns SQLITE_OK.
 9813**
 9814** <b>Callback Invocation Details</b>
 9815**
 9816** When an unlock-notify callback is registered, the application provides a
 9817** single void* pointer that is passed to the callback when it is invoked.
 9818** However, the signature of the callback function allows SQLite to pass
 9819** it an array of void* context pointers. The first argument passed to
 9820** an unlock-notify callback is a pointer to an array of void* pointers,
 9821** and the second is the number of entries in the array.
 9822**
 9823** When a blocking connection's transaction is concluded, there may be
 9824** more than one blocked connection that has registered for an unlock-notify
 9825** callback. ^If two or more such blocked connections have specified the
 9826** same callback function, then instead of invoking the callback function
 9827** multiple times, it is invoked once with the set of void* context pointers
 9828** specified by the blocked connections bundled together into an array.
 9829** This gives the application an opportunity to prioritize any actions
 9830** related to the set of unblocked database connections.
 9831**
 9832** <b>Deadlock Detection</b>
 9833**
 9834** Assuming that after registering for an unlock-notify callback a
 9835** database waits for the callback to be issued before taking any further
 9836** action (a reasonable assumption), then using this API may cause the
 9837** application to deadlock. For example, if connection X is waiting for
 9838** connection Y's transaction to be concluded, and similarly connection
 9839** Y is waiting on connection X's transaction, then neither connection
 9840** will proceed and the system may remain deadlocked indefinitely.
 9841**
 9842** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
 9843** detection. ^If a given call to sqlite3_unlock_notify() would put the
 9844** system in a deadlocked state, then SQLITE_LOCKED is returned and no
 9845** unlock-notify callback is registered. The system is said to be in
 9846** a deadlocked state if connection A has registered for an unlock-notify
 9847** callback on the conclusion of connection B's transaction, and connection
 9848** B has itself registered for an unlock-notify callback when connection
 9849** A's transaction is concluded. ^Indirect deadlock is also detected, so
 9850** the system is also considered to be deadlocked if connection B has
 9851** registered for an unlock-notify callback on the conclusion of connection
 9852** C's transaction, where connection C is waiting on connection A. ^Any
 9853** number of levels of indirection are allowed.
 9854**
 9855** <b>The "DROP TABLE" Exception</b>
 9856**
 9857** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost
 9858** always appropriate to call sqlite3_unlock_notify(). There is however,
 9859** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
 9860** SQLite checks if there are any currently executing SELECT statements
 9861** that belong to the same connection. If there are, SQLITE_LOCKED is
 9862** returned. In this case there is no "blocking connection", so invoking
 9863** sqlite3_unlock_notify() results in the unlock-notify callback being
 9864** invoked immediately. If the application then re-attempts the "DROP TABLE"
 9865** or "DROP INDEX" query, an infinite loop might be the result.
 9866**
 9867** One way around this problem is to check the extended error code returned
 9868** by an sqlite3_step() call. ^(If there is a blocking connection, then the
 9869** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
 9870** the special "DROP TABLE/INDEX" case, the extended error code is just
 9871** SQLITE_LOCKED.)^
 9872*/
 9873SQLITE_API int sqlite3_unlock_notify(
 9874  sqlite3 *pBlocked,                          /* Waiting connection */
 9875  void (*xNotify)(void **apArg, int nArg),    /* Callback function to invoke */
 9876  void *pNotifyArg                            /* Argument to pass to xNotify */
 9877);
 9878
 9879
 9880/*
 9881** CAPI3REF: String Comparison
 9882**
 9883** ^The [sqlite3_stricmp()] and [sqlite3_strnicmp()] APIs allow applications
 9884** and extensions to compare the contents of two buffers containing UTF-8
 9885** strings in a case-independent fashion, using the same definition of "case
 9886** independence" that SQLite uses internally when comparing identifiers.
 9887*/
 9888SQLITE_API int sqlite3_stricmp(const char *, const char *);
 9889SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
 9890
 9891/*
 9892** CAPI3REF: String Globbing
 9893*
 9894** ^The [sqlite3_strglob(P,X)] interface returns zero if and only if
 9895** string X matches the [GLOB] pattern P.
 9896** ^The definition of [GLOB] pattern matching used in
 9897** [sqlite3_strglob(P,X)] is the same as for the "X GLOB P" operator in the
 9898** SQL dialect understood by SQLite.  ^The [sqlite3_strglob(P,X)] function
 9899** is case sensitive.
 9900**
 9901** Note that this routine returns zero on a match and non-zero if the strings
 9902** do not match, the same as [sqlite3_stricmp()] and [sqlite3_strnicmp()].
 9903**
 9904** See also: [sqlite3_strlike()].
 9905*/
 9906SQLITE_API int sqlite3_strglob(const char *zGlob, const char *zStr);
 9907
 9908/*
 9909** CAPI3REF: String LIKE Matching
 9910*
 9911** ^The [sqlite3_strlike(P,X,E)] interface returns zero if and only if
 9912** string X matches the [LIKE] pattern P with escape character E.
 9913** ^The definition of [LIKE] pattern matching used in
 9914** [sqlite3_strlike(P,X,E)] is the same as for the "X LIKE P ESCAPE E"
 9915** operator in the SQL dialect understood by SQLite.  ^For "X LIKE P" without
 9916** the ESCAPE clause, set the E parameter of [sqlite3_strlike(P,X,E)] to 0.
 9917** ^As with the LIKE operator, the [sqlite3_strlike(P,X,E)] function is case
 9918** insensitive - equivalent upper and lower case ASCII characters match
 9919** one another.
 9920**
 9921** ^The [sqlite3_strlike(P,X,E)] function matches Unicode characters, though
 9922** only ASCII characters are case folded.
 9923**
 9924** Note that this routine returns zero on a match and non-zero if the strings
 9925** do not match, the same as [sqlite3_stricmp()] and [sqlite3_strnicmp()].
 9926**
 9927** See also: [sqlite3_strglob()].
 9928*/
 9929SQLITE_API int sqlite3_strlike(const char *zGlob, const char *zStr, unsigned int cEsc);
 9930
 9931/*
 9932** CAPI3REF: Error Logging Interface
 9933**
 9934** ^The [sqlite3_log()] interface writes a message into the [error log]
 9935** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()].
 9936** ^If logging is enabled, the zFormat string and subsequent arguments are
 9937** used with [sqlite3_snprintf()] to generate the final output string.
 9938**
 9939** The sqlite3_log() interface is intended for use by extensions such as
 9940** virtual tables, collating functions, and SQL functions.  While there is
 9941** nothing to prevent an application from calling sqlite3_log(), doing so
 9942** is considered bad form.
 9943**
 9944** The zFormat string must not be NULL.
 9945**
 9946** To avoid deadlocks and other threading problems, the sqlite3_log() routine
 9947** will not use dynamically allocated memory.  The log message is stored in
 9948** a fixed-length buffer on the stack.  If the log message is longer than
 9949** a few hundred characters, it will be truncated to the length of the
 9950** buffer.
 9951*/
 9952SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...);
 9953
 9954/*
 9955** CAPI3REF: Write-Ahead Log Commit Hook
 9956** METHOD: sqlite3
 9957**
 9958** ^The [sqlite3_wal_hook()] function is used to register a callback that
 9959** is invoked each time data is committed to a database in wal mode.
 9960**
 9961** ^(The callback is invoked by SQLite after the commit has taken place and
 9962** the associated write-lock on the database released)^, so the implementation
 9963** may read, write or [checkpoint] the database as required.
 9964**
 9965** ^The first parameter passed to the callback function when it is invoked
 9966** is a copy of the third parameter passed to sqlite3_wal_hook() when
 9967** registering the callback. ^The second is a copy of the database handle.
 9968** ^The third parameter is the name of the database that was written to -
 9969** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter
 9970** is the number of pages currently in the write-ahead log file,
 9971** including those that were just committed.
 9972**
 9973** ^The callback function should normally return [SQLITE_OK].  ^If an error
 9974** code is returned, that error will propagate back up through the
 9975** SQLite code base to cause the statement that provoked the callback
 9976** to report an error, though the commit will have still occurred. If the
 9977** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value
 9978** that does not correspond to any valid SQLite error code, the results
 9979** are undefined.
 9980**
 9981** ^A single database handle may have at most a single write-ahead log
 9982** callback registered at one time. ^Calling [sqlite3_wal_hook()]
 9983** replaces the default behavior or previously registered write-ahead
 9984** log callback.
 9985**
 9986** ^The return value is a copy of the third parameter from the
 9987** previous call, if any, or 0.
 9988**
 9989** ^The [sqlite3_wal_autocheckpoint()] interface and the
 9990** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and
 9991** will overwrite any prior [sqlite3_wal_hook()] settings.
 9992**
 9993** ^If a write-ahead log callback is set using this function then
 9994** [sqlite3_wal_checkpoint_v2()] or [PRAGMA wal_checkpoint]
 9995** should be invoked periodically to keep the write-ahead log file
 9996** from growing without bound.
 9997**
 9998** ^Passing a NULL pointer for the callback disables automatic
 9999** checkpointing entirely. To re-enable the default behavior, call
10000** sqlite3_wal_autocheckpoint(db,1000) or use [PRAGMA wal_checkpoint].
10001*/
10002SQLITE_API void *sqlite3_wal_hook(
10003  sqlite3*,
10004  int(*)(void *,sqlite3*,const char*,int),
10005  void*
10006);
10007
10008/*
10009** CAPI3REF: Configure an auto-checkpoint
10010** METHOD: sqlite3
10011**
10012** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around
10013** [sqlite3_wal_hook()] that causes any database on [database connection] D
10014** to automatically [checkpoint]
10015** after committing a transaction if there are N or
10016** more frames in the [write-ahead log] file.  ^Passing zero or
10017** a negative value as the N parameter disables automatic
10018** checkpoints entirely.
10019**
10020** ^The callback registered by this function replaces any existing callback
10021** registered using [sqlite3_wal_hook()].  ^Likewise, registering a callback
10022** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
10023** configured by this function.
10024**
10025** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
10026** from SQL.
10027**
10028** ^Checkpoints initiated by this mechanism are
10029** [sqlite3_wal_checkpoint_v2|PASSIVE].
10030**
10031** ^Every new [database connection] defaults to having the auto-checkpoint
10032** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
10033** pages.
10034**
10035** ^The use of this interface is only necessary if the default setting
10036** is found to be suboptimal for a particular application.
10037*/
10038SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
10039
10040/*
10041** CAPI3REF: Checkpoint a database
10042** METHOD: sqlite3
10043**
10044** ^(The sqlite3_wal_checkpoint(D,X) is equivalent to
10045** [sqlite3_wal_checkpoint_v2](D,X,[SQLITE_CHECKPOINT_PASSIVE],0,0).)^
10046**
10047** In brief, sqlite3_wal_checkpoint(D,X) causes the content in the
10048** [write-ahead log] for database X on [database connection] D to be
10049** transferred into the database file and for the write-ahead log to
10050** be reset.  See the [checkpointing] documentation for addition
10051** information.
10052**
10053** This interface used to be the only way to cause a checkpoint to
10054** occur.  But then the newer and more powerful [sqlite3_wal_checkpoint_v2()]
10055** interface was added.  This interface is retained for backwards
10056** compatibility and as a convenience for applications that need to manually
10057** start a callback but which do not need the full power (and corresponding
10058** complication) of [sqlite3_wal_checkpoint_v2()].
10059*/
10060SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
10061
10062/*
10063** CAPI3REF: Checkpoint a database
10064** METHOD: sqlite3
10065**
10066** ^(The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint
10067** operation on database X of [database connection] D in mode M.  Status
10068** information is written back into integers pointed to by L and C.)^
10069** ^(The M parameter must be a valid [checkpoint mode]:)^
10070**
10071** <dl>
10072** <dt>SQLITE_CHECKPOINT_PASSIVE<dd>
10073**   ^Checkpoint as many frames as possible without waiting for any database
10074**   readers or writers to finish, then sync the database file if all frames
10075**   in the log were checkpointed. ^The [busy-handler callback]
10076**   is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode.
10077**   ^On the other hand, passive mode might leave the checkpoint unfinished
10078**   if there are concurrent readers or writers.
10079**
10080** <dt>SQLITE_CHECKPOINT_FULL<dd>
10081**   ^This mode blocks (it invokes the
10082**   [sqlite3_busy_handler|busy-handler callback]) until there is no
10083**   database writer and all readers are reading from the most recent database
10084**   snapshot. ^It then checkpoints all frames in the log file and syncs the
10085**   database file. ^This mode blocks new database writers while it is pending,
10086**   but new database readers are allowed to continue unimpeded.
10087**
10088** <dt>SQLITE_CHECKPOINT_RESTART<dd>
10089**   ^This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition
10090**   that after checkpointing the log file it blocks (calls the
10091**   [busy-handler callback])
10092**   until all readers are reading from the database file only. ^This ensures
10093**   that the next writer will restart the log file from the beginning.
10094**   ^Like SQLITE_CHECKPOINT_FULL, this mode blocks new
10095**   database writer attempts while it is pending, but does not impede readers.
10096**
10097** <dt>SQLITE_CHECKPOINT_TRUNCATE<dd>
10098**   ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the
10099**   addition that it also truncates the log file to zero bytes just prior
10100**   to a successful return.
10101**
10102** <dt>SQLITE_CHECKPOINT_NOOP<dd>
10103**   ^This mode always checkpoints zero frames. The only reason to invoke
10104**   a NOOP checkpoint is to access the values returned by
10105**   sqlite3_wal_checkpoint_v2() via output parameters *pnLog and *pnCkpt.
10106** </dl>
10107**
10108** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in
10109** the log file or to -1 if the checkpoint could not run because
10110** of an error or because the database is not in [WAL mode]. ^If pnCkpt is not
10111** NULL,then *pnCkpt is set to the total number of checkpointed frames in the
10112** log file (including any that were already checkpointed before the function
10113** was called) or to -1 if the checkpoint could not run due to an error or
10114** because the database is not in WAL mode. ^Note that upon successful
10115** completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been
10116** truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero.
10117**
10118** ^All calls obtain an exclusive "checkpoint" lock on the database file. ^If
10119** any other process is running a checkpoint operation at the same time, the
10120** lock cannot be obtained and SQLITE_BUSY is returned. ^Even if there is a
10121** busy-handler configured, it will not be invoked in this case.
10122**
10123** ^The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the
10124** exclusive "writer" lock on the database file. ^If the writer lock cannot be
10125** obtained immediately, and a busy-handler is configured, it is invoked and
10126** the writer lock retried until either the busy-handler returns 0 or the lock
10127** is successfully obtained. ^The busy-handler is also invoked while waiting for
10128** database readers as described above. ^If the busy-handler returns 0 before
10129** the writer lock is obtained or while waiting for database readers, the
10130** checkpoint operation proceeds from that point in the same way as
10131** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible
10132** without blocking any further. ^SQLITE_BUSY is returned in this case.
10133**
10134** ^If parameter zDb is NULL or points to a zero length string, then the
10135** specified operation is attempted on all WAL databases [attached] to
10136** [database connection] db.  In this case the
10137** values written to output parameters *pnLog and *pnCkpt are undefined. ^If
10138** an SQLITE_BUSY error is encountered when processing one or more of the
10139** attached WAL databases, the operation is still attempted on any remaining
10140** attached databases and SQLITE_BUSY is returned at the end. ^If any other
10141** error occurs while processing an attached database, processing is abandoned
10142** and the error code is returned to the caller immediately. ^If no error
10143** (SQLITE_BUSY or otherwise) is encountered while processing the attached
10144** databases, SQLITE_OK is returned.
10145**
10146** ^If database zDb is the name of an attached database that is not in WAL
10147** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. ^If
10148** zDb is not NULL (or a zero length string) and is not the name of any
10149** attached database, SQLITE_ERROR is returned to the caller.
10150**
10151** ^Unless it returns SQLITE_MISUSE,
10152** the sqlite3_wal_checkpoint_v2() interface
10153** sets the error information that is queried by
10154** [sqlite3_errcode()] and [sqlite3_errmsg()].
10155**
10156** ^The [PRAGMA wal_checkpoint] command can be used to invoke this interface
10157** from SQL.
10158*/
10159SQLITE_API int sqlite3_wal_checkpoint_v2(
10160  sqlite3 *db,                    /* Database handle */
10161  const char *zDb,                /* Name of attached database (or NULL) */
10162  int eMode,                      /* SQLITE_CHECKPOINT_* value */
10163  int *pnLog,                     /* OUT: Size of WAL log in frames */
10164  int *pnCkpt                     /* OUT: Total number of frames checkpointed */
10165);
10166
10167/*
10168** CAPI3REF: Checkpoint Mode Values
10169** KEYWORDS: {checkpoint mode}
10170**
10171** These constants define all valid values for the "checkpoint mode" passed
10172** as the third parameter to the [sqlite3_wal_checkpoint_v2()] interface.
10173** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
10174** meaning of each of these checkpoint modes.
10175*/
10176#define SQLITE_CHECKPOINT_NOOP    -1  /* Do no work at all */
10177#define SQLITE_CHECKPOINT_PASSIVE  0  /* Do as much as possible w/o blocking */
10178#define SQLITE_CHECKPOINT_FULL     1  /* Wait for writers, then checkpoint */
10179#define SQLITE_CHECKPOINT_RESTART  2  /* Like FULL but wait for readers */
10180#define SQLITE_CHECKPOINT_TRUNCATE 3  /* Like RESTART but also truncate WAL */
10181
10182/*
10183** CAPI3REF: Virtual Table Interface Configuration
10184**
10185** This function may be called by either the [xConnect] or [xCreate] method
10186** of a [virtual table] implementation to configure
10187** various facets of the virtual table interface.
10188**
10189** If this interface is invoked outside the context of an xConnect or
10190** xCreate virtual table method then the behavior is undefined.
10191**
10192** In the call sqlite3_vtab_config(D,C,...) the D parameter is the
10193** [database connection] in which the virtual table is being created and
10194** which is passed in as the first argument to the [xConnect] or [xCreate]
10195** method that is invoking sqlite3_vtab_config().  The C parameter is one
10196** of the [virtual table configuration options].  The presence and meaning
10197** of parameters after C depend on which [virtual table configuration option]
10198** is used.
10199*/
10200SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
10201
10202/*
10203** CAPI3REF: Virtual Table Configuration Options
10204** KEYWORDS: {virtual table configuration options}
10205** KEYWORDS: {virtual table configuration option}
10206**
10207** These macros define the various options to the
10208** [sqlite3_vtab_config()] interface that [virtual table] implementations
10209** can use to customize and optimize their behavior.
10210**
10211** <dl>
10212** [[SQLITE_VTAB_CONSTRAINT_SUPPORT]]
10213** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT</dt>
10214** <dd>Calls of the form
10215** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
10216** where X is an integer.  If X is zero, then the [virtual table] whose
10217** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not
10218** support constraints.  In this configuration (which is the default) if
10219** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire
10220** statement is rolled back as if [ON CONFLICT | OR ABORT] had been
10221** specified as part of the user's SQL statement, regardless of the actual
10222** ON CONFLICT mode specified.
10223**
10224** If X is non-zero, then the virtual table implementation guarantees
10225** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before
10226** any modifications to internal or persistent data structures have been made.
10227** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite
10228** is able to roll back a statement or database transaction, and abandon
10229** or continue processing the current SQL statement as appropriate.
10230** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns
10231** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode
10232** had been ABORT.
10233**
10234** Virtual table implementations that are required to handle OR REPLACE
10235** must do so within the [xUpdate] method. If a call to the
10236** [sqlite3_vtab_on_conflict()] function indicates that the current ON
10237** CONFLICT policy is REPLACE, the virtual table implementation should
10238** silently replace the appropriate rows within the xUpdate callback and
10239** return SQLITE_OK. Or, if this is not possible, it may return
10240** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT
10241** constraint handling.
10242** </dd>
10243**
10244** [[SQLITE_VTAB_DIRECTONLY]]<dt>SQLITE_VTAB_DIRECTONLY</dt>
10245** <dd>Calls of the form
10246** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the
10247** the [xConnect] or [xCreate] methods of a [virtual table] implementation
10248** prohibits that virtual table from being used from within triggers and
10249** views.
10250** </dd>
10251**
10252** [[SQLITE_VTAB_INNOCUOUS]]<dt>SQLITE_VTAB_INNOCUOUS</dt>
10253** <dd>Calls of the form
10254** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the
10255** [xConnect] or [xCreate] methods of a [virtual table] implementation
10256** identify that virtual table as being safe to use from within triggers
10257** and views.  Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the
10258** virtual table can do no serious harm even if it is controlled by a
10259** malicious hacker.  Developers should avoid setting the SQLITE_VTAB_INNOCUOUS
10260** flag unless absolutely necessary.
10261** </dd>
10262**
10263** [[SQLITE_VTAB_USES_ALL_SCHEMAS]]<dt>SQLITE_VTAB_USES_ALL_SCHEMAS</dt>
10264** <dd>Calls of the form
10265** [sqlite3_vtab_config](db,SQLITE_VTAB_USES_ALL_SCHEMA) from within the
10266** the [xConnect] or [xCreate] methods of a [virtual table] implementation
10267** instruct the query planner to begin at least a read transaction on
10268** all schemas ("main", "temp", and any ATTACH-ed databases) whenever the
10269** virtual table is used.
10270** </dd>
10271** </dl>
10272*/
10273#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
10274#define SQLITE_VTAB_INNOCUOUS          2
10275#define SQLITE_VTAB_DIRECTONLY         3
10276#define SQLITE_VTAB_USES_ALL_SCHEMAS   4
10277
10278/*
10279** CAPI3REF: Determine The Virtual Table Conflict Policy
10280**
10281** This function may only be called from within a call to the [xUpdate] method
10282** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The
10283** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL],
10284** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode
10285** of the SQL statement that triggered the call to the [xUpdate] method of the
10286** [virtual table].
10287*/
10288SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
10289
10290/*
10291** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE
10292**
10293** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn]
10294** method of a [virtual table], then it might return true if the
10295** column is being fetched as part of an UPDATE operation during which the
10296** column value will not change.  The virtual table implementation can use
10297** this hint as permission to substitute a return value that is less
10298** expensive to compute and that the corresponding
10299** [xUpdate] method understands as a "no-change" value.
10300**
10301** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that
10302** the column is not changed by the UPDATE statement, then the xColumn
10303** method can optionally return without setting a result, without calling
10304** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces].
10305** In that case, [sqlite3_value_nochange(X)] will return true for the
10306** same column in the [xUpdate] method.
10307**
10308** The sqlite3_vtab_nochange() routine is an optimization.  Virtual table
10309** implementations should continue to give a correct answer even if the
10310** sqlite3_vtab_nochange() interface were to always return false.  In the
10311** current implementation, the sqlite3_vtab_nochange() interface does always
10312** returns false for the enhanced [UPDATE FROM] statement.
10313*/
10314SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*);
10315
10316/*
10317** CAPI3REF: Determine The Collation For a Virtual Table Constraint
10318** METHOD: sqlite3_index_info
10319**
10320** This function may only be called from within a call to the [xBestIndex]
10321** method of a [virtual table].  This function returns a pointer to a string
10322** that is the name of the appropriate collation sequence to use for text
10323** comparisons on the constraint identified by its arguments.
10324**
10325** The first argument must be the pointer to the [sqlite3_index_info] object
10326** that is the first parameter to the xBestIndex() method. The second argument
10327** must be an index into the aConstraint[] array belonging to the
10328** sqlite3_index_info structure passed to xBestIndex.
10329**
10330** Important:
10331** The first parameter must be the same pointer that is passed into the
10332** xBestMethod() method.  The first parameter may not be a pointer to a
10333** different [sqlite3_index_info] object, even an exact copy.
10334**
10335** The return value is computed as follows:
10336**
10337** <ol>
10338** <li><p> If the constraint comes from a WHERE clause expression that contains
10339**         a [COLLATE operator], then the name of the collation specified by
10340**         that COLLATE operator is returned.
10341** <li><p> If there is no COLLATE operator, but the column that is the subject
10342**         of the constraint specifies an alternative collating sequence via
10343**         a [COLLATE clause] on the column definition within the CREATE TABLE
10344**         statement that was passed into [sqlite3_declare_vtab()], then the
10345**         name of that alternative collating sequence is returned.
10346** <li><p> Otherwise, "BINARY" is returned.
10347** </ol>
10348*/
10349SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
10350
10351/*
10352** CAPI3REF: Determine if a virtual table query is DISTINCT
10353** METHOD: sqlite3_index_info
10354**
10355** This API may only be used from within an [xBestIndex|xBestIndex method]
10356** of a [virtual table] implementation. The result of calling this
10357** interface from outside of xBestIndex() is undefined and probably harmful.
10358**
10359** ^The sqlite3_vtab_distinct() interface returns an integer between 0 and
10360** 3.  The integer returned by sqlite3_vtab_distinct()
10361** gives the virtual table additional information about how the query
10362** planner wants the output to be ordered. As long as the virtual table
10363** can meet the ordering requirements of the query planner, it may set
10364** the "orderByConsumed" flag.
10365**
10366** <ol><li value="0"><p>
10367** ^If the sqlite3_vtab_distinct() interface returns 0, that means
10368** that the query planner needs the virtual table to return all rows in the
10369** sort order defined by the "nOrderBy" and "aOrderBy" fields of the
10370** [sqlite3_index_info] object.  This is the default expectation.  If the
10371** virtual table outputs all rows in sorted order, then it is always safe for
10372** the xBestIndex method to set the "orderByConsumed" flag, regardless of
10373** the return value from sqlite3_vtab_distinct().
10374** <li value="1"><p>
10375** ^(If the sqlite3_vtab_distinct() interface returns 1, that means
10376** that the query planner does not need the rows to be returned in sorted order
10377** as long as all rows with the same values in all columns identified by the
10378** "aOrderBy" field are adjacent.)^  This mode is used when the query planner
10379** is doing a GROUP BY.
10380** <li value="2"><p>
10381** ^(If the sqlite3_vtab_distinct() interface returns 2, that means
10382** that the query planner does not need the rows returned in any particular
10383** order, as long as rows with the same values in all columns identified
10384** by "aOrderBy" are adjacent.)^  ^(Furthermore, when two or more rows
10385** contain the same values for all columns identified by "colUsed", all but
10386** one such row may optionally be omitted from the result.)^
10387** The virtual table is not required to omit rows that are duplicates
10388** over the "colUsed" columns, but if the virtual table can do that without
10389** too much extra effort, it could potentially help the query to run faster.
10390** This mode is used for a DISTINCT query.
10391** <li value="3"><p>
10392** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the
10393** virtual table must return rows in the order defined by "aOrderBy" as
10394** if the sqlite3_vtab_distinct() interface had returned 0.  However if
10395** two or more rows in the result have the same values for all columns
10396** identified by "colUsed", then all but one such row may optionally be
10397** omitted.)^  Like when the return value is 2, the virtual table
10398** is not required to omit rows that are duplicates over the "colUsed"
10399** columns, but if the virtual table can do that without
10400** too much extra effort, it could potentially help the query to run faster.
10401** This mode is used for queries
10402** that have both DISTINCT and ORDER BY clauses.
10403** </ol>
10404**
10405** <p>The following table summarizes the conditions under which the
10406** virtual table is allowed to set the "orderByConsumed" flag based on
10407** the value returned by sqlite3_vtab_distinct().  This table is a
10408** restatement of the previous four paragraphs:
10409**
10410** <table border=1 cellspacing=0 cellpadding=10 width="90%">
10411** <tr>
10412** <td valign="top">sqlite3_vtab_distinct() return value
10413** <td valign="top">Rows are returned in aOrderBy order
10414** <td valign="top">Rows with the same value in all aOrderBy columns are
10415**                  adjacent
10416** <td valign="top">Duplicates over all colUsed columns may be omitted
10417** <tr><td>0<td>yes<td>yes<td>no
10418** <tr><td>1<td>no<td>yes<td>no
10419** <tr><td>2<td>no<td>yes<td>yes
10420** <tr><td>3<td>yes<td>yes<td>yes
10421** </table>
10422**
10423** ^For the purposes of comparing virtual table output values to see if the
10424** values are the same value for sorting purposes, two NULL values are
10425** considered to be the same.  In other words, the comparison operator is "IS"
10426** (or "IS NOT DISTINCT FROM") and not "==".
10427**
10428** If a virtual table implementation is unable to meet the requirements
10429** specified above, then it must not set the "orderByConsumed" flag in the
10430** [sqlite3_index_info] object or an incorrect answer may result.
10431**
10432** ^A virtual table implementation is always free to return rows in any order
10433** it wants, as long as the "orderByConsumed" flag is not set.  ^When the
10434** "orderByConsumed" flag is unset, the query planner will add extra
10435** [bytecode] to ensure that the final results returned by the SQL query are
10436** ordered correctly.  The use of the "orderByConsumed" flag and the
10437** sqlite3_vtab_distinct() interface is merely an optimization.  ^Careful
10438** use of the sqlite3_vtab_distinct() interface and the "orderByConsumed"
10439** flag might help queries against a virtual table to run faster.  Being
10440** overly aggressive and setting the "orderByConsumed" flag when it is not
10441** valid to do so, on the other hand, might cause SQLite to return incorrect
10442** results.
10443*/
10444SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info*);
10445
10446/*
10447** CAPI3REF: Identify and handle IN constraints in xBestIndex
10448**
10449** This interface may only be used from within an
10450** [xBestIndex|xBestIndex() method] of a [virtual table] implementation.
10451** The result of invoking this interface from any other context is
10452** undefined and probably harmful.
10453**
10454** ^(A constraint on a virtual table of the form
10455** "[IN operator|column IN (...)]" is
10456** communicated to the xBestIndex method as a
10457** [SQLITE_INDEX_CONSTRAINT_EQ] constraint.)^  If xBestIndex wants to use
10458** this constraint, it must set the corresponding
10459** aConstraintUsage[].argvIndex to a positive integer.  ^(Then, under
10460** the usual mode of handling IN operators, SQLite generates [bytecode]
10461** that invokes the [xFilter|xFilter() method] once for each value
10462** on the right-hand side of the IN operator.)^  Thus the virtual table
10463** only sees a single value from the right-hand side of the IN operator
10464** at a time.
10465**
10466** In some cases, however, it would be advantageous for the virtual
10467** table to see all values on the right-hand of the IN operator all at
10468** once.  The sqlite3_vtab_in() interfaces facilitates this in two ways:
10469**
10470** <ol>
10471** <li><p>
10472**   ^A call to sqlite3_vtab_in(P,N,-1) will return true (non-zero)
10473**   if and only if the [sqlite3_index_info|P->aConstraint][N] constraint
10474**   is an [IN operator] that can be processed all at once.  ^In other words,
10475**   sqlite3_vtab_in() with -1 in the third argument is a mechanism
10476**   by which the virtual table can ask SQLite if all-at-once processing
10477**   of the IN operator is even possible.
10478**
10479** <li><p>
10480**   ^A call to sqlite3_vtab_in(P,N,F) with F==1 or F==0 indicates
10481**   to SQLite that the virtual table does or does not want to process
10482**   the IN operator all-at-once, respectively.  ^Thus when the third
10483**   parameter (F) is non-negative, this interface is the mechanism by
10484**   which the virtual table tells SQLite how it wants to process the
10485**   IN operator.
10486** </ol>
10487**
10488** ^The sqlite3_vtab_in(P,N,F) interface can be invoked multiple times
10489** within the same xBestIndex method call.  ^For any given P,N pair,
10490** the return value from sqlite3_vtab_in(P,N,F) will always be the same
10491** within the same xBestIndex call.  ^If the interface returns true
10492** (non-zero), that means that the constraint is an IN operator
10493** that can be processed all-at-once.  ^If the constraint is not an IN
10494** operator or cannot be processed all-at-once, then the interface returns
10495** false.
10496**
10497** ^(All-at-once processing of the IN operator is selected if both of the
10498** following conditions are met:
10499**
10500** <ol>
10501** <li><p> The P->aConstraintUsage[N].argvIndex value is set to a positive
10502** integer.  This is how the virtual table tells SQLite that it wants to
10503** use the N-th constraint.
10504**
10505** <li><p> The last call to sqlite3_vtab_in(P,N,F) for which F was
10506** non-negative had F>=1.
10507** </ol>)^
10508**
10509** ^If either or both of the conditions above are false, then SQLite uses
10510** the traditional one-at-a-time processing strategy for the IN constraint.
10511** ^If both conditions are true, then the argvIndex-th parameter to the
10512** xFilter method will be an [sqlite3_value] that appears to be NULL,
10513** but which can be passed to [sqlite3_vtab_in_first()] and
10514** [sqlite3_vtab_in_next()] to find all values on the right-hand side
10515** of the IN constraint.
10516*/
10517SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle);
10518
10519/*
10520** CAPI3REF: Find all elements on the right-hand side of an IN constraint.
10521**
10522** These interfaces are only useful from within the
10523** [xFilter|xFilter() method] of a [virtual table] implementation.
10524** The result of invoking these interfaces from any other context
10525** is undefined and probably harmful.
10526**
10527** The X parameter in a call to sqlite3_vtab_in_first(X,P) or
10528** sqlite3_vtab_in_next(X,P) should be one of the parameters to the
10529** xFilter method which invokes these routines, and specifically
10530** a parameter that was previously selected for all-at-once IN constraint
10531** processing using the [sqlite3_vtab_in()] interface in the
10532** [xBestIndex|xBestIndex method].  ^(If the X parameter is not
10533** an xFilter argument that was selected for all-at-once IN constraint
10534** processing, then these routines return [SQLITE_ERROR].)^
10535**
10536** ^(Use these routines to access all values on the right-hand side
10537** of the IN constraint using code like the following:
10538**
10539** <blockquote><pre>
10540** &nbsp;  for(rc=sqlite3_vtab_in_first(pList, &pVal);
10541** &nbsp;      rc==SQLITE_OK && pVal;
10542** &nbsp;      rc=sqlite3_vtab_in_next(pList, &pVal)
10543** &nbsp;  ){
10544** &nbsp;    // do something with pVal
10545** &nbsp;  }
10546** &nbsp;  if( rc!=SQLITE_DONE ){
10547** &nbsp;    // an error has occurred
10548** &nbsp;  }
10549** </pre></blockquote>)^
10550**
10551** ^On success, the sqlite3_vtab_in_first(X,P) and sqlite3_vtab_in_next(X,P)
10552** routines return SQLITE_OK and set *P to point to the first or next value
10553** on the RHS of the IN constraint.  ^If there are no more values on the
10554** right hand side of the IN constraint, then *P is set to NULL and these
10555** routines return [SQLITE_DONE].  ^The return value might be
10556** some other value, such as SQLITE_NOMEM, in the event of a malfunction.
10557**
10558** The *ppOut values returned by these routines are only valid until the
10559** next call to either of these routines or until the end of the xFilter
10560** method from which these routines were called.  If the virtual table
10561** implementation needs to retain the *ppOut values for longer, it must make
10562** copies.  The *ppOut values are [protected sqlite3_value|protected].
10563*/
10564SQLITE_API int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
10565SQLITE_API int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut);
10566
10567/*
10568** CAPI3REF: Constraint values in xBestIndex()
10569** METHOD: sqlite3_index_info
10570**
10571** This API may only be used from within the [xBestIndex|xBestIndex method]
10572** of a [virtual table] implementation. The result of calling this interface
10573** from outside of an xBestIndex method are undefined and probably harmful.
10574**
10575** ^When the sqlite3_vtab_rhs_value(P,J,V) interface is invoked from within
10576** the [xBestIndex] method of a [virtual table] implementation, with P being
10577** a copy of the [sqlite3_index_info] object pointer passed into xBestIndex and
10578** J being a 0-based index into P->aConstraint[], then this routine
10579** attempts to set *V to the value of the right-hand operand of
10580** that constraint if the right-hand operand is known.  ^If the
10581** right-hand operand is not known, then *V is set to a NULL pointer.
10582** ^The sqlite3_vtab_rhs_value(P,J,V) interface returns SQLITE_OK if
10583** and only if *V is set to a value.  ^The sqlite3_vtab_rhs_value(P,J,V)
10584** inteface returns SQLITE_NOTFOUND if the right-hand side of the J-th
10585** constraint is not available.  ^The sqlite3_vtab_rhs_value() interface
10586** can return a result code other than SQLITE_OK or SQLITE_NOTFOUND if
10587** something goes wrong.
10588**
10589** The sqlite3_vtab_rhs_value() interface is usually only successful if
10590** the right-hand operand of a constraint is a literal value in the original
10591** SQL statement.  If the right-hand operand is an expression or a reference
10592** to some other column or a [host parameter], then sqlite3_vtab_rhs_value()
10593** will probably return [SQLITE_NOTFOUND].
10594**
10595** ^(Some constraints, such as [SQLITE_INDEX_CONSTRAINT_ISNULL] and
10596** [SQLITE_INDEX_CONSTRAINT_ISNOTNULL], have no right-hand operand.  For such
10597** constraints, sqlite3_vtab_rhs_value() always returns SQLITE_NOTFOUND.)^
10598**
10599** ^The [sqlite3_value] object returned in *V is a protected sqlite3_value
10600** and remains valid for the duration of the xBestIndex method call.
10601** ^When xBestIndex returns, the sqlite3_value object returned by
10602** sqlite3_vtab_rhs_value() is automatically deallocated.
10603**
10604** The "_rhs_" in the name of this routine is an abbreviation for
10605** "Right-Hand Side".
10606*/
10607SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);
10608
10609/*
10610** CAPI3REF: Conflict resolution modes
10611** KEYWORDS: {conflict resolution mode}
10612**
10613** These constants are returned by [sqlite3_vtab_on_conflict()] to
10614** inform a [virtual table] implementation of the [ON CONFLICT] mode
10615** for the SQL statement being evaluated.
10616**
10617** Note that the [SQLITE_IGNORE] constant is also used as a potential
10618** return value from the [sqlite3_set_authorizer()] callback and that
10619** [SQLITE_ABORT] is also a [result code].
10620*/
10621#define SQLITE_ROLLBACK 1
10622/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
10623#define SQLITE_FAIL     3
10624/* #define SQLITE_ABORT 4  // Also an error code */
10625#define SQLITE_REPLACE  5
10626
10627/*
10628** CAPI3REF: Prepared Statement Scan Status Opcodes
10629** KEYWORDS: {scanstatus options}
10630**
10631** The following constants can be used for the T parameter to the
10632** [sqlite3_stmt_scanstatus(S,X,T,V)] interface.  Each constant designates a
10633** different metric for sqlite3_stmt_scanstatus() to return.
10634**
10635** When the value returned to V is a string, space to hold that string is
10636** managed by the prepared statement S and will be automatically freed when
10637** S is finalized.
10638**
10639** Not all values are available for all query elements. When a value is
10640** not available, the output variable is set to -1 if the value is numeric,
10641** or to NULL if it is a string (SQLITE_SCANSTAT_NAME).
10642**
10643** <dl>
10644** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
10645** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be
10646** set to the total number of times that the X-th loop has run.</dd>
10647**
10648** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt>
10649** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be set
10650** to the total number of rows examined by all iterations of the X-th loop.</dd>
10651**
10652** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt>
10653** <dd>^The "double" variable pointed to by the V parameter will be set to the
10654** query planner's estimate for the average number of rows output from each
10655** iteration of the X-th loop.  If the query planner's estimate was accurate,
10656** then this value will approximate the quotient NVISIT/NLOOP and the
10657** product of this value for all prior loops with the same SELECTID will
10658** be the NLOOP value for the current loop.</dd>
10659**
10660** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt>
10661** <dd>^The "const char *" variable pointed to by the V parameter will be set
10662** to a zero-terminated UTF-8 string containing the name of the index or table
10663** used for the X-th loop.</dd>
10664**
10665** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
10666** <dd>^The "const char *" variable pointed to by the V parameter will be set
10667** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN]
10668** description for the X-th loop.</dd>
10669**
10670** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECTID</dt>
10671** <dd>^The "int" variable pointed to by the V parameter will be set to the
10672** id for the X-th query plan element. The id value is unique within the
10673** statement. The select-id is the same value as is output in the first
10674** column of an [EXPLAIN QUERY PLAN] query.</dd>
10675**
10676** [[SQLITE_SCANSTAT_PARENTID]] <dt>SQLITE_SCANSTAT_PARENTID</dt>
10677** <dd>The "int" variable pointed to by the V parameter will be set to the
10678** id of the parent of the current query element, if applicable, or
10679** to zero if the query element has no parent. This is the same value as
10680** returned in the second column of an [EXPLAIN QUERY PLAN] query.</dd>
10681**
10682** [[SQLITE_SCANSTAT_NCYCLE]] <dt>SQLITE_SCANSTAT_NCYCLE</dt>
10683** <dd>The sqlite3_int64 output value is set to the number of cycles,
10684** according to the processor time-stamp counter, that elapsed while the
10685** query element was being processed. This value is not available for
10686** all query elements - if it is unavailable the output variable is
10687** set to -1.</dd>
10688** </dl>
10689*/
10690#define SQLITE_SCANSTAT_NLOOP    0
10691#define SQLITE_SCANSTAT_NVISIT   1
10692#define SQLITE_SCANSTAT_EST      2
10693#define SQLITE_SCANSTAT_NAME     3
10694#define SQLITE_SCANSTAT_EXPLAIN  4
10695#define SQLITE_SCANSTAT_SELECTID 5
10696#define SQLITE_SCANSTAT_PARENTID 6
10697#define SQLITE_SCANSTAT_NCYCLE   7
10698
10699/*
10700** CAPI3REF: Prepared Statement Scan Status
10701** METHOD: sqlite3_stmt
10702**
10703** These interfaces return information about the predicted and measured
10704** performance for pStmt.  Advanced applications can use this
10705** interface to compare the predicted and the measured performance and
10706** issue warnings and/or rerun [ANALYZE] if discrepancies are found.
10707**
10708** Since this interface is expected to be rarely used, it is only
10709** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS]
10710** compile-time option.
10711**
10712** The "iScanStatusOp" parameter determines which status information to return.
10713** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior
10714** of this interface is undefined. ^The requested measurement is written into
10715** a variable pointed to by the "pOut" parameter.
10716**
10717** The "flags" parameter must be passed a mask of flags. At present only
10718** one flag is defined - [SQLITE_SCANSTAT_COMPLEX]. If SQLITE_SCANSTAT_COMPLEX
10719** is specified, then status information is available for all elements
10720** of a query plan that are reported by "[EXPLAIN QUERY PLAN]" output. If
10721** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements
10722** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of
10723** the EXPLAIN QUERY PLAN output) are available. Invoking API
10724** sqlite3_stmt_scanstatus() is equivalent to calling
10725** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter.
10726**
10727** Parameter "idx" identifies the specific query element to retrieve statistics
10728** for. Query elements are numbered starting from zero. A value of -1 may
10729** retrieve statistics for the entire query. ^If idx is out of range
10730** - less than -1 or greater than or equal to the total number of query
10731** elements used to implement the statement - a non-zero value is returned and
10732** the variable that pOut points to is unchanged.
10733**
10734** See also: [sqlite3_stmt_scanstatus_reset()] and the
10735** [nexec and ncycle] columns of the [bytecode virtual table].
10736*/
10737SQLITE_API int sqlite3_stmt_scanstatus(
10738  sqlite3_stmt *pStmt,      /* Prepared statement for which info desired */
10739  int idx,                  /* Index of loop to report on */
10740  int iScanStatusOp,        /* Information desired.  SQLITE_SCANSTAT_* */
10741  void *pOut                /* Result written here */
10742);
10743SQLITE_API int sqlite3_stmt_scanstatus_v2(
10744  sqlite3_stmt *pStmt,      /* Prepared statement for which info desired */
10745  int idx,                  /* Index of loop to report on */
10746  int iScanStatusOp,        /* Information desired.  SQLITE_SCANSTAT_* */
10747  int flags,                /* Mask of flags defined below */
10748  void *pOut                /* Result written here */
10749);
10750
10751/*
10752** CAPI3REF: Prepared Statement Scan Status
10753** KEYWORDS: {scan status flags}
10754*/
10755#define SQLITE_SCANSTAT_COMPLEX 0x0001
10756
10757/*
10758** CAPI3REF: Zero Scan-Status Counters
10759** METHOD: sqlite3_stmt
10760**
10761** ^Zero all [sqlite3_stmt_scanstatus()] related event counters.
10762**
10763** This API is only available if the library is built with pre-processor
10764** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
10765*/
10766SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
10767
10768/*
10769** CAPI3REF: Flush caches to disk mid-transaction
10770** METHOD: sqlite3
10771**
10772** ^If a write-transaction is open on [database connection] D when the
10773** [sqlite3_db_cacheflush(D)] interface is invoked, any dirty
10774** pages in the pager-cache that are not currently in use are written out
10775** to disk. A dirty page may be in use if a database cursor created by an
10776** active SQL statement is reading from it, or if it is page 1 of a database
10777** file (page 1 is always "in use").  ^The [sqlite3_db_cacheflush(D)]
10778** interface flushes caches for all schemas - "main", "temp", and
10779** any [attached] databases.
10780**
10781** ^If this function needs to obtain extra database locks before dirty pages
10782** can be flushed to disk, it does so. ^If those locks cannot be obtained
10783** immediately and there is a busy-handler callback configured, it is invoked
10784** in the usual manner. ^If the required lock still cannot be obtained, then
10785** the database is skipped and an attempt made to flush any dirty pages
10786** belonging to the next (if any) database. ^If any databases are skipped
10787** because locks cannot be obtained, but no other error occurs, this
10788** function returns SQLITE_BUSY.
10789**
10790** ^If any other error occurs while flushing dirty pages to disk (for
10791** example an IO error or out-of-memory condition), then processing is
10792** abandoned and an SQLite [error code] is returned to the caller immediately.
10793**
10794** ^Otherwise, if no error occurs, [sqlite3_db_cacheflush()] returns SQLITE_OK.
10795**
10796** ^This function does not set the database handle error code or message
10797** returned by the [sqlite3_errcode()] and [sqlite3_errmsg()] functions.
10798*/
10799SQLITE_API int sqlite3_db_cacheflush(sqlite3*);
10800
10801/*
10802** CAPI3REF: The pre-update hook.
10803** METHOD: sqlite3
10804**
10805** ^These interfaces are only available if SQLite is compiled using the
10806** [SQLITE_ENABLE_PREUPDATE_HOOK] compile-time option.
10807**
10808** ^The [sqlite3_preupdate_hook()] interface registers a callback function
10809** that is invoked prior to each [INSERT], [UPDATE], and [DELETE] operation
10810** on a database table.
10811** ^At most one preupdate hook may be registered at a time on a single
10812** [database connection]; each call to [sqlite3_preupdate_hook()] overrides
10813** the previous setting.
10814** ^The preupdate hook is disabled by invoking [sqlite3_preupdate_hook()]
10815** with a NULL pointer as the second parameter.
10816** ^The third parameter to [sqlite3_preupdate_hook()] is passed through as
10817** the first parameter to callbacks.
10818**
10819** ^The preupdate hook only fires for changes to real database tables; the
10820** preupdate hook is not invoked for changes to [virtual tables] or to
10821** system tables like sqlite_sequence or sqlite_stat1.
10822**
10823** ^The second parameter to the preupdate callback is a pointer to
10824** the [database connection] that registered the preupdate hook.
10825** ^The third parameter to the preupdate callback is one of the constants
10826** [SQLITE_INSERT], [SQLITE_DELETE], or [SQLITE_UPDATE] to identify the
10827** kind of update operation that is about to occur.
10828** ^(The fourth parameter to the preupdate callback is the name of the
10829** database within the database connection that is being modified.  This
10830** will be "main" for the main database or "temp" for TEMP tables or
10831** the name given after the AS keyword in the [ATTACH] statement for attached
10832** databases.)^
10833** ^The fifth parameter to the preupdate callback is the name of the
10834** table that is being modified.
10835**
10836** For an UPDATE or DELETE operation on a [rowid table], the sixth
10837** parameter passed to the preupdate callback is the initial [rowid] of the
10838** row being modified or deleted. For an INSERT operation on a rowid table,
10839** or any operation on a WITHOUT ROWID table, the value of the sixth
10840** parameter is undefined. For an INSERT or UPDATE on a rowid table the
10841** seventh parameter is the final rowid value of the row being inserted
10842** or updated. The value of the seventh parameter passed to the callback
10843** function is not defined for operations on WITHOUT ROWID tables, or for
10844** DELETE operations on rowid tables.
10845**
10846** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from
10847** the previous call on the same [database connection] D, or NULL for
10848** the first call on D.
10849**
10850** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()],
10851** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces
10852** provide additional information about a preupdate event. These routines
10853** may only be called from within a preupdate callback.  Invoking any of
10854** these routines from outside of a preupdate callback or with a
10855** [database connection] pointer that is different from the one supplied
10856** to the preupdate callback results in undefined and probably undesirable
10857** behavior.
10858**
10859** ^The [sqlite3_preupdate_count(D)] interface returns the number of columns
10860** in the row that is being inserted, updated, or deleted.
10861**
10862** ^The [sqlite3_preupdate_old(D,N,P)] interface writes into P a pointer to
10863** a [protected sqlite3_value] that contains the value of the Nth column of
10864** the table row before it is updated.  The N parameter must be between 0
10865** and one less than the number of columns or the behavior will be
10866** undefined. This must only be used within SQLITE_UPDATE and SQLITE_DELETE
10867** preupdate callbacks; if it is used by an SQLITE_INSERT callback then the
10868** behavior is undefined.  The [sqlite3_value] that P points to
10869** will be destroyed when the preupdate callback returns.
10870**
10871** ^The [sqlite3_preupdate_new(D,N,P)] interface writes into P a pointer to
10872** a [protected sqlite3_value] that contains the value of the Nth column of
10873** the table row after it is updated.  The N parameter must be between 0
10874** and one less than the number of columns or the behavior will be
10875** undefined. This must only be used within SQLITE_INSERT and SQLITE_UPDATE
10876** preupdate callbacks; if it is used by an SQLITE_DELETE callback then the
10877** behavior is undefined.  The [sqlite3_value] that P points to
10878** will be destroyed when the preupdate callback returns.
10879**
10880** ^The [sqlite3_preupdate_depth(D)] interface returns 0 if the preupdate
10881** callback was invoked as a result of a direct insert, update, or delete
10882** operation; or 1 for inserts, updates, or deletes invoked by top-level
10883** triggers; or 2 for changes resulting from triggers called by top-level
10884** triggers; and so forth.
10885**
10886** When the [sqlite3_blob_write()] API is used to update a blob column,
10887** the pre-update hook is invoked with SQLITE_DELETE, because
10888** the new values are not yet available. In this case, when a
10889** callback made with op==SQLITE_DELETE is actually a write using the
10890** sqlite3_blob_write() API, the [sqlite3_preupdate_blobwrite()] returns
10891** the index of the column being written. In other cases, where the
10892** pre-update hook is being invoked for some other reason, including a
10893** regular DELETE, sqlite3_preupdate_blobwrite() returns -1.
10894**
10895** See also:  [sqlite3_update_hook()]
10896*/
10897#if defined(SQLITE_ENABLE_PREUPDATE_HOOK)
10898SQLITE_API void *sqlite3_preupdate_hook(
10899  sqlite3 *db,
10900  void(*xPreUpdate)(
10901    void *pCtx,                   /* Copy of third arg to preupdate_hook() */
10902    sqlite3 *db,                  /* Database handle */
10903    int op,                       /* SQLITE_UPDATE, DELETE or INSERT */
10904    char const *zDb,              /* Database name */
10905    char const *zName,            /* Table name */
10906    sqlite3_int64 iKey1,          /* Rowid of row about to be deleted/updated */
10907    sqlite3_int64 iKey2           /* New rowid value (for a rowid UPDATE) */
10908  ),
10909  void*
10910);
10911SQLITE_API int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **);
10912SQLITE_API int sqlite3_preupdate_count(sqlite3 *);
10913SQLITE_API int sqlite3_preupdate_depth(sqlite3 *);
10914SQLITE_API int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **);
10915SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *);
10916#endif
10917
10918/*
10919** CAPI3REF: Low-level system error code
10920** METHOD: sqlite3
10921**
10922** ^Attempt to return the underlying operating system error code or error
10923** number that caused the most recent I/O error or failure to open a file.
10924** The return value is OS-dependent.  For example, on unix systems, after
10925** [sqlite3_open_v2()] returns [SQLITE_CANTOPEN], this interface could be
10926** called to get back the underlying "errno" that caused the problem, such
10927** as ENOSPC, EAUTH, EISDIR, and so forth.
10928*/
10929SQLITE_API int sqlite3_system_errno(sqlite3*);
10930
10931/*
10932** CAPI3REF: Database Snapshot
10933** KEYWORDS: {snapshot} {sqlite3_snapshot}
10934**
10935** An instance of the snapshot object records the state of a [WAL mode]
10936** database for some specific point in history.
10937**
10938** In [WAL mode], multiple [database connections] that are open on the
10939** same database file can each be reading a different historical version
10940** of the database file.  When a [database connection] begins a read
10941** transaction, that connection sees an unchanging copy of the database
10942** as it existed for the point in time when the transaction first started.
10943** Subsequent changes to the database from other connections are not seen
10944** by the reader until a new read transaction is started.
10945**
10946** The sqlite3_snapshot object records state information about an historical
10947** version of the database file so that it is possible to later open a new read
10948** transaction that sees that historical version of the database rather than
10949** the most recent version.
10950*/
10951typedef struct sqlite3_snapshot {
10952  unsigned char hidden[48];
10953} sqlite3_snapshot;
10954
10955/*
10956** CAPI3REF: Record A Database Snapshot
10957** CONSTRUCTOR: sqlite3_snapshot
10958**
10959** ^The [sqlite3_snapshot_get(D,S,P)] interface attempts to make a
10960** new [sqlite3_snapshot] object that records the current state of
10961** schema S in database connection D.  ^On success, the
10962** [sqlite3_snapshot_get(D,S,P)] interface writes a pointer to the newly
10963** created [sqlite3_snapshot] object into *P and returns SQLITE_OK.
10964** If there is not already a read-transaction open on schema S when
10965** this function is called, one is opened automatically.
10966**
10967** If a read-transaction is opened by this function, then it is guaranteed
10968** that the returned snapshot object may not be invalidated by a database
10969** writer or checkpointer until after the read-transaction is closed. This
10970** is not guaranteed if a read-transaction is already open when this
10971** function is called. In that case, any subsequent write or checkpoint
10972** operation on the database may invalidate the returned snapshot handle,
10973** even while the read-transaction remains open.
10974**
10975** The following must be true for this function to succeed. If any of
10976** the following statements are false when sqlite3_snapshot_get() is
10977** called, SQLITE_ERROR is returned. The final value of *P is undefined
10978** in this case.
10979**
10980** <ul>
10981**   <li> The database handle must not be in [autocommit mode].
10982**
10983**   <li> Schema S of [database connection] D must be a [WAL mode] database.
10984**
10985**   <li> There must not be a write transaction open on schema S of database
10986**        connection D.
10987**
10988**   <li> One or more transactions must have been written to the current wal
10989**        file since it was created on disk (by any connection). This means
10990**        that a snapshot cannot be taken on a wal mode database with no wal
10991**        file immediately after it is first opened. At least one transaction
10992**        must be written to it first.
10993** </ul>
10994**
10995** This function may also return SQLITE_NOMEM.  If it is called with the
10996** database handle in autocommit mode but fails for some other reason,
10997** whether or not a read transaction is opened on schema S is undefined.
10998**
10999** The [sqlite3_snapshot] object returned from a successful call to
11000** [sqlite3_snapshot_get()] must be freed using [sqlite3_snapshot_free()]
11001** to avoid a memory leak.
11002**
11003** The [sqlite3_snapshot_get()] interface is only available when the
11004** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used.
11005*/
11006SQLITE_API int sqlite3_snapshot_get(
11007  sqlite3 *db,
11008  const char *zSchema,
11009  sqlite3_snapshot **ppSnapshot
11010);
11011
11012/*
11013** CAPI3REF: Start a read transaction on an historical snapshot
11014** METHOD: sqlite3_snapshot
11015**
11016** ^The [sqlite3_snapshot_open(D,S,P)] interface either starts a new read
11017** transaction or upgrades an existing one for schema S of
11018** [database connection] D such that the read transaction refers to
11019** historical [snapshot] P, rather than the most recent change to the
11020** database. ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK
11021** on success or an appropriate [error code] if it fails.
11022**
11023** ^In order to succeed, the database connection must not be in
11024** [autocommit mode] when [sqlite3_snapshot_open(D,S,P)] is called. If there
11025** is already a read transaction open on schema S, then the database handle
11026** must have no active statements (SELECT statements that have been passed
11027** to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()).
11028** SQLITE_ERROR is returned if either of these conditions is violated, or
11029** if schema S does not exist, or if the snapshot object is invalid.
11030**
11031** ^A call to sqlite3_snapshot_open() will fail to open if the specified
11032** snapshot has been overwritten by a [checkpoint]. In this case
11033** SQLITE_ERROR_SNAPSHOT is returned.
11034**
11035** If there is already a read transaction open when this function is
11036** invoked, then the same read transaction remains open (on the same
11037** database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT
11038** is returned. If another error code - for example SQLITE_PROTOCOL or an
11039** SQLITE_IOERR error code - is returned, then the final state of the
11040** read transaction is undefined. If SQLITE_OK is returned, then the
11041** read transaction is now open on database snapshot P.
11042**
11043** ^(A call to [sqlite3_snapshot_open(D,S,P)] will fail if the
11044** database connection D does not know that the database file for
11045** schema S is in [WAL mode].  A database connection might not know
11046** that the database file is in [WAL mode] if there has been no prior
11047** I/O on that database connection, or if the database entered [WAL mode]
11048** after the most recent I/O on the database connection.)^
11049** (Hint: Run "[PRAGMA application_id]" against a newly opened
11050** database connection in order to make it ready to use snapshots.)
11051**
11052** The [sqlite3_snapshot_open()] interface is only available when the
11053** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used.
11054*/
11055SQLITE_API int sqlite3_snapshot_open(
11056  sqlite3 *db,
11057  const char *zSchema,
11058  sqlite3_snapshot *pSnapshot
11059);
11060
11061/*
11062** CAPI3REF: Destroy a snapshot
11063** DESTRUCTOR: sqlite3_snapshot
11064**
11065** ^The [sqlite3_snapshot_free(P)] interface destroys [sqlite3_snapshot] P.
11066** The application must eventually free every [sqlite3_snapshot] object
11067** using this routine to avoid a memory leak.
11068**
11069** The [sqlite3_snapshot_free()] interface is only available when the
11070** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used.
11071*/
11072SQLITE_API void sqlite3_snapshot_free(sqlite3_snapshot*);
11073
11074/*
11075** CAPI3REF: Compare the ages of two snapshot handles.
11076** METHOD: sqlite3_snapshot
11077**
11078** The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages
11079** of two valid snapshot handles.
11080**
11081** If the two snapshot handles are not associated with the same database
11082** file, the result of the comparison is undefined.
11083**
11084** Additionally, the result of the comparison is only valid if both of the
11085** snapshot handles were obtained by calling sqlite3_snapshot_get() since the
11086** last time the wal file was deleted. The wal file is deleted when the
11087** database is changed back to rollback mode or when the number of database
11088** clients drops to zero. If either snapshot handle was obtained before the
11089** wal file was last deleted, the value returned by this function
11090** is undefined.
11091**
11092** Otherwise, this API returns a negative value if P1 refers to an older
11093** snapshot than P2, zero if the two handles refer to the same database
11094** snapshot, and a positive value if P1 is a newer snapshot than P2.
11095**
11096** This interface is only available if SQLite is compiled with the
11097** [SQLITE_ENABLE_SNAPSHOT] option.
11098*/
11099SQLITE_API int sqlite3_snapshot_cmp(
11100  sqlite3_snapshot *p1,
11101  sqlite3_snapshot *p2
11102);
11103
11104/*
11105** CAPI3REF: Recover snapshots from a wal file
11106** METHOD: sqlite3_snapshot
11107**
11108** If a [WAL file] remains on disk after all database connections close
11109** (either through the use of the [SQLITE_FCNTL_PERSIST_WAL] [file control]
11110** or because the last process to have the database opened exited without
11111** calling [sqlite3_close()]) and a new connection is subsequently opened
11112** on that database and [WAL file], the [sqlite3_snapshot_open()] interface
11113** will only be able to open the last transaction added to the WAL file
11114** even though the WAL file contains other valid transactions.
11115**
11116** This function attempts to scan the WAL file associated with database zDb
11117** of database handle db and make all valid snapshots available to
11118** sqlite3_snapshot_open(). It is an error if there is already a read
11119** transaction open on the database, or if the database is not a WAL mode
11120** database.
11121**
11122** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
11123**
11124** This interface is only available if SQLite is compiled with the
11125** [SQLITE_ENABLE_SNAPSHOT] option.
11126*/
11127SQLITE_API int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb);
11128
11129/*
11130** CAPI3REF: Serialize a database
11131**
11132** The sqlite3_serialize(D,S,P,F) interface returns a pointer to
11133** memory that is a serialization of the S database on
11134** [database connection] D.  If S is a NULL pointer, the main database is used.
11135** If P is not a NULL pointer, then the size of the database in bytes
11136** is written into *P.
11137**
11138** For an ordinary on-disk database file, the serialization is just a
11139** copy of the disk file.  For an in-memory database or a "TEMP" database,
11140** the serialization is the same sequence of bytes which would be written
11141** to disk if that database were backed up to disk.
11142**
11143** The usual case is that sqlite3_serialize() copies the serialization of
11144** the database into memory obtained from [sqlite3_malloc64()] and returns
11145** a pointer to that memory.  The caller is responsible for freeing the
11146** returned value to avoid a memory leak.  However, if the F argument
11147** contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations
11148** are made, and the sqlite3_serialize() function will return a pointer
11149** to the contiguous memory representation of the database that SQLite
11150** is currently using for that database, or NULL if no such contiguous
11151** memory representation of the database exists.  A contiguous memory
11152** representation of the database will usually only exist if there has
11153** been a prior call to [sqlite3_deserialize(D,S,...)] with the same
11154** values of D and S.
11155** The size of the database is written into *P even if the
11156** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy
11157** of the database exists.
11158**
11159** After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set,
11160** the returned buffer content will remain accessible and unchanged
11161** until either the next write operation on the connection or when
11162** the connection is closed, and applications must not modify the
11163** buffer. If the bit had been clear, the returned buffer will not
11164** be accessed by SQLite after the call.
11165**
11166** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the
11167** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory
11168** allocation error occurs.
11169**
11170** This interface is omitted if SQLite is compiled with the
11171** [SQLITE_OMIT_DESERIALIZE] option.
11172*/
11173SQLITE_API unsigned char *sqlite3_serialize(
11174  sqlite3 *db,           /* The database connection */
11175  const char *zSchema,   /* Which DB to serialize. ex: "main", "temp", ... */
11176  sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */
11177  unsigned int mFlags    /* Zero or more SQLITE_SERIALIZE_* flags */
11178);
11179
11180/*
11181** CAPI3REF: Flags for sqlite3_serialize
11182**
11183** Zero or more of the following constants can be OR-ed together for
11184** the F argument to [sqlite3_serialize(D,S,P,F)].
11185**
11186** SQLITE_SERIALIZE_NOCOPY means that [sqlite3_serialize()] will return
11187** a pointer to contiguous in-memory database that it is currently using,
11188** without making a copy of the database.  If SQLite is not currently using
11189** a contiguous in-memory database, then this option causes
11190** [sqlite3_serialize()] to return a NULL pointer.  SQLite will only be
11191** using a contiguous in-memory database if it has been initialized by a
11192** prior call to [sqlite3_deserialize()].
11193*/
11194#define SQLITE_SERIALIZE_NOCOPY 0x001   /* Do no memory allocations */
11195
11196/*
11197** CAPI3REF: Deserialize a database
11198**
11199** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the
11200** [database connection] D to disconnect from database S and then
11201** reopen S as an in-memory database based on the serialization
11202** contained in P.  If S is a NULL pointer, the main database is
11203** used. The serialized database P is N bytes in size.  M is the size
11204** of the buffer P, which might be larger than N.  If M is larger than
11205** N, and the SQLITE_DESERIALIZE_READONLY bit is not set in F, then
11206** SQLite is permitted to add content to the in-memory database as
11207** long as the total size does not exceed M bytes.
11208**
11209** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will
11210** invoke sqlite3_free() on the serialization buffer when the database
11211** connection closes.  If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then
11212** SQLite will try to increase the buffer size using sqlite3_realloc64()
11213** if writes on the database cause it to grow larger than M bytes.
11214**
11215** Applications must not modify the buffer P or invalidate it before
11216** the database connection D is closed.
11217**
11218** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the
11219** database is currently in a read transaction or is involved in a backup
11220** operation.
11221**
11222** It is not possible to deserialize into the TEMP database.  If the
11223** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the
11224** function returns SQLITE_ERROR.
11225**
11226** The deserialized database should not be in [WAL mode].  If the database
11227** is in WAL mode, then any attempt to use the database file will result
11228** in an [SQLITE_CANTOPEN] error.  The application can set the
11229** [file format version numbers] (bytes 18 and 19) of the input database P
11230** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the
11231** database file into rollback mode and work around this limitation.
11232**
11233** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the
11234** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then
11235** [sqlite3_free()] is invoked on argument P prior to returning.
11236**
11237** This interface is omitted if SQLite is compiled with the
11238** [SQLITE_OMIT_DESERIALIZE] option.
11239*/
11240SQLITE_API int sqlite3_deserialize(
11241  sqlite3 *db,            /* The database connection */
11242  const char *zSchema,    /* Which DB to reopen with the deserialization */
11243  unsigned char *pData,   /* The serialized database content */
11244  sqlite3_int64 szDb,     /* Number of bytes in the deserialization */
11245  sqlite3_int64 szBuf,    /* Total size of buffer pData[] */
11246  unsigned mFlags         /* Zero or more SQLITE_DESERIALIZE_* flags */
11247);
11248
11249/*
11250** CAPI3REF: Flags for sqlite3_deserialize()
11251**
11252** The following are allowed values for the 6th argument (the F argument) to
11253** the [sqlite3_deserialize(D,S,P,N,M,F)] interface.
11254**
11255** The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization
11256** in the P argument is held in memory obtained from [sqlite3_malloc64()]
11257** and that SQLite should take ownership of this memory and automatically
11258** free it when it has finished using it.  Without this flag, the caller
11259** is responsible for freeing any dynamically allocated memory.
11260**
11261** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to
11262** grow the size of the database using calls to [sqlite3_realloc64()].  This
11263** flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used.
11264** Without this flag, the deserialized database cannot increase in size beyond
11265** the number of bytes specified by the M parameter.
11266**
11267** The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database
11268** should be treated as read-only.
11269*/
11270#define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */
11271#define SQLITE_DESERIALIZE_RESIZEABLE  2 /* Resize using sqlite3_realloc64() */
11272#define SQLITE_DESERIALIZE_READONLY    4 /* Database is read-only */
11273
11274/*
11275** CAPI3REF: Bind array values to the CARRAY table-valued function
11276**
11277** The sqlite3_carray_bind_v2(S,I,P,N,F,X,D) interface binds an array value to
11278** parameter that is the first argument of the [carray() table-valued function].
11279** The S parameter is a pointer to the [prepared statement] that uses the
11280** carray() functions.  I is the parameter index to be bound.  I must be the
11281** index of the parameter that is the first argument to the carray()
11282** table-valued function. P is a pointer to the array to be bound, and N
11283** is the number of elements in the array.  The F argument is one of
11284** constants [SQLITE_CARRAY_INT32], [SQLITE_CARRAY_INT64],
11285** [SQLITE_CARRAY_DOUBLE], [SQLITE_CARRAY_TEXT],
11286** or [SQLITE_CARRAY_BLOB] to indicate the datatype of the array P.
11287**
11288** If the X argument is not a NULL pointer or one of the special
11289** values [SQLITE_STATIC] or [SQLITE_TRANSIENT], then SQLite will invoke
11290** the function X with argument D when it is finished using the data in P.
11291** The call to X(D) is a destructor for the array P. The destructor X(D)
11292** is invoked even if the call to sqlite3_carray_bind_v2() fails. If the X
11293** parameter is the special-case value [SQLITE_STATIC], then SQLite assumes
11294** that the data static and the destructor is never invoked.  If the X
11295** parameter is the special-case value [SQLITE_TRANSIENT], then
11296** sqlite3_carray_bind_v2() makes its own private copy of the data prior
11297** to returning and never invokes the destructor X.
11298**
11299** The sqlite3_carray_bind() function works the same as sqlite3_carray_bind_v2()
11300** with a D parameter set to P.  In other words,
11301** sqlite3_carray_bind(S,I,P,N,F,X) is same as
11302** sqlite3_carray_bind_v2(S,I,P,N,F,X,P).
11303*/
11304SQLITE_API int sqlite3_carray_bind_v2(
11305  sqlite3_stmt *pStmt,        /* Statement to be bound */
11306  int i,                      /* Parameter index */
11307  void *aData,                /* Pointer to array data */
11308  int nData,                  /* Number of data elements */
11309  int mFlags,                 /* CARRAY flags */
11310  void (*xDel)(void*),        /* Destructor for aData */
11311  void *pDel                  /* Optional argument to xDel() */
11312);
11313SQLITE_API int sqlite3_carray_bind(
11314  sqlite3_stmt *pStmt,        /* Statement to be bound */
11315  int i,                      /* Parameter index */
11316  void *aData,                /* Pointer to array data */
11317  int nData,                  /* Number of data elements */
11318  int mFlags,                 /* CARRAY flags */
11319  void (*xDel)(void*)         /* Destructor for aData */
11320);
11321
11322/*
11323** CAPI3REF: Datatypes for the CARRAY table-valued function
11324**
11325** The fifth argument to the [sqlite3_carray_bind()] interface musts be
11326** one of the following constants, to specify the datatype of the array
11327** that is being bound into the [carray table-valued function].
11328*/
11329#define SQLITE_CARRAY_INT32     0    /* Data is 32-bit signed integers */
11330#define SQLITE_CARRAY_INT64     1    /* Data is 64-bit signed integers */
11331#define SQLITE_CARRAY_DOUBLE    2    /* Data is doubles */
11332#define SQLITE_CARRAY_TEXT      3    /* Data is char* */
11333#define SQLITE_CARRAY_BLOB      4    /* Data is struct iovec */
11334
11335/*
11336** Versions of the above #defines that omit the initial SQLITE_, for
11337** legacy compatibility.
11338*/
11339#define CARRAY_INT32     0    /* Data is 32-bit signed integers */
11340#define CARRAY_INT64     1    /* Data is 64-bit signed integers */
11341#define CARRAY_DOUBLE    2    /* Data is doubles */
11342#define CARRAY_TEXT      3    /* Data is char* */
11343#define CARRAY_BLOB      4    /* Data is struct iovec */
11344
11345/*
11346** Undo the hack that converts floating point types to integer for
11347** builds on processors without floating point support.
11348*/
11349#ifdef SQLITE_OMIT_FLOATING_POINT
11350# undef double
11351#endif
11352
11353#if defined(__wasi__)
11354# undef SQLITE_WASI
11355# define SQLITE_WASI 1
11356# ifndef SQLITE_OMIT_LOAD_EXTENSION
11357#  define SQLITE_OMIT_LOAD_EXTENSION
11358# endif
11359# ifndef SQLITE_THREADSAFE
11360#  define SQLITE_THREADSAFE 0
11361# endif
11362#endif
11363
11364#ifdef __cplusplus
11365}  /* End of the 'extern "C"' block */
11366#endif
11367/* #endif for SQLITE3_H will be added by mksqlite3.tcl */
11368
11369/******** Begin file sqlite3rtree.h *********/
11370/*
11371** 2010 August 30
11372**
11373** The author disclaims copyright to this source code.  In place of
11374** a legal notice, here is a blessing:
11375**
11376**    May you do good and not evil.
11377**    May you find forgiveness for yourself and forgive others.
11378**    May you share freely, never taking more than you give.
11379**
11380*************************************************************************
11381*/
11382
11383#ifndef _SQLITE3RTREE_H_
11384#define _SQLITE3RTREE_H_
11385
11386
11387#ifdef __cplusplus
11388extern "C" {
11389#endif
11390
11391typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
11392typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info;
11393
11394/* The double-precision datatype used by RTree depends on the
11395** SQLITE_RTREE_INT_ONLY compile-time option.
11396*/
11397#ifdef SQLITE_RTREE_INT_ONLY
11398  typedef sqlite3_int64 sqlite3_rtree_dbl;
11399#else
11400  typedef double sqlite3_rtree_dbl;
11401#endif
11402
11403/*
11404** Register a geometry callback named zGeom that can be used as part of an
11405** R-Tree geometry query as follows:
11406**
11407**   SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
11408*/
11409SQLITE_API int sqlite3_rtree_geometry_callback(
11410  sqlite3 *db,
11411  const char *zGeom,
11412  int (*xGeom)(sqlite3_rtree_geometry*, int, sqlite3_rtree_dbl*,int*),
11413  void *pContext
11414);
11415
11416
11417/*
11418** A pointer to a structure of the following type is passed as the first
11419** argument to callbacks registered using rtree_geometry_callback().
11420*/
11421struct sqlite3_rtree_geometry {
11422  void *pContext;                 /* Copy of pContext passed to s_r_g_c() */
11423  int nParam;                     /* Size of array aParam[] */
11424  sqlite3_rtree_dbl *aParam;      /* Parameters passed to SQL geom function */
11425  void *pUser;                    /* Callback implementation user data */
11426  void (*xDelUser)(void *);       /* Called by SQLite to clean up pUser */
11427};
11428
11429/*
11430** Register a 2nd-generation geometry callback named zScore that can be
11431** used as part of an R-Tree geometry query as follows:
11432**
11433**   SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zQueryFunc(... params ...)
11434*/
11435SQLITE_API int sqlite3_rtree_query_callback(
11436  sqlite3 *db,
11437  const char *zQueryFunc,
11438  int (*xQueryFunc)(sqlite3_rtree_query_info*),
11439  void *pContext,
11440  void (*xDestructor)(void*)
11441);
11442
11443
11444/*
11445** A pointer to a structure of the following type is passed as the
11446** argument to scored geometry callback registered using
11447** sqlite3_rtree_query_callback().
11448**
11449** Note that the first 5 fields of this structure are identical to
11450** sqlite3_rtree_geometry.  This structure is a subclass of
11451** sqlite3_rtree_geometry.
11452*/
11453struct sqlite3_rtree_query_info {
11454  void *pContext;                   /* pContext from when function registered */
11455  int nParam;                       /* Number of function parameters */
11456  sqlite3_rtree_dbl *aParam;        /* value of function parameters */
11457  void *pUser;                      /* callback can use this, if desired */
11458  void (*xDelUser)(void*);          /* function to free pUser */
11459  sqlite3_rtree_dbl *aCoord;        /* Coordinates of node or entry to check */
11460  unsigned int *anQueue;            /* Number of pending entries in the queue */
11461  int nCoord;                       /* Number of coordinates */
11462  int iLevel;                       /* Level of current node or entry */
11463  int mxLevel;                      /* The largest iLevel value in the tree */
11464  sqlite3_int64 iRowid;             /* Rowid for current entry */
11465  sqlite3_rtree_dbl rParentScore;   /* Score of parent node */
11466  int eParentWithin;                /* Visibility of parent node */
11467  int eWithin;                      /* OUT: Visibility */
11468  sqlite3_rtree_dbl rScore;         /* OUT: Write the score here */
11469  /* The following fields are only available in 3.8.11 and later */
11470  sqlite3_value **apSqlParam;       /* Original SQL values of parameters */
11471};
11472
11473/*
11474** Allowed values for sqlite3_rtree_query.eWithin and .eParentWithin.
11475*/
11476#define NOT_WITHIN       0   /* Object completely outside of query region */
11477#define PARTLY_WITHIN    1   /* Object partially overlaps query region */
11478#define FULLY_WITHIN     2   /* Object fully contained within query region */
11479
11480
11481#ifdef __cplusplus
11482}  /* end of the 'extern "C"' block */
11483#endif
11484
11485#endif  /* ifndef _SQLITE3RTREE_H_ */
11486
11487/******** End of sqlite3rtree.h *********/
11488/******** Begin file sqlite3session.h *********/
11489
11490#if !defined(__SQLITESESSION_H_) && defined(SQLITE_ENABLE_SESSION)
11491#define __SQLITESESSION_H_ 1
11492
11493/*
11494** Make sure we can call this stuff from C++.
11495*/
11496#ifdef __cplusplus
11497extern "C" {
11498#endif
11499
11500
11501/*
11502** CAPI3REF: Session Object Handle
11503**
11504** An instance of this object is a [session] that can be used to
11505** record changes to a database.
11506*/
11507typedef struct sqlite3_session sqlite3_session;
11508
11509/*
11510** CAPI3REF: Changeset Iterator Handle
11511**
11512** An instance of this object acts as a cursor for iterating
11513** over the elements of a [changeset] or [patchset].
11514*/
11515typedef struct sqlite3_changeset_iter sqlite3_changeset_iter;
11516
11517/*
11518** CAPI3REF: Create A New Session Object
11519** CONSTRUCTOR: sqlite3_session
11520**
11521** Create a new session object attached to database handle db. If successful,
11522** a pointer to the new object is written to *ppSession and SQLITE_OK is
11523** returned. If an error occurs, *ppSession is set to NULL and an SQLite
11524** error code (e.g. SQLITE_NOMEM) is returned.
11525**
11526** It is possible to create multiple session objects attached to a single
11527** database handle.
11528**
11529** Session objects created using this function should be deleted using the
11530** [sqlite3session_delete()] function before the database handle that they
11531** are attached to is itself closed. If the database handle is closed before
11532** the session object is deleted, then the results of calling any session
11533** module function, including [sqlite3session_delete()] on the session object
11534** are undefined.
11535**
11536** Because the session module uses the [sqlite3_preupdate_hook()] API, it
11537** is not possible for an application to register a pre-update hook on a
11538** database handle that has one or more session objects attached. Nor is
11539** it possible to create a session object attached to a database handle for
11540** which a pre-update hook is already defined. The results of attempting
11541** either of these things are undefined.
11542**
11543** The session object will be used to create changesets for tables in
11544** database zDb, where zDb is either "main", or "temp", or the name of an
11545** attached database. It is not an error if database zDb is not attached
11546** to the database when the session object is created.
11547*/
11548SQLITE_API int sqlite3session_create(
11549  sqlite3 *db,                    /* Database handle */
11550  const char *zDb,                /* Name of db (e.g. "main") */
11551  sqlite3_session **ppSession     /* OUT: New session object */
11552);
11553
11554/*
11555** CAPI3REF: Delete A Session Object
11556** DESTRUCTOR: sqlite3_session
11557**
11558** Delete a session object previously allocated using
11559** [sqlite3session_create()]. Once a session object has been deleted, the
11560** results of attempting to use pSession with any other session module
11561** function are undefined.
11562**
11563** Session objects must be deleted before the database handle to which they
11564** are attached is closed. Refer to the documentation for
11565** [sqlite3session_create()] for details.
11566*/
11567SQLITE_API void sqlite3session_delete(sqlite3_session *pSession);
11568
11569/*
11570** CAPI3REF: Configure a Session Object
11571** METHOD: sqlite3_session
11572**
11573** This method is used to configure a session object after it has been
11574** created. At present the only valid values for the second parameter are
11575** [SQLITE_SESSION_OBJCONFIG_SIZE] and [SQLITE_SESSION_OBJCONFIG_ROWID].
11576**
11577*/
11578SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg);
11579
11580/*
11581** CAPI3REF: Options for sqlite3session_object_config
11582**
11583** The following values may passed as the the 2nd parameter to
11584** sqlite3session_object_config().
11585**
11586** <dt>SQLITE_SESSION_OBJCONFIG_SIZE <dd>
11587**   This option is used to set, clear or query the flag that enables
11588**   the [sqlite3session_changeset_size()] API. Because it imposes some
11589**   computational overhead, this API is disabled by default. Argument
11590**   pArg must point to a value of type (int). If the value is initially
11591**   0, then the sqlite3session_changeset_size() API is disabled. If it
11592**   is greater than 0, then the same API is enabled. Or, if the initial
11593**   value is less than zero, no change is made. In all cases the (int)
11594**   variable is set to 1 if the sqlite3session_changeset_size() API is
11595**   enabled following the current call, or 0 otherwise.
11596**
11597**   It is an error (SQLITE_MISUSE) to attempt to modify this setting after
11598**   the first table has been attached to the session object.
11599**
11600** <dt>SQLITE_SESSION_OBJCONFIG_ROWID <dd>
11601**   This option is used to set, clear or query the flag that enables
11602**   collection of data for tables with no explicit PRIMARY KEY.
11603**
11604**   Normally, tables with no explicit PRIMARY KEY are simply ignored
11605**   by the sessions module. However, if this flag is set, it behaves
11606**   as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted
11607**   as their leftmost columns.
11608**
11609**   It is an error (SQLITE_MISUSE) to attempt to modify this setting after
11610**   the first table has been attached to the session object.
11611*/
11612#define SQLITE_SESSION_OBJCONFIG_SIZE  1
11613#define SQLITE_SESSION_OBJCONFIG_ROWID 2
11614
11615/*
11616** CAPI3REF: Enable Or Disable A Session Object
11617** METHOD: sqlite3_session
11618**
11619** Enable or disable the recording of changes by a session object. When
11620** enabled, a session object records changes made to the database. When
11621** disabled - it does not. A newly created session object is enabled.
11622** Refer to the documentation for [sqlite3session_changeset()] for further
11623** details regarding how enabling and disabling a session object affects
11624** the eventual changesets.
11625**
11626** Passing zero to this function disables the session. Passing a value
11627** greater than zero enables it. Passing a value less than zero is a
11628** no-op, and may be used to query the current state of the session.
11629**
11630** The return value indicates the final state of the session object: 0 if
11631** the session is disabled, or 1 if it is enabled.
11632*/
11633SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable);
11634
11635/*
11636** CAPI3REF: Set Or Clear the Indirect Change Flag
11637** METHOD: sqlite3_session
11638**
11639** Each change recorded by a session object is marked as either direct or
11640** indirect. A change is marked as indirect if either:
11641**
11642** <ul>
11643**   <li> The session object "indirect" flag is set when the change is
11644**        made, or
11645**   <li> The change is made by an SQL trigger or foreign key action
11646**        instead of directly as a result of a users SQL statement.
11647** </ul>
11648**
11649** If a single row is affected by more than one operation within a session,
11650** then the change is considered indirect if all operations meet the criteria
11651** for an indirect change above, or direct otherwise.
11652**
11653** This function is used to set, clear or query the session object indirect
11654** flag.  If the second argument passed to this function is zero, then the
11655** indirect flag is cleared. If it is greater than zero, the indirect flag
11656** is set. Passing a value less than zero does not modify the current value
11657** of the indirect flag, and may be used to query the current state of the
11658** indirect flag for the specified session object.
11659**
11660** The return value indicates the final state of the indirect flag: 0 if
11661** it is clear, or 1 if it is set.
11662*/
11663SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect);
11664
11665/*
11666** CAPI3REF: Attach A Table To A Session Object
11667** METHOD: sqlite3_session
11668**
11669** If argument zTab is not NULL, then it is the name of a table to attach
11670** to the session object passed as the first argument. All subsequent changes
11671** made to the table while the session object is enabled will be recorded. See
11672** documentation for [sqlite3session_changeset()] for further details.
11673**
11674** Or, if argument zTab is NULL, then changes are recorded for all tables
11675** in the database. If additional tables are added to the database (by
11676** executing "CREATE TABLE" statements) after this call is made, changes for
11677** the new tables are also recorded.
11678**
11679** Changes can only be recorded for tables that have a PRIMARY KEY explicitly
11680** defined as part of their CREATE TABLE statement. It does not matter if the
11681** PRIMARY KEY is an "INTEGER PRIMARY KEY" (rowid alias) or not. The PRIMARY
11682** KEY may consist of a single column, or may be a composite key.
11683**
11684** It is not an error if the named table does not exist in the database. Nor
11685** is it an error if the named table does not have a PRIMARY KEY. However,
11686** no changes will be recorded in either of these scenarios.
11687**
11688** Changes are not recorded for individual rows that have NULL values stored
11689** in one or more of their PRIMARY KEY columns.
11690**
11691** SQLITE_OK is returned if the call completes without error. Or, if an error
11692** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned.
11693**
11694** <h3>Special sqlite_stat1 Handling</h3>
11695**
11696** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to
11697** some of the rules above. In SQLite, the schema of sqlite_stat1 is:
11698**  <pre>
11699**  &nbsp;     CREATE TABLE sqlite_stat1(tbl,idx,stat)
11700**  </pre>
11701**
11702** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are
11703** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes
11704** are recorded for rows for which (idx IS NULL) is true. However, for such
11705** rows a zero-length blob (SQL value X'') is stored in the changeset or
11706** patchset instead of a NULL value. This allows such changesets to be
11707** manipulated by legacy implementations of sqlite3changeset_invert(),
11708** concat() and similar.
11709**
11710** The sqlite3changeset_apply() function automatically converts the
11711** zero-length blob back to a NULL value when updating the sqlite_stat1
11712** table. However, if the application calls sqlite3changeset_new(),
11713** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset
11714** iterator directly (including on a changeset iterator passed to a
11715** conflict-handler callback) then the X'' value is returned. The application
11716** must translate X'' to NULL itself if required.
11717**
11718** Legacy (older than 3.22.0) versions of the sessions module cannot capture
11719** changes made to the sqlite_stat1 table. Legacy versions of the
11720** sqlite3changeset_apply() function silently ignore any modifications to the
11721** sqlite_stat1 table that are part of a changeset or patchset.
11722*/
11723SQLITE_API int sqlite3session_attach(
11724  sqlite3_session *pSession,      /* Session object */
11725  const char *zTab                /* Table name */
11726);
11727
11728/*
11729** CAPI3REF: Set a table filter on a Session Object.
11730** METHOD: sqlite3_session
11731**
11732** The second argument (xFilter) is the "filter callback". For changes to rows
11733** in tables that are not attached to the Session object, the filter is called
11734** to determine whether changes to the table's rows should be tracked or not.
11735** If xFilter returns 0, changes are not tracked. Note that once a table is
11736** attached, xFilter will not be called again.
11737*/
11738SQLITE_API void sqlite3session_table_filter(
11739  sqlite3_session *pSession,      /* Session object */
11740  int(*xFilter)(
11741    void *pCtx,                   /* Copy of third arg to _filter_table() */
11742    const char *zTab              /* Table name */
11743  ),
11744  void *pCtx                      /* First argument passed to xFilter */
11745);
11746
11747/*
11748** CAPI3REF: Generate A Changeset From A Session Object
11749** METHOD: sqlite3_session
11750**
11751** Obtain a changeset containing changes to the tables attached to the
11752** session object passed as the first argument. If successful,
11753** set *ppChangeset to point to a buffer containing the changeset
11754** and *pnChangeset to the size of the changeset in bytes before returning
11755** SQLITE_OK. If an error occurs, set both *ppChangeset and *pnChangeset to
11756** zero and return an SQLite error code.
11757**
11758** A changeset consists of zero or more INSERT, UPDATE and/or DELETE changes,
11759** each representing a change to a single row of an attached table. An INSERT
11760** change contains the values of each field of a new database row. A DELETE
11761** contains the original values of each field of a deleted database row. An
11762** UPDATE change contains the original values of each field of an updated
11763** database row along with the updated values for each updated non-primary-key
11764** column. It is not possible for an UPDATE change to represent a change that
11765** modifies the values of primary key columns. If such a change is made, it
11766** is represented in a changeset as a DELETE followed by an INSERT.
11767**
11768** Changes are not recorded for rows that have NULL values stored in one or
11769** more of their PRIMARY KEY columns. If such a row is inserted or deleted,
11770** no corresponding change is present in the changesets returned by this
11771** function. If an existing row with one or more NULL values stored in
11772** PRIMARY KEY columns is updated so that all PRIMARY KEY columns are non-NULL,
11773** only an INSERT is appears in the changeset. Similarly, if an existing row
11774** with non-NULL PRIMARY KEY values is updated so that one or more of its
11775** PRIMARY KEY columns are set to NULL, the resulting changeset contains a
11776** DELETE change only.
11777**
11778** The contents of a changeset may be traversed using an iterator created
11779** using the [sqlite3changeset_start()] API. A changeset may be applied to
11780** a database with a compatible schema using the [sqlite3changeset_apply()]
11781** API.
11782**
11783** Within a changeset generated by this function, all changes related to a
11784** single table are grouped together. In other words, when iterating through
11785** a changeset or when applying a changeset to a database, all changes related
11786** to a single table are processed before moving on to the next table. Tables
11787** are sorted in the same order in which they were attached (or auto-attached)
11788** to the sqlite3_session object. The order in which the changes related to
11789** a single table are stored is undefined.
11790**
11791** Following a successful call to this function, it is the responsibility of
11792** the caller to eventually free the buffer that *ppChangeset points to using
11793** [sqlite3_free()].
11794**
11795** <h3>Changeset Generation</h3>
11796**
11797** Once a table has been attached to a session object, the session object
11798** records the primary key values of all new rows inserted into the table.
11799** It also records the original primary key and other column values of any
11800** deleted or updated rows. For each unique primary key value, data is only
11801** recorded once - the first time a row with said primary key is inserted,
11802** updated or deleted in the lifetime of the session.
11803**
11804** There is one exception to the previous paragraph: when a row is inserted,
11805** updated or deleted, if one or more of its primary key columns contain a
11806** NULL value, no record of the change is made.
11807**
11808** The session object therefore accumulates two types of records - those
11809** that consist of primary key values only (created when the user inserts
11810** a new record) and those that consist of the primary key values and the
11811** original values of other table columns (created when the users deletes
11812** or updates a record).
11813**
11814** When this function is called, the requested changeset is created using
11815** both the accumulated records and the current contents of the database
11816** file. Specifically:
11817**
11818** <ul>
11819**   <li> For each record generated by an insert, the database is queried
11820**        for a row with a matching primary key. If one is found, an INSERT
11821**        change is added to the changeset. If no such row is found, no change
11822**        is added to the changeset.
11823**
11824**   <li> For each record generated by an update or delete, the database is
11825**        queried for a row with a matching primary key. If such a row is
11826**        found and one or more of the non-primary key fields have been
11827**        modified from their original values, an UPDATE change is added to
11828**        the changeset. Or, if no such row is found in the table, a DELETE
11829**        change is added to the changeset. If there is a row with a matching
11830**        primary key in the database, but all fields contain their original
11831**        values, no change is added to the changeset.
11832** </ul>
11833**
11834** This means, amongst other things, that if a row is inserted and then later
11835** deleted while a session object is active, neither the insert nor the delete
11836** will be present in the changeset. Or if a row is deleted and then later a
11837** row with the same primary key values inserted while a session object is
11838** active, the resulting changeset will contain an UPDATE change instead of
11839** a DELETE and an INSERT.
11840**
11841** When a session object is disabled (see the [sqlite3session_enable()] API),
11842** it does not accumulate records when rows are inserted, updated or deleted.
11843** This may appear to have some counter-intuitive effects if a single row
11844** is written to more than once during a session. For example, if a row
11845** is inserted while a session object is enabled, then later deleted while
11846** the same session object is disabled, no INSERT record will appear in the
11847** changeset, even though the delete took place while the session was disabled.
11848** Or, if one field of a row is updated while a session is enabled, and
11849** then another field of the same row is updated while the session is disabled,
11850** the resulting changeset will contain an UPDATE change that updates both
11851** fields.
11852*/
11853SQLITE_API int sqlite3session_changeset(
11854  sqlite3_session *pSession,      /* Session object */
11855  int *pnChangeset,               /* OUT: Size of buffer at *ppChangeset */
11856  void **ppChangeset              /* OUT: Buffer containing changeset */
11857);
11858
11859/*
11860** CAPI3REF: Return An Upper-limit For The Size Of The Changeset
11861** METHOD: sqlite3_session
11862**
11863** By default, this function always returns 0. For it to return
11864** a useful result, the sqlite3_session object must have been configured
11865** to enable this API using sqlite3session_object_config() with the
11866** SQLITE_SESSION_OBJCONFIG_SIZE verb.
11867**
11868** When enabled, this function returns an upper limit, in bytes, for the size
11869** of the changeset that might be produced if sqlite3session_changeset() were
11870** called. The final changeset size might be equal to or smaller than the
11871** size in bytes returned by this function.
11872*/
11873SQLITE_API sqlite3_int64 sqlite3session_changeset_size(sqlite3_session *pSession);
11874
11875/*
11876** CAPI3REF: Load The Difference Between Tables Into A Session
11877** METHOD: sqlite3_session
11878**
11879** If it is not already attached to the session object passed as the first
11880** argument, this function attaches table zTbl in the same manner as the
11881** [sqlite3session_attach()] function. If zTbl does not exist, or if it
11882** does not have a primary key, this function is a no-op (but does not return
11883** an error).
11884**
11885** Argument zFromDb must be the name of a database ("main", "temp" etc.)
11886** attached to the same database handle as the session object that contains
11887** a table compatible with the table attached to the session by this function.
11888** A table is considered compatible if it:
11889**
11890** <ul>
11891**   <li> Has the same name,
11892**   <li> Has the same set of columns declared in the same order, and
11893**   <li> Has the same PRIMARY KEY definition.
11894** </ul>
11895**
11896** If the tables are not compatible, SQLITE_SCHEMA is returned. If the tables
11897** are compatible but do not have any PRIMARY KEY columns, it is not an error
11898** but no changes are added to the session object. As with other session
11899** APIs, tables without PRIMARY KEYs are simply ignored.
11900**
11901** This function adds a set of changes to the session object that could be
11902** used to update the table in database zFrom (call this the "from-table")
11903** so that its content is the same as the table attached to the session
11904** object (call this the "to-table"). Specifically:
11905**
11906** <ul>
11907**   <li> For each row (primary key) that exists in the to-table but not in
11908**     the from-table, an INSERT record is added to the session object.
11909**
11910**   <li> For each row (primary key) that exists in the to-table but not in
11911**     the from-table, a DELETE record is added to the session object.
11912**
11913**   <li> For each row (primary key) that exists in both tables, but features
11914**     different non-PK values in each, an UPDATE record is added to the
11915**     session.
11916** </ul>
11917**
11918** To clarify, if this function is called and then a changeset constructed
11919** using [sqlite3session_changeset()], then after applying that changeset to
11920** database zFrom the contents of the two compatible tables would be
11921** identical.
11922**
11923** Unless the call to this function is a no-op as described above, it is an
11924** error if database zFrom does not exist or does not contain the required
11925** compatible table.
11926**
11927** If the operation is successful, SQLITE_OK is returned. Otherwise, an SQLite
11928** error code. In this case, if argument pzErrMsg is not NULL, *pzErrMsg
11929** may be set to point to a buffer containing an English language error
11930** message. It is the responsibility of the caller to free this buffer using
11931** sqlite3_free().
11932*/
11933SQLITE_API int sqlite3session_diff(
11934  sqlite3_session *pSession,
11935  const char *zFromDb,
11936  const char *zTbl,
11937  char **pzErrMsg
11938);
11939
11940
11941/*
11942** CAPI3REF: Generate A Patchset From A Session Object
11943** METHOD: sqlite3_session
11944**
11945** The differences between a patchset and a changeset are that:
11946**
11947** <ul>
11948**   <li> DELETE records consist of the primary key fields only. The
11949**        original values of other fields are omitted.
11950**   <li> The original values of any modified fields are omitted from
11951**        UPDATE records.
11952** </ul>
11953**
11954** A patchset blob may be used with up to date versions of all
11955** sqlite3changeset_xxx API functions except for sqlite3changeset_invert(),
11956** which returns SQLITE_CORRUPT if it is passed a patchset. Similarly,
11957** attempting to use a patchset blob with old versions of the
11958** sqlite3changeset_xxx APIs also provokes an SQLITE_CORRUPT error.
11959**
11960** Because the non-primary key "old.*" fields are omitted, no
11961** SQLITE_CHANGESET_DATA conflicts can be detected or reported if a patchset
11962** is passed to the sqlite3changeset_apply() API. Other conflict types work
11963** in the same way as for changesets.
11964**
11965** Changes within a patchset are ordered in the same way as for changesets
11966** generated by the sqlite3session_changeset() function (i.e. all changes for
11967** a single table are grouped together, tables appear in the order in which
11968** they were attached to the session object).
11969*/
11970SQLITE_API int sqlite3session_patchset(
11971  sqlite3_session *pSession,      /* Session object */
11972  int *pnPatchset,                /* OUT: Size of buffer at *ppPatchset */
11973  void **ppPatchset               /* OUT: Buffer containing patchset */
11974);
11975
11976/*
11977** CAPI3REF: Test if a changeset has recorded any changes.
11978**
11979** Return non-zero if no changes to attached tables have been recorded by
11980** the session object passed as the first argument. Otherwise, if one or
11981** more changes have been recorded, return zero.
11982**
11983** Even if this function returns zero, it is possible that calling
11984** [sqlite3session_changeset()] on the session handle may still return a
11985** changeset that contains no changes. This can happen when a row in
11986** an attached table is modified and then later on the original values
11987** are restored. However, if this function returns non-zero, then it is
11988** guaranteed that a call to sqlite3session_changeset() will return a
11989** changeset containing zero changes.
11990*/
11991SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession);
11992
11993/*
11994** CAPI3REF: Query for the amount of heap memory used by a session object.
11995**
11996** This API returns the total amount of heap memory in bytes currently
11997** used by the session object passed as the only argument.
11998*/
11999SQLITE_API sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession);
12000
12001/*
12002** CAPI3REF: Create An Iterator To Traverse A Changeset
12003** CONSTRUCTOR: sqlite3_changeset_iter
12004**
12005** Create an iterator used to iterate through the contents of a changeset.
12006** If successful, *pp is set to point to the iterator handle and SQLITE_OK
12007** is returned. Otherwise, if an error occurs, *pp is set to zero and an
12008** SQLite error code is returned.
12009**
12010** The following functions can be used to advance and query a changeset
12011** iterator created by this function:
12012**
12013** <ul>
12014**   <li> [sqlite3changeset_next()]
12015**   <li> [sqlite3changeset_op()]
12016**   <li> [sqlite3changeset_new()]
12017**   <li> [sqlite3changeset_old()]
12018** </ul>
12019**
12020** It is the responsibility of the caller to eventually destroy the iterator
12021** by passing it to [sqlite3changeset_finalize()]. The buffer containing the
12022** changeset (pChangeset) must remain valid until after the iterator is
12023** destroyed.
12024**
12025** Assuming the changeset blob was created by one of the
12026** [sqlite3session_changeset()], [sqlite3changeset_concat()] or
12027** [sqlite3changeset_invert()] functions, all changes within the changeset
12028** that apply to a single table are grouped together. This means that when
12029** an application iterates through a changeset using an iterator created by
12030** this function, all changes that relate to a single table are visited
12031** consecutively. There is no chance that the iterator will visit a change
12032** the applies to table X, then one for table Y, and then later on visit
12033** another change for table X.
12034**
12035** The behavior of sqlite3changeset_start_v2() and its streaming equivalent
12036** may be modified by passing a combination of
12037** [SQLITE_CHANGESETSTART_INVERT | supported flags] as the 4th parameter.
12038**
12039** Note that the sqlite3changeset_start_v2() API is still <b>experimental</b>
12040** and therefore subject to change.
12041*/
12042SQLITE_API int sqlite3changeset_start(
12043  sqlite3_changeset_iter **pp,    /* OUT: New changeset iterator handle */
12044  int nChangeset,                 /* Size of changeset blob in bytes */
12045  void *pChangeset                /* Pointer to blob containing changeset */
12046);
12047SQLITE_API int sqlite3changeset_start_v2(
12048  sqlite3_changeset_iter **pp,    /* OUT: New changeset iterator handle */
12049  int nChangeset,                 /* Size of changeset blob in bytes */
12050  void *pChangeset,               /* Pointer to blob containing changeset */
12051  int flags                       /* SESSION_CHANGESETSTART_* flags */
12052);
12053
12054/*
12055** CAPI3REF: Flags for sqlite3changeset_start_v2
12056**
12057** The following flags may passed via the 4th parameter to
12058** [sqlite3changeset_start_v2] and [sqlite3changeset_start_v2_strm]:
12059**
12060** <dt>SQLITE_CHANGESETSTART_INVERT <dd>
12061**   Invert the changeset while iterating through it. This is equivalent to
12062**   inverting a changeset using sqlite3changeset_invert() before applying it.
12063**   It is an error to specify this flag with a patchset.
12064*/
12065#define SQLITE_CHANGESETSTART_INVERT        0x0002
12066
12067
12068/*
12069** CAPI3REF: Advance A Changeset Iterator
12070** METHOD: sqlite3_changeset_iter
12071**
12072** This function may only be used with iterators created by the function
12073** [sqlite3changeset_start()]. If it is called on an iterator passed to
12074** a conflict-handler callback by [sqlite3changeset_apply()], SQLITE_MISUSE
12075** is returned and the call has no effect.
12076**
12077** Immediately after an iterator is created by sqlite3changeset_start(), it
12078** does not point to any change in the changeset. Assuming the changeset
12079** is not empty, the first call to this function advances the iterator to
12080** point to the first change in the changeset. Each subsequent call advances
12081** the iterator to point to the next change in the changeset (if any). If
12082** no error occurs and the iterator points to a valid change after a call
12083** to sqlite3changeset_next() has advanced it, SQLITE_ROW is returned.
12084** Otherwise, if all changes in the changeset have already been visited,
12085** SQLITE_DONE is returned.
12086**
12087** If an error occurs, an SQLite error code is returned. Possible error
12088** codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or
12089** SQLITE_NOMEM.
12090*/
12091SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
12092
12093/*
12094** CAPI3REF: Obtain The Current Operation From A Changeset Iterator
12095** METHOD: sqlite3_changeset_iter
12096**
12097** The pIter argument passed to this function may either be an iterator
12098** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator
12099** created by [sqlite3changeset_start()]. In the latter case, the most recent
12100** call to [sqlite3changeset_next()] must have returned [SQLITE_ROW]. If this
12101** is not the case, this function returns [SQLITE_MISUSE].
12102**
12103** Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three
12104** outputs are set through these pointers:
12105**
12106** *pOp is set to one of [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE],
12107** depending on the type of change that the iterator currently points to;
12108**
12109** *pnCol is set to the number of columns in the table affected by the change; and
12110**
12111** *pzTab is set to point to a nul-terminated utf-8 encoded string containing
12112** the name of the table affected by the current change. The buffer remains
12113** valid until either sqlite3changeset_next() is called on the iterator
12114** or until the conflict-handler function returns.
12115**
12116** If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
12117** is an indirect change, or false (0) otherwise. See the documentation for
12118** [sqlite3session_indirect()] for a description of direct and indirect
12119** changes.
12120**
12121** If no error occurs, SQLITE_OK is returned. If an error does occur, an
12122** SQLite error code is returned. The values of the output variables may not
12123** be trusted in this case.
12124*/
12125SQLITE_API int sqlite3changeset_op(
12126  sqlite3_changeset_iter *pIter,  /* Iterator object */
12127  const char **pzTab,             /* OUT: Pointer to table name */
12128  int *pnCol,                     /* OUT: Number of columns in table */
12129  int *pOp,                       /* OUT: SQLITE_INSERT, DELETE or UPDATE */
12130  int *pbIndirect                 /* OUT: True for an 'indirect' change */
12131);
12132
12133/*
12134** CAPI3REF: Obtain The Primary Key Definition Of A Table
12135** METHOD: sqlite3_changeset_iter
12136**
12137** For each modified table, a changeset includes the following:
12138**
12139** <ul>
12140**   <li> The number of columns in the table, and
12141**   <li> Which of those columns make up the tables PRIMARY KEY.
12142** </ul>
12143**
12144** This function is used to find which columns comprise the PRIMARY KEY of
12145** the table modified by the change that iterator pIter currently points to.
12146** If successful, *pabPK is set to point to an array of nCol entries, where
12147** nCol is the number of columns in the table. Elements of *pabPK are set to
12148** 0x01 if the corresponding column is part of the tables primary key, or
12149** 0x00 if it is not.
12150**
12151** If argument pnCol is not NULL, then *pnCol is set to the number of columns
12152** in the table.
12153**
12154** If this function is called when the iterator does not point to a valid
12155** entry, SQLITE_MISUSE is returned and the output variables zeroed. Otherwise,
12156** SQLITE_OK is returned and the output variables populated as described
12157** above.
12158*/
12159SQLITE_API int sqlite3changeset_pk(
12160  sqlite3_changeset_iter *pIter,  /* Iterator object */
12161  unsigned char **pabPK,          /* OUT: Array of boolean - true for PK cols */
12162  int *pnCol                      /* OUT: Number of entries in output array */
12163);
12164
12165/*
12166** CAPI3REF: Obtain old.* Values From A Changeset Iterator
12167** METHOD: sqlite3_changeset_iter
12168**
12169** The pIter argument passed to this function may either be an iterator
12170** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator
12171** created by [sqlite3changeset_start()]. In the latter case, the most recent
12172** call to [sqlite3changeset_next()] must have returned SQLITE_ROW.
12173** Furthermore, it may only be called if the type of change that the iterator
12174** currently points to is either [SQLITE_DELETE] or [SQLITE_UPDATE]. Otherwise,
12175** this function returns [SQLITE_MISUSE] and sets *ppValue to NULL.
12176**
12177** Argument iVal must be greater than or equal to 0, and less than the number
12178** of columns in the table affected by the current change. Otherwise,
12179** [SQLITE_RANGE] is returned and *ppValue is set to NULL.
12180**
12181** If successful, this function sets *ppValue to point to a protected
12182** sqlite3_value object containing the iVal'th value from the vector of
12183** original row values stored as part of the UPDATE or DELETE change and
12184** returns SQLITE_OK. The name of the function comes from the fact that this
12185** is similar to the "old.*" columns available to update or delete triggers.
12186**
12187** If some other error occurs (e.g. an OOM condition), an SQLite error code
12188** is returned and *ppValue is set to NULL.
12189*/
12190SQLITE_API int sqlite3changeset_old(
12191  sqlite3_changeset_iter *pIter,  /* Changeset iterator */
12192  int iVal,                       /* Column number */
12193  sqlite3_value **ppValue         /* OUT: Old value (or NULL pointer) */
12194);
12195
12196/*
12197** CAPI3REF: Obtain new.* Values From A Changeset Iterator
12198** METHOD: sqlite3_changeset_iter
12199**
12200** The pIter argument passed to this function may either be an iterator
12201** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator
12202** created by [sqlite3changeset_start()]. In the latter case, the most recent
12203** call to [sqlite3changeset_next()] must have returned SQLITE_ROW.
12204** Furthermore, it may only be called if the type of change that the iterator
12205** currently points to is either [SQLITE_UPDATE] or [SQLITE_INSERT]. Otherwise,
12206** this function returns [SQLITE_MISUSE] and sets *ppValue to NULL.
12207**
12208** Argument iVal must be greater than or equal to 0, and less than the number
12209** of columns in the table affected by the current change. Otherwise,
12210** [SQLITE_RANGE] is returned and *ppValue is set to NULL.
12211**
12212** If successful, this function sets *ppValue to point to a protected
12213** sqlite3_value object containing the iVal'th value from the vector of
12214** new row values stored as part of the UPDATE or INSERT change and
12215** returns SQLITE_OK. If the change is an UPDATE and does not include
12216** a new value for the requested column, *ppValue is set to NULL and
12217** SQLITE_OK returned. The name of the function comes from the fact that
12218** this is similar to the "new.*" columns available to update or delete
12219** triggers.
12220**
12221** If some other error occurs (e.g. an OOM condition), an SQLite error code
12222** is returned and *ppValue is set to NULL.
12223*/
12224SQLITE_API int sqlite3changeset_new(
12225  sqlite3_changeset_iter *pIter,  /* Changeset iterator */
12226  int iVal,                       /* Column number */
12227  sqlite3_value **ppValue         /* OUT: New value (or NULL pointer) */
12228);
12229
12230/*
12231** CAPI3REF: Obtain Conflicting Row Values From A Changeset Iterator
12232** METHOD: sqlite3_changeset_iter
12233**
12234** This function should only be used with iterator objects passed to a
12235** conflict-handler callback by [sqlite3changeset_apply()] with either
12236** [SQLITE_CHANGESET_DATA] or [SQLITE_CHANGESET_CONFLICT]. If this function
12237** is called on any other iterator, [SQLITE_MISUSE] is returned and *ppValue
12238** is set to NULL.
12239**
12240** Argument iVal must be greater than or equal to 0, and less than the number
12241** of columns in the table affected by the current change. Otherwise,
12242** [SQLITE_RANGE] is returned and *ppValue is set to NULL.
12243**
12244** If successful, this function sets *ppValue to point to a protected
12245** sqlite3_value object containing the iVal'th value from the
12246** "conflicting row" associated with the current conflict-handler callback
12247** and returns SQLITE_OK.
12248**
12249** If some other error occurs (e.g. an OOM condition), an SQLite error code
12250** is returned and *ppValue is set to NULL.
12251*/
12252SQLITE_API int sqlite3changeset_conflict(
12253  sqlite3_changeset_iter *pIter,  /* Changeset iterator */
12254  int iVal,                       /* Column number */
12255  sqlite3_value **ppValue         /* OUT: Value from conflicting row */
12256);
12257
12258/*
12259** CAPI3REF: Determine The Number Of Foreign Key Constraint Violations
12260** METHOD: sqlite3_changeset_iter
12261**
12262** This function may only be called with an iterator passed to an
12263** SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case
12264** it sets the output variable to the total number of known foreign key
12265** violations in the destination database and returns SQLITE_OK.
12266**
12267** In all other cases this function returns SQLITE_MISUSE.
12268*/
12269SQLITE_API int sqlite3changeset_fk_conflicts(
12270  sqlite3_changeset_iter *pIter,  /* Changeset iterator */
12271  int *pnOut                      /* OUT: Number of FK violations */
12272);
12273
12274
12275/*
12276** CAPI3REF: Finalize A Changeset Iterator
12277** METHOD: sqlite3_changeset_iter
12278**
12279** This function is used to finalize an iterator allocated with
12280** [sqlite3changeset_start()].
12281**
12282** This function should only be called on iterators created using the
12283** [sqlite3changeset_start()] function. If an application calls this
12284** function with an iterator passed to a conflict-handler by
12285** [sqlite3changeset_apply()], [SQLITE_MISUSE] is immediately returned and the
12286** call has no effect.
12287**
12288** If an error was encountered within a call to an sqlite3changeset_xxx()
12289** function (for example an [SQLITE_CORRUPT] in [sqlite3changeset_next()] or an
12290** [SQLITE_NOMEM] in [sqlite3changeset_new()]) then an error code corresponding
12291** to that error is returned by this function. Otherwise, SQLITE_OK is
12292** returned. This is to allow the following pattern (pseudo-code):
12293**
12294** <pre>
12295**   sqlite3changeset_start();
12296**   while( SQLITE_ROW==sqlite3changeset_next() ){
12297**     // Do something with change.
12298**   }
12299**   rc = sqlite3changeset_finalize();
12300**   if( rc!=SQLITE_OK ){
12301**     // An error has occurred
12302**   }
12303** </pre>
12304*/
12305SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter);
12306
12307/*
12308** CAPI3REF: Invert A Changeset
12309**
12310** This function is used to "invert" a changeset object. Applying an inverted
12311** changeset to a database reverses the effects of applying the uninverted
12312** changeset. Specifically:
12313**
12314** <ul>
12315**   <li> Each DELETE change is changed to an INSERT, and
12316**   <li> Each INSERT change is changed to a DELETE, and
12317**   <li> For each UPDATE change, the old.* and new.* values are exchanged.
12318** </ul>
12319**
12320** This function does not change the order in which changes appear within
12321** the changeset. It merely reverses the sense of each individual change.
12322**
12323** If successful, a pointer to a buffer containing the inverted changeset
12324** is stored in *ppOut, the size of the same buffer is stored in *pnOut, and
12325** SQLITE_OK is returned. If an error occurs, both *pnOut and *ppOut are
12326** zeroed and an SQLite error code returned.
12327**
12328** It is the responsibility of the caller to eventually call sqlite3_free()
12329** on the *ppOut pointer to free the buffer allocation following a successful
12330** call to this function.
12331**
12332** WARNING/TODO: This function currently assumes that the input is a valid
12333** changeset. If it is not, the results are undefined.
12334*/
12335SQLITE_API int sqlite3changeset_invert(
12336  int nIn, const void *pIn,       /* Input changeset */
12337  int *pnOut, void **ppOut        /* OUT: Inverse of input */
12338);
12339
12340/*
12341** CAPI3REF: Concatenate Two Changeset Objects
12342**
12343** This function is used to concatenate two changesets, A and B, into a
12344** single changeset. The result is a changeset equivalent to applying
12345** changeset A followed by changeset B.
12346**
12347** This function combines the two input changesets using an
12348** sqlite3_changegroup object. Calling it produces similar results as the
12349** following code fragment:
12350**
12351** <pre>
12352**   sqlite3_changegroup *pGrp;
12353**   rc = sqlite3_changegroup_new(&pGrp);
12354**   if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA);
12355**   if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nB, pB);
12356**   if( rc==SQLITE_OK ){
12357**     rc = sqlite3changegroup_output(pGrp, pnOut, ppOut);
12358**   }else{
12359**     *ppOut = 0;
12360**     *pnOut = 0;
12361**   }
12362** </pre>
12363**
12364** Refer to the sqlite3_changegroup documentation below for details.
12365*/
12366SQLITE_API int sqlite3changeset_concat(
12367  int nA,                         /* Number of bytes in buffer pA */
12368  void *pA,                       /* Pointer to buffer containing changeset A */
12369  int nB,                         /* Number of bytes in buffer pB */
12370  void *pB,                       /* Pointer to buffer containing changeset B */
12371  int *pnOut,                     /* OUT: Number of bytes in output changeset */
12372  void **ppOut                    /* OUT: Buffer containing output changeset */
12373);
12374
12375/*
12376** CAPI3REF: Changegroup Handle
12377**
12378** A changegroup is an object used to combine two or more
12379** [changesets] or [patchsets]
12380*/
12381typedef struct sqlite3_changegroup sqlite3_changegroup;
12382
12383/*
12384** CAPI3REF: Create A New Changegroup Object
12385** CONSTRUCTOR: sqlite3_changegroup
12386**
12387** An sqlite3_changegroup object is used to combine two or more changesets
12388** (or patchsets) into a single changeset (or patchset). A single changegroup
12389** object may combine changesets or patchsets, but not both. The output is
12390** always in the same format as the input.
12391**
12392** If successful, this function returns SQLITE_OK and populates (*pp) with
12393** a pointer to a new sqlite3_changegroup object before returning. The caller
12394** should eventually free the returned object using a call to
12395** sqlite3changegroup_delete(). If an error occurs, an SQLite error code
12396** (i.e. SQLITE_NOMEM) is returned and *pp is set to NULL.
12397**
12398** The usual usage pattern for an sqlite3_changegroup object is as follows:
12399**
12400** <ul>
12401**   <li> It is created using a call to sqlite3changegroup_new().
12402**
12403**   <li> Zero or more changesets (or patchsets) are added to the object
12404**        by calling sqlite3changegroup_add().
12405**
12406**   <li> The result of combining all input changesets together is obtained
12407**        by the application via a call to sqlite3changegroup_output().
12408**
12409**   <li> The object is deleted using a call to sqlite3changegroup_delete().
12410** </ul>
12411**
12412** Any number of calls to add() and output() may be made between the calls to
12413** new() and delete(), and in any order.
12414**
12415** As well as the regular sqlite3changegroup_add() and
12416** sqlite3changegroup_output() functions, also available are the streaming
12417** versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm().
12418*/
12419SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp);
12420
12421/*
12422** CAPI3REF: Add a Schema to a Changegroup
12423** METHOD: sqlite3_changegroup_schema
12424**
12425** This method may be used to optionally enforce the rule that the changesets
12426** added to the changegroup handle must match the schema of database zDb
12427** ("main", "temp", or the name of an attached database). If
12428** sqlite3changegroup_add() is called to add a changeset that is not compatible
12429** with the configured schema, SQLITE_SCHEMA is returned and the changegroup
12430** object is left in an undefined state.
12431**
12432** A changeset schema is considered compatible with the database schema in
12433** the same way as for sqlite3changeset_apply(). Specifically, for each
12434** table in the changeset, there exists a database table with:
12435**
12436** <ul>
12437**   <li> The name identified by the changeset, and
12438**   <li> at least as many columns as recorded in the changeset, and
12439**   <li> the primary key columns in the same position as recorded in
12440**        the changeset.
12441** </ul>
12442**
12443** The output of the changegroup object always has the same schema as the
12444** database nominated using this function. In cases where changesets passed
12445** to sqlite3changegroup_add() have fewer columns than the corresponding table
12446** in the database schema, these are filled in using the default column
12447** values from the database schema. This makes it possible to combined
12448** changesets that have different numbers of columns for a single table
12449** within a changegroup, provided that they are otherwise compatible.
12450*/
12451SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb);
12452
12453/*
12454** CAPI3REF: Add A Changeset To A Changegroup
12455** METHOD: sqlite3_changegroup
12456**
12457** Add all changes within the changeset (or patchset) in buffer pData (size
12458** nData bytes) to the changegroup.
12459**
12460** If the buffer contains a patchset, then all prior calls to this function
12461** on the same changegroup object must also have specified patchsets. Or, if
12462** the buffer contains a changeset, so must have the earlier calls to this
12463** function. Otherwise, SQLITE_ERROR is returned and no changes are added
12464** to the changegroup.
12465**
12466** Rows within the changeset and changegroup are identified by the values in
12467** their PRIMARY KEY columns. A change in the changeset is considered to
12468** apply to the same row as a change already present in the changegroup if
12469** the two rows have the same primary key.
12470**
12471** Changes to rows that do not already appear in the changegroup are
12472** simply copied into it. Or, if both the new changeset and the changegroup
12473** contain changes that apply to a single row, the final contents of the
12474** changegroup depends on the type of each change, as follows:
12475**
12476** <table border=1 style="margin-left:8ex;margin-right:8ex">
12477**   <tr><th style="white-space:pre">Existing Change  </th>
12478**       <th style="white-space:pre">New Change       </th>
12479**       <th>Output Change
12480**   <tr><td>INSERT <td>INSERT <td>
12481**       The new change is ignored. This case does not occur if the new
12482**       changeset was recorded immediately after the changesets already
12483**       added to the changegroup.
12484**   <tr><td>INSERT <td>UPDATE <td>
12485**       The INSERT change remains in the changegroup. The values in the
12486**       INSERT change are modified as if the row was inserted by the
12487**       existing change and then updated according to the new change.
12488**   <tr><td>INSERT <td>DELETE <td>
12489**       The existing INSERT is removed from the changegroup. The DELETE is
12490**       not added.
12491**   <tr><td>UPDATE <td>INSERT <td>
12492**       The new change is ignored. This case does not occur if the new
12493**       changeset was recorded immediately after the changesets already
12494**       added to the changegroup.
12495**   <tr><td>UPDATE <td>UPDATE <td>
12496**       The existing UPDATE remains within the changegroup. It is amended
12497**       so that the accompanying values are as if the row was updated once
12498**       by the existing change and then again by the new change.
12499**   <tr><td>UPDATE <td>DELETE <td>
12500**       The existing UPDATE is replaced by the new DELETE within the
12501**       changegroup.
12502**   <tr><td>DELETE <td>INSERT <td>
12503**       If one or more of the column values in the row inserted by the
12504**       new change differ from those in the row deleted by the existing
12505**       change, the existing DELETE is replaced by an UPDATE within the
12506**       changegroup. Otherwise, if the inserted row is exactly the same
12507**       as the deleted row, the existing DELETE is simply discarded.
12508**   <tr><td>DELETE <td>UPDATE <td>
12509**       The new change is ignored. This case does not occur if the new
12510**       changeset was recorded immediately after the changesets already
12511**       added to the changegroup.
12512**   <tr><td>DELETE <td>DELETE <td>
12513**       The new change is ignored. This case does not occur if the new
12514**       changeset was recorded immediately after the changesets already
12515**       added to the changegroup.
12516** </table>
12517**
12518** If the new changeset contains changes to a table that is already present
12519** in the changegroup, then the number of columns and the position of the
12520** primary key columns for the table must be consistent. If this is not the
12521** case, this function fails with SQLITE_SCHEMA. Except, if the changegroup
12522** object has been configured with a database schema using the
12523** sqlite3changegroup_schema() API, then it is possible to combine changesets
12524** with different numbers of columns for a single table, provided that
12525** they are otherwise compatible.
12526**
12527** If the input changeset appears to be corrupt and the corruption is
12528** detected, SQLITE_CORRUPT is returned. Or, if an out-of-memory condition
12529** occurs during processing, this function returns SQLITE_NOMEM.
12530**
12531** In all cases, if an error occurs the state of the final contents of the
12532** changegroup is undefined. If no error occurs, SQLITE_OK is returned.
12533*/
12534SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
12535
12536/*
12537** CAPI3REF: Add A Single Change To A Changegroup
12538** METHOD: sqlite3_changegroup
12539**
12540** This function adds the single change currently indicated by the iterator
12541** passed as the second argument to the changegroup object. The rules for
12542** adding the change are just as described for [sqlite3changegroup_add()].
12543**
12544** If the change is successfully added to the changegroup, SQLITE_OK is
12545** returned. Otherwise, an SQLite error code is returned.
12546**
12547** The iterator must point to a valid entry when this function is called.
12548** If it does not, SQLITE_ERROR is returned and no change is added to the
12549** changegroup. Additionally, the iterator must not have been opened with
12550** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also
12551** returned.
12552*/
12553SQLITE_API int sqlite3changegroup_add_change(
12554  sqlite3_changegroup*,
12555  sqlite3_changeset_iter*
12556);
12557
12558
12559
12560/*
12561** CAPI3REF: Obtain A Composite Changeset From A Changegroup
12562** METHOD: sqlite3_changegroup
12563**
12564** Obtain a buffer containing a changeset (or patchset) representing the
12565** current contents of the changegroup. If the inputs to the changegroup
12566** were themselves changesets, the output is a changeset. Or, if the
12567** inputs were patchsets, the output is also a patchset.
12568**
12569** As with the output of the sqlite3session_changeset() and
12570** sqlite3session_patchset() functions, all changes related to a single
12571** table are grouped together in the output of this function. Tables appear
12572** in the same order as for the very first changeset added to the changegroup.
12573** If the second or subsequent changesets added to the changegroup contain
12574** changes for tables that do not appear in the first changeset, they are
12575** appended onto the end of the output changeset, again in the order in
12576** which they are first encountered.
12577**
12578** If an error occurs, an SQLite error code is returned and the output
12579** variables (*pnData) and (*ppData) are set to 0. Otherwise, SQLITE_OK
12580** is returned and the output variables are set to the size of and a
12581** pointer to the output buffer, respectively. In this case it is the
12582** responsibility of the caller to eventually free the buffer using a
12583** call to sqlite3_free().
12584*/
12585SQLITE_API int sqlite3changegroup_output(
12586  sqlite3_changegroup*,
12587  int *pnData,                    /* OUT: Size of output buffer in bytes */
12588  void **ppData                   /* OUT: Pointer to output buffer */
12589);
12590
12591/*
12592** CAPI3REF: Delete A Changegroup Object
12593** DESTRUCTOR: sqlite3_changegroup
12594*/
12595SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*);
12596
12597/*
12598** CAPI3REF: Apply A Changeset To A Database
12599**
12600** Apply a changeset or patchset to a database. These functions attempt to
12601** update the "main" database attached to handle db with the changes found in
12602** the changeset passed via the second and third arguments.
12603**
12604** All changes made by these functions are enclosed in a savepoint transaction.
12605** If any other error (aside from a constraint failure when attempting to
12606** write to the target database) occurs, then the savepoint transaction is
12607** rolled back, restoring the target database to its original state, and an
12608** SQLite error code returned. Additionally, starting with version 3.51.0,
12609** an error code and error message that may be accessed using the
12610** [sqlite3_errcode()] and [sqlite3_errmsg()] APIs are left in the database
12611** handle.
12612**
12613** The fourth argument (xFilter) passed to these functions is the "filter
12614** callback". This may be passed NULL, in which case all changes in the
12615** changeset are applied to the database. For sqlite3changeset_apply() and
12616** sqlite3_changeset_apply_v2(), if it is not NULL, then it is invoked once
12617** for each table affected by at least one change in the changeset. In this
12618** case the table name is passed as the second argument, and a copy of
12619** the context pointer passed as the sixth argument to apply() or apply_v2()
12620** as the first. If the "filter callback" returns zero, then no attempt is
12621** made to apply any changes to the table. Otherwise, if the return value is
12622** non-zero, all changes related to the table are attempted.
12623**
12624** For sqlite3_changeset_apply_v3(), the xFilter callback is invoked once
12625** per change. The second argument in this case is an sqlite3_changeset_iter
12626** that may be queried using the usual APIs for the details of the current
12627** change. If the "filter callback" returns zero in this case, then no attempt
12628** is made to apply the current change. If it returns non-zero, the change
12629** is applied.
12630**
12631** For each table that is not excluded by the filter callback, this function
12632** tests that the target database contains a compatible table. A table is
12633** considered compatible if all of the following are true:
12634**
12635** <ul>
12636**   <li> The table has the same name as the name recorded in the
12637**        changeset, and
12638**   <li> The table has at least as many columns as recorded in the
12639**        changeset, and
12640**   <li> The table has primary key columns in the same position as
12641**        recorded in the changeset.
12642** </ul>
12643**
12644** If there is no compatible table, it is not an error, but none of the
12645** changes associated with the table are applied. A warning message is issued
12646** via the sqlite3_log() mechanism with the error code SQLITE_SCHEMA. At most
12647** one such warning is issued for each table in the changeset.
12648**
12649** For each change for which there is a compatible table, an attempt is made
12650** to modify the table contents according to each UPDATE, INSERT or DELETE
12651** change that is not excluded by a filter callback. If a change cannot be
12652** applied cleanly, the conflict handler function passed as the fifth argument
12653** to sqlite3changeset_apply() may be invoked. A description of exactly when
12654** the conflict handler is invoked for each type of change is below.
12655**
12656** Unlike the xFilter argument, xConflict may not be passed NULL. The results
12657** of passing anything other than a valid function pointer as the xConflict
12658** argument are undefined.
12659**
12660** Each time the conflict handler function is invoked, it must return one
12661** of [SQLITE_CHANGESET_OMIT], [SQLITE_CHANGESET_ABORT] or
12662** [SQLITE_CHANGESET_REPLACE]. SQLITE_CHANGESET_REPLACE may only be returned
12663** if the second argument passed to the conflict handler is either
12664** SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If the conflict-handler
12665** returns an illegal value, any changes already made are rolled back and
12666** the call to sqlite3changeset_apply() returns SQLITE_MISUSE. Different
12667** actions are taken by sqlite3changeset_apply() depending on the value
12668** returned by each invocation of the conflict-handler function. Refer to
12669** the documentation for the three
12670** [SQLITE_CHANGESET_OMIT|available return values] for details.
12671**
12672** <dl>
12673** <dt>DELETE Changes<dd>
12674**   For each DELETE change, the function checks if the target database
12675**   contains a row with the same primary key value (or values) as the
12676**   original row values stored in the changeset. If it does, and the values
12677**   stored in all non-primary key columns also match the values stored in
12678**   the changeset the row is deleted from the target database.
12679**
12680**   If a row with matching primary key values is found, but one or more of
12681**   the non-primary key fields contains a value different from the original
12682**   row value stored in the changeset, the conflict-handler function is
12683**   invoked with [SQLITE_CHANGESET_DATA] as the second argument. If the
12684**   database table has more columns than are recorded in the changeset,
12685**   only the values of those non-primary key fields are compared against
12686**   the current database contents - any trailing database table columns
12687**   are ignored.
12688**
12689**   If no row with matching primary key values is found in the database,
12690**   the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND]
12691**   passed as the second argument.
12692**
12693**   If the DELETE operation is attempted, but SQLite returns SQLITE_CONSTRAINT
12694**   (which can only happen if a foreign key constraint is violated), the
12695**   conflict-handler function is invoked with [SQLITE_CHANGESET_CONSTRAINT]
12696**   passed as the second argument. This includes the case where the DELETE
12697**   operation is attempted because an earlier call to the conflict handler
12698**   function returned [SQLITE_CHANGESET_REPLACE].
12699**
12700** <dt>INSERT Changes<dd>
12701**   For each INSERT change, an attempt is made to insert the new row into
12702**   the database. If the changeset row contains fewer fields than the
12703**   database table, the trailing fields are populated with their default
12704**   values.
12705**
12706**   If the attempt to insert the row fails because the database already
12707**   contains a row with the same primary key values, the conflict handler
12708**   function is invoked with the second argument set to
12709**   [SQLITE_CHANGESET_CONFLICT].
12710**
12711**   If the attempt to insert the row fails because of some other constraint
12712**   violation (e.g. NOT NULL or UNIQUE), the conflict handler function is
12713**   invoked with the second argument set to [SQLITE_CHANGESET_CONSTRAINT].
12714**   This includes the case where the INSERT operation is re-attempted because
12715**   an earlier call to the conflict handler function returned
12716**   [SQLITE_CHANGESET_REPLACE].
12717**
12718** <dt>UPDATE Changes<dd>
12719**   For each UPDATE change, the function checks if the target database
12720**   contains a row with the same primary key value (or values) as the
12721**   original row values stored in the changeset. If it does, and the values
12722**   stored in all modified non-primary key columns also match the values
12723**   stored in the changeset the row is updated within the target database.
12724**
12725**   If a row with matching primary key values is found, but one or more of
12726**   the modified non-primary key fields contains a value different from an
12727**   original row value stored in the changeset, the conflict-handler function
12728**   is invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since
12729**   UPDATE changes only contain values for non-primary key fields that are
12730**   to be modified, only those fields need to match the original values to
12731**   avoid the SQLITE_CHANGESET_DATA conflict-handler callback.
12732**
12733**   If no row with matching primary key values is found in the database,
12734**   the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND]
12735**   passed as the second argument.
12736**
12737**   If the UPDATE operation is attempted, but SQLite returns
12738**   SQLITE_CONSTRAINT, the conflict-handler function is invoked with
12739**   [SQLITE_CHANGESET_CONSTRAINT] passed as the second argument.
12740**   This includes the case where the UPDATE operation is attempted after
12741**   an earlier call to the conflict handler function returned
12742**   [SQLITE_CHANGESET_REPLACE].
12743** </dl>
12744**
12745** It is safe to execute SQL statements, including those that write to the
12746** table that the callback related to, from within the xConflict callback.
12747** This can be used to further customize the application's conflict
12748** resolution strategy.
12749**
12750** If the output parameters (ppRebase) and (pnRebase) are non-NULL and
12751** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2()
12752** may set (*ppRebase) to point to a "rebase" that may be used with the
12753** sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase)
12754** is set to the size of the buffer in bytes. It is the responsibility of the
12755** caller to eventually free any such buffer using sqlite3_free(). The buffer
12756** is only allocated and populated if one or more conflicts were encountered
12757** while applying the patchset. See comments surrounding the sqlite3_rebaser
12758** APIs for further details.
12759**
12760** The behavior of sqlite3changeset_apply_v2() and its streaming equivalent
12761** may be modified by passing a combination of
12762** [SQLITE_CHANGESETAPPLY_NOSAVEPOINT | supported flags] as the 9th parameter.
12763**
12764** Note that the sqlite3changeset_apply_v2() API is still <b>experimental</b>
12765** and therefore subject to change.
12766*/
12767SQLITE_API int sqlite3changeset_apply(
12768  sqlite3 *db,                    /* Apply change to "main" db of this handle */
12769  int nChangeset,                 /* Size of changeset in bytes */
12770  void *pChangeset,               /* Changeset blob */
12771  int(*xFilter)(
12772    void *pCtx,                   /* Copy of sixth arg to _apply() */
12773    const char *zTab              /* Table name */
12774  ),
12775  int(*xConflict)(
12776    void *pCtx,                   /* Copy of sixth arg to _apply() */
12777    int eConflict,                /* DATA, MISSING, CONFLICT, CONSTRAINT */
12778    sqlite3_changeset_iter *p     /* Handle describing change and conflict */
12779  ),
12780  void *pCtx                      /* First argument passed to xConflict */
12781);
12782SQLITE_API int sqlite3changeset_apply_v2(
12783  sqlite3 *db,                    /* Apply change to "main" db of this handle */
12784  int nChangeset,                 /* Size of changeset in bytes */
12785  void *pChangeset,               /* Changeset blob */
12786  int(*xFilter)(
12787    void *pCtx,                   /* Copy of sixth arg to _apply() */
12788    const char *zTab              /* Table name */
12789  ),
12790  int(*xConflict)(
12791    void *pCtx,                   /* Copy of sixth arg to _apply() */
12792    int eConflict,                /* DATA, MISSING, CONFLICT, CONSTRAINT */
12793    sqlite3_changeset_iter *p     /* Handle describing change and conflict */
12794  ),
12795  void *pCtx,                     /* First argument passed to xConflict */
12796  void **ppRebase, int *pnRebase, /* OUT: Rebase data */
12797  int flags                       /* SESSION_CHANGESETAPPLY_* flags */
12798);
12799SQLITE_API int sqlite3changeset_apply_v3(
12800  sqlite3 *db,                    /* Apply change to "main" db of this handle */
12801  int nChangeset,                 /* Size of changeset in bytes */
12802  void *pChangeset,               /* Changeset blob */
12803  int(*xFilter)(
12804    void *pCtx,                   /* Copy of sixth arg to _apply() */
12805    sqlite3_changeset_iter *p     /* Handle describing change */
12806  ),
12807  int(*xConflict)(
12808    void *pCtx,                   /* Copy of sixth arg to _apply() */
12809    int eConflict,                /* DATA, MISSING, CONFLICT, CONSTRAINT */
12810    sqlite3_changeset_iter *p     /* Handle describing change and conflict */
12811  ),
12812  void *pCtx,                     /* First argument passed to xConflict */
12813  void **ppRebase, int *pnRebase, /* OUT: Rebase data */
12814  int flags                       /* SESSION_CHANGESETAPPLY_* flags */
12815);
12816
12817/*
12818** CAPI3REF: Flags for sqlite3changeset_apply_v2
12819**
12820** The following flags may passed via the 9th parameter to
12821** [sqlite3changeset_apply_v2] and [sqlite3changeset_apply_v2_strm]:
12822**
12823** <dl>
12824** <dt>SQLITE_CHANGESETAPPLY_NOSAVEPOINT <dd>
12825**   Usually, the sessions module encloses all operations performed by
12826**   a single call to apply_v2() or apply_v2_strm() in a [SAVEPOINT]. The
12827**   SAVEPOINT is committed if the changeset or patchset is successfully
12828**   applied, or rolled back if an error occurs. Specifying this flag
12829**   causes the sessions module to omit this savepoint. In this case, if the
12830**   caller has an open transaction or savepoint when apply_v2() is called,
12831**   it may revert the partially applied changeset by rolling it back.
12832**
12833** <dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
12834**   Invert the changeset before applying it. This is equivalent to inverting
12835**   a changeset using sqlite3changeset_invert() before applying it. It is
12836**   an error to specify this flag with a patchset.
12837**
12838** <dt>SQLITE_CHANGESETAPPLY_IGNORENOOP <dd>
12839**   Do not invoke the conflict handler callback for any changes that
12840**   would not actually modify the database even if they were applied.
12841**   Specifically, this means that the conflict handler is not invoked
12842**   for:
12843**    <ul>
12844**    <li>a delete change if the row being deleted cannot be found,
12845**    <li>an update change if the modified fields are already set to
12846**        their new values in the conflicting row, or
12847**    <li>an insert change if all fields of the conflicting row match
12848**        the row being inserted.
12849**    </ul>
12850**
12851** <dt>SQLITE_CHANGESETAPPLY_FKNOACTION <dd>
12852**   If this flag it set, then all foreign key constraints in the target
12853**   database behave as if they were declared with "ON UPDATE NO ACTION ON
12854**   DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL
12855**   or SET DEFAULT.
12856*/
12857#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT   0x0001
12858#define SQLITE_CHANGESETAPPLY_INVERT        0x0002
12859#define SQLITE_CHANGESETAPPLY_IGNORENOOP    0x0004
12860#define SQLITE_CHANGESETAPPLY_FKNOACTION    0x0008
12861
12862/*
12863** CAPI3REF: Constants Passed To The Conflict Handler
12864**
12865** Values that may be passed as the second argument to a conflict-handler.
12866**
12867** <dl>
12868** <dt>SQLITE_CHANGESET_DATA<dd>
12869**   The conflict handler is invoked with CHANGESET_DATA as the second argument
12870**   when processing a DELETE or UPDATE change if a row with the required
12871**   PRIMARY KEY fields is present in the database, but one or more other
12872**   (non primary-key) fields modified by the update do not contain the
12873**   expected "before" values.
12874**
12875**   The conflicting row, in this case, is the database row with the matching
12876**   primary key.
12877**
12878** <dt>SQLITE_CHANGESET_NOTFOUND<dd>
12879**   The conflict handler is invoked with CHANGESET_NOTFOUND as the second
12880**   argument when processing a DELETE or UPDATE change if a row with the
12881**   required PRIMARY KEY fields is not present in the database.
12882**
12883**   There is no conflicting row in this case. The results of invoking the
12884**   sqlite3changeset_conflict() API are undefined.
12885**
12886** <dt>SQLITE_CHANGESET_CONFLICT<dd>
12887**   CHANGESET_CONFLICT is passed as the second argument to the conflict
12888**   handler while processing an INSERT change if the operation would result
12889**   in duplicate primary key values.
12890**
12891**   The conflicting row in this case is the database row with the matching
12892**   primary key.
12893**
12894** <dt>SQLITE_CHANGESET_FOREIGN_KEY<dd>
12895**   If foreign key handling is enabled, and applying a changeset leaves the
12896**   database in a state containing foreign key violations, the conflict
12897**   handler is invoked with CHANGESET_FOREIGN_KEY as the second argument
12898**   exactly once before the changeset is committed. If the conflict handler
12899**   returns CHANGESET_OMIT, the changes, including those that caused the
12900**   foreign key constraint violation, are committed. Or, if it returns
12901**   CHANGESET_ABORT, the changeset is rolled back.
12902**
12903**   No current or conflicting row information is provided. The only function
12904**   it is possible to call on the supplied sqlite3_changeset_iter handle
12905**   is sqlite3changeset_fk_conflicts().
12906**
12907** <dt>SQLITE_CHANGESET_CONSTRAINT<dd>
12908**   If any other constraint violation occurs while applying a change (i.e.
12909**   a UNIQUE, CHECK or NOT NULL constraint), the conflict handler is
12910**   invoked with CHANGESET_CONSTRAINT as the second argument.
12911**
12912**   There is no conflicting row in this case. The results of invoking the
12913**   sqlite3changeset_conflict() API are undefined.
12914**
12915** </dl>
12916*/
12917#define SQLITE_CHANGESET_DATA        1
12918#define SQLITE_CHANGESET_NOTFOUND    2
12919#define SQLITE_CHANGESET_CONFLICT    3
12920#define SQLITE_CHANGESET_CONSTRAINT  4
12921#define SQLITE_CHANGESET_FOREIGN_KEY 5
12922
12923/*
12924** CAPI3REF: Constants Returned By The Conflict Handler
12925**
12926** A conflict handler callback must return one of the following three values.
12927**
12928** <dl>
12929** <dt>SQLITE_CHANGESET_OMIT<dd>
12930**   If a conflict handler returns this value no special action is taken. The
12931**   change that caused the conflict is not applied. The session module
12932**   continues to the next change in the changeset.
12933**
12934** <dt>SQLITE_CHANGESET_REPLACE<dd>
12935**   This value may only be returned if the second argument to the conflict
12936**   handler was SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If this
12937**   is not the case, any changes applied so far are rolled back and the
12938**   call to sqlite3changeset_apply() returns SQLITE_MISUSE.
12939**
12940**   If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_DATA conflict
12941**   handler, then the conflicting row is either updated or deleted, depending
12942**   on the type of change.
12943**
12944**   If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_CONFLICT conflict
12945**   handler, then the conflicting row is removed from the database and a
12946**   second attempt to apply the change is made. If this second attempt fails,
12947**   the original row is restored to the database before continuing.
12948**
12949** <dt>SQLITE_CHANGESET_ABORT<dd>
12950**   If this value is returned, any changes applied so far are rolled back
12951**   and the call to sqlite3changeset_apply() returns SQLITE_ABORT.
12952** </dl>
12953*/
12954#define SQLITE_CHANGESET_OMIT       0
12955#define SQLITE_CHANGESET_REPLACE    1
12956#define SQLITE_CHANGESET_ABORT      2
12957
12958/*
12959** CAPI3REF: Rebasing changesets
12960** EXPERIMENTAL
12961**
12962** Suppose there is a site hosting a database in state S0. And that
12963** modifications are made that move that database to state S1 and a
12964** changeset recorded (the "local" changeset). Then, a changeset based
12965** on S0 is received from another site (the "remote" changeset) and
12966** applied to the database. The database is then in state
12967** (S1+"remote"), where the exact state depends on any conflict
12968** resolution decisions (OMIT or REPLACE) made while applying "remote".
12969** Rebasing a changeset is to update it to take those conflict
12970** resolution decisions into account, so that the same conflicts
12971** do not have to be resolved elsewhere in the network.
12972**
12973** For example, if both the local and remote changesets contain an
12974** INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)":
12975**
12976**   local:  INSERT INTO t1 VALUES(1, 'v1');
12977**   remote: INSERT INTO t1 VALUES(1, 'v2');
12978**
12979** and the conflict resolution is REPLACE, then the INSERT change is
12980** removed from the local changeset (it was overridden). Or, if the
12981** conflict resolution was "OMIT", then the local changeset is modified
12982** to instead contain:
12983**
12984**           UPDATE t1 SET b = 'v2' WHERE a=1;
12985**
12986** Changes within the local changeset are rebased as follows:
12987**
12988** <dl>
12989** <dt>Local INSERT<dd>
12990**   This may only conflict with a remote INSERT. If the conflict
12991**   resolution was OMIT, then add an UPDATE change to the rebased
12992**   changeset. Or, if the conflict resolution was REPLACE, add
12993**   nothing to the rebased changeset.
12994**
12995** <dt>Local DELETE<dd>
12996**   This may conflict with a remote UPDATE or DELETE. In both cases the
12997**   only possible resolution is OMIT. If the remote operation was a
12998**   DELETE, then add no change to the rebased changeset. If the remote
12999**   operation was an UPDATE, then the old.* fields of change are updated
13000**   to reflect the new.* values in the UPDATE.
13001**
13002** <dt>Local UPDATE<dd>
13003**   This may conflict with a remote UPDATE or DELETE. If it conflicts
13004**   with a DELETE, and the conflict resolution was OMIT, then the update
13005**   is changed into an INSERT. Any undefined values in the new.* record
13006**   from the update change are filled in using the old.* values from
13007**   the conflicting DELETE. Or, if the conflict resolution was REPLACE,
13008**   the UPDATE change is simply omitted from the rebased changeset.
13009**
13010**   If conflict is with a remote UPDATE and the resolution is OMIT, then
13011**   the old.* values are rebased using the new.* values in the remote
13012**   change. Or, if the resolution is REPLACE, then the change is copied
13013**   into the rebased changeset with updates to columns also updated by
13014**   the conflicting remote UPDATE removed. If this means no columns would
13015**   be updated, the change is omitted.
13016** </dl>
13017**
13018** A local change may be rebased against multiple remote changes
13019** simultaneously. If a single key is modified by multiple remote
13020** changesets, they are combined as follows before the local changeset
13021** is rebased:
13022**
13023** <ul>
13024**    <li> If there has been one or more REPLACE resolutions on a
13025**         key, it is rebased according to a REPLACE.
13026**
13027**    <li> If there have been no REPLACE resolutions on a key, then
13028**         the local changeset is rebased according to the most recent
13029**         of the OMIT resolutions.
13030** </ul>
13031**
13032** Note that conflict resolutions from multiple remote changesets are
13033** combined on a per-field basis, not per-row. This means that in the
13034** case of multiple remote UPDATE operations, some fields of a single
13035** local change may be rebased for REPLACE while others are rebased for
13036** OMIT.
13037**
13038** In order to rebase a local changeset, the remote changeset must first
13039** be applied to the local database using sqlite3changeset_apply_v2() and
13040** the buffer of rebase information captured. Then:
13041**
13042** <ol>
13043**   <li> An sqlite3_rebaser object is created by calling
13044**        sqlite3rebaser_create().
13045**   <li> The new object is configured with the rebase buffer obtained from
13046**        sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure().
13047**        If the local changeset is to be rebased against multiple remote
13048**        changesets, then sqlite3rebaser_configure() should be called
13049**        multiple times, in the same order that the multiple
13050**        sqlite3changeset_apply_v2() calls were made.
13051**   <li> Each local changeset is rebased by calling sqlite3rebaser_rebase().
13052**   <li> The sqlite3_rebaser object is deleted by calling
13053**        sqlite3rebaser_delete().
13054** </ol>
13055*/
13056typedef struct sqlite3_rebaser sqlite3_rebaser;
13057
13058/*
13059** CAPI3REF: Create a changeset rebaser object.
13060** EXPERIMENTAL
13061**
13062** Allocate a new changeset rebaser object. If successful, set (*ppNew) to
13063** point to the new object and return SQLITE_OK. Otherwise, if an error
13064** occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew)
13065** to NULL.
13066*/
13067SQLITE_API int sqlite3rebaser_create(sqlite3_rebaser **ppNew);
13068
13069/*
13070** CAPI3REF: Configure a changeset rebaser object.
13071** EXPERIMENTAL
13072**
13073** Configure the changeset rebaser object to rebase changesets according
13074** to the conflict resolutions described by buffer pRebase (size nRebase
13075** bytes), which must have been obtained from a previous call to
13076** sqlite3changeset_apply_v2().
13077*/
13078SQLITE_API int sqlite3rebaser_configure(
13079  sqlite3_rebaser*,
13080  int nRebase, const void *pRebase
13081);
13082
13083/*
13084** CAPI3REF: Rebase a changeset
13085** EXPERIMENTAL
13086**
13087** Argument pIn must point to a buffer containing a changeset nIn bytes
13088** in size. This function allocates and populates a buffer with a copy
13089** of the changeset rebased according to the configuration of the
13090** rebaser object passed as the first argument. If successful, (*ppOut)
13091** is set to point to the new buffer containing the rebased changeset and
13092** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
13093** responsibility of the caller to eventually free the new buffer using
13094** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
13095** are set to zero and an SQLite error code returned.
13096*/
13097SQLITE_API int sqlite3rebaser_rebase(
13098  sqlite3_rebaser*,
13099  int nIn, const void *pIn,
13100  int *pnOut, void **ppOut
13101);
13102
13103/*
13104** CAPI3REF: Delete a changeset rebaser object.
13105** EXPERIMENTAL
13106**
13107** Delete the changeset rebaser object and all associated resources. There
13108** should be one call to this function for each successful invocation
13109** of sqlite3rebaser_create().
13110*/
13111SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p);
13112
13113/*
13114** CAPI3REF: Streaming Versions of API functions.
13115**
13116** The six streaming API xxx_strm() functions serve similar purposes to the
13117** corresponding non-streaming API functions:
13118**
13119** <table border=1 style="margin-left:8ex;margin-right:8ex">
13120**   <tr><th>Streaming function<th>Non-streaming equivalent</th>
13121**   <tr><td>sqlite3changeset_apply_strm<td>[sqlite3changeset_apply]
13122**   <tr><td>sqlite3changeset_apply_strm_v2<td>[sqlite3changeset_apply_v2]
13123**   <tr><td>sqlite3changeset_concat_strm<td>[sqlite3changeset_concat]
13124**   <tr><td>sqlite3changeset_invert_strm<td>[sqlite3changeset_invert]
13125**   <tr><td>sqlite3changeset_start_strm<td>[sqlite3changeset_start]
13126**   <tr><td>sqlite3session_changeset_strm<td>[sqlite3session_changeset]
13127**   <tr><td>sqlite3session_patchset_strm<td>[sqlite3session_patchset]
13128** </table>
13129**
13130** Non-streaming functions that accept changesets (or patchsets) as input
13131** require that the entire changeset be stored in a single buffer in memory.
13132** Similarly, those that return a changeset or patchset do so by returning
13133** a pointer to a single large buffer allocated using sqlite3_malloc().
13134** Normally this is convenient. However, if an application running in a
13135** low-memory environment is required to handle very large changesets, the
13136** large contiguous memory allocations required can become onerous.
13137**
13138** In order to avoid this problem, instead of a single large buffer, input
13139** is passed to a streaming API functions by way of a callback function that
13140** the sessions module invokes to incrementally request input data as it is
13141** required. In all cases, a pair of API function parameters such as
13142**
13143**  <pre>
13144**  &nbsp;     int nChangeset,
13145**  &nbsp;     void *pChangeset,
13146**  </pre>
13147**
13148** Is replaced by:
13149**
13150**  <pre>
13151**  &nbsp;     int (*xInput)(void *pIn, void *pData, int *pnData),
13152**  &nbsp;     void *pIn,
13153**  </pre>
13154**
13155** Each time the xInput callback is invoked by the sessions module, the first
13156** argument passed is a copy of the supplied pIn context pointer. The second
13157** argument, pData, points to a buffer (*pnData) bytes in size. Assuming no
13158** error occurs the xInput method should copy up to (*pnData) bytes of data
13159** into the buffer and set (*pnData) to the actual number of bytes copied
13160** before returning SQLITE_OK. If the input is completely exhausted, (*pnData)
13161** should be set to zero to indicate this. Or, if an error occurs, an SQLite
13162** error code should be returned. In all cases, if an xInput callback returns
13163** an error, all processing is abandoned and the streaming API function
13164** returns a copy of the error code to the caller.
13165**
13166** In the case of sqlite3changeset_start_strm(), the xInput callback may be
13167** invoked by the sessions module at any point during the lifetime of the
13168** iterator. If such an xInput callback returns an error, the iterator enters
13169** an error state, whereby all subsequent calls to iterator functions
13170** immediately fail with the same error code as returned by xInput.
13171**
13172** Similarly, streaming API functions that return changesets (or patchsets)
13173** return them in chunks by way of a callback function instead of via a
13174** pointer to a single large buffer. In this case, a pair of parameters such
13175** as:
13176**
13177**  <pre>
13178**  &nbsp;     int *pnChangeset,
13179**  &nbsp;     void **ppChangeset,
13180**  </pre>
13181**
13182** Is replaced by:
13183**
13184**  <pre>
13185**  &nbsp;     int (*xOutput)(void *pOut, const void *pData, int nData),
13186**  &nbsp;     void *pOut
13187**  </pre>
13188**
13189** The xOutput callback is invoked zero or more times to return data to
13190** the application. The first parameter passed to each call is a copy of the
13191** pOut pointer supplied by the application. The second parameter, pData,
13192** points to a buffer nData bytes in size containing the chunk of output
13193** data being returned. If the xOutput callback successfully processes the
13194** supplied data, it should return SQLITE_OK to indicate success. Otherwise,
13195** it should return some other SQLite error code. In this case processing
13196** is immediately abandoned and the streaming API function returns a copy
13197** of the xOutput error code to the application.
13198**
13199** The sessions module never invokes an xOutput callback with the third
13200** parameter set to a value less than or equal to zero. Other than this,
13201** no guarantees are made as to the size of the chunks of data returned.
13202*/
13203SQLITE_API int sqlite3changeset_apply_strm(
13204  sqlite3 *db,                    /* Apply change to "main" db of this handle */
13205  int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
13206  void *pIn,                                          /* First arg for xInput */
13207  int(*xFilter)(
13208    void *pCtx,                   /* Copy of sixth arg to _apply() */
13209    const char *zTab              /* Table name */
13210  ),
13211  int(*xConflict)(
13212    void *pCtx,                   /* Copy of sixth arg to _apply() */
13213    int eConflict,                /* DATA, MISSING, CONFLICT, CONSTRAINT */
13214    sqlite3_changeset_iter *p     /* Handle describing change and conflict */
13215  ),
13216  void *pCtx                      /* First argument passed to xConflict */
13217);
13218SQLITE_API int sqlite3changeset_apply_v2_strm(
13219  sqlite3 *db,                    /* Apply change to "main" db of this handle */
13220  int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
13221  void *pIn,                                          /* First arg for xInput */
13222  int(*xFilter)(
13223    void *pCtx,                   /* Copy of sixth arg to _apply() */
13224    const char *zTab              /* Table name */
13225  ),
13226  int(*xConflict)(
13227    void *pCtx,                   /* Copy of sixth arg to _apply() */
13228    int eConflict,                /* DATA, MISSING, CONFLICT, CONSTRAINT */
13229    sqlite3_changeset_iter *p     /* Handle describing change and conflict */
13230  ),
13231  void *pCtx,                     /* First argument passed to xConflict */
13232  void **ppRebase, int *pnRebase,
13233  int flags
13234);
13235SQLITE_API int sqlite3changeset_apply_v3_strm(
13236  sqlite3 *db,                    /* Apply change to "main" db of this handle */
13237  int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
13238  void *pIn,                                          /* First arg for xInput */
13239  int(*xFilter)(
13240    void *pCtx,                   /* Copy of sixth arg to _apply() */
13241    sqlite3_changeset_iter *p
13242  ),
13243  int(*xConflict)(
13244    void *pCtx,                   /* Copy of sixth arg to _apply() */
13245    int eConflict,                /* DATA, MISSING, CONFLICT, CONSTRAINT */
13246    sqlite3_changeset_iter *p     /* Handle describing change and conflict */
13247  ),
13248  void *pCtx,                     /* First argument passed to xConflict */
13249  void **ppRebase, int *pnRebase,
13250  int flags
13251);
13252SQLITE_API int sqlite3changeset_concat_strm(
13253  int (*xInputA)(void *pIn, void *pData, int *pnData),
13254  void *pInA,
13255  int (*xInputB)(void *pIn, void *pData, int *pnData),
13256  void *pInB,
13257  int (*xOutput)(void *pOut, const void *pData, int nData),
13258  void *pOut
13259);
13260SQLITE_API int sqlite3changeset_invert_strm(
13261  int (*xInput)(void *pIn, void *pData, int *pnData),
13262  void *pIn,
13263  int (*xOutput)(void *pOut, const void *pData, int nData),
13264  void *pOut
13265);
13266SQLITE_API int sqlite3changeset_start_strm(
13267  sqlite3_changeset_iter **pp,
13268  int (*xInput)(void *pIn, void *pData, int *pnData),
13269  void *pIn
13270);
13271SQLITE_API int sqlite3changeset_start_v2_strm(
13272  sqlite3_changeset_iter **pp,
13273  int (*xInput)(void *pIn, void *pData, int *pnData),
13274  void *pIn,
13275  int flags
13276);
13277SQLITE_API int sqlite3session_changeset_strm(
13278  sqlite3_session *pSession,
13279  int (*xOutput)(void *pOut, const void *pData, int nData),
13280  void *pOut
13281);
13282SQLITE_API int sqlite3session_patchset_strm(
13283  sqlite3_session *pSession,
13284  int (*xOutput)(void *pOut, const void *pData, int nData),
13285  void *pOut
13286);
13287SQLITE_API int sqlite3changegroup_add_strm(sqlite3_changegroup*,
13288    int (*xInput)(void *pIn, void *pData, int *pnData),
13289    void *pIn
13290);
13291SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*,
13292    int (*xOutput)(void *pOut, const void *pData, int nData),
13293    void *pOut
13294);
13295SQLITE_API int sqlite3rebaser_rebase_strm(
13296  sqlite3_rebaser *pRebaser,
13297  int (*xInput)(void *pIn, void *pData, int *pnData),
13298  void *pIn,
13299  int (*xOutput)(void *pOut, const void *pData, int nData),
13300  void *pOut
13301);
13302
13303/*
13304** CAPI3REF: Configure global parameters
13305**
13306** The sqlite3session_config() interface is used to make global configuration
13307** changes to the sessions module in order to tune it to the specific needs
13308** of the application.
13309**
13310** The sqlite3session_config() interface is not threadsafe. If it is invoked
13311** while any other thread is inside any other sessions method then the
13312** results are undefined. Furthermore, if it is invoked after any sessions
13313** related objects have been created, the results are also undefined.
13314**
13315** The first argument to the sqlite3session_config() function must be one
13316** of the SQLITE_SESSION_CONFIG_XXX constants defined below. The
13317** interpretation of the (void*) value passed as the second parameter and
13318** the effect of calling this function depends on the value of the first
13319** parameter.
13320**
13321** <dl>
13322** <dt>SQLITE_SESSION_CONFIG_STRMSIZE<dd>
13323**    By default, the sessions module streaming interfaces attempt to input
13324**    and output data in approximately 1 KiB chunks. This operand may be used
13325**    to set and query the value of this configuration setting. The pointer
13326**    passed as the second argument must point to a value of type (int).
13327**    If this value is greater than 0, it is used as the new streaming data
13328**    chunk size for both input and output. Before returning, the (int) value
13329**    pointed to by pArg is set to the final value of the streaming interface
13330**    chunk size.
13331** </dl>
13332**
13333** This function returns SQLITE_OK if successful, or an SQLite error code
13334** otherwise.
13335*/
13336SQLITE_API int sqlite3session_config(int op, void *pArg);
13337
13338/*
13339** CAPI3REF: Values for sqlite3session_config().
13340*/
13341#define SQLITE_SESSION_CONFIG_STRMSIZE 1
13342
13343/*
13344** CAPI3REF: Configure a changegroup object
13345**
13346** Configure the changegroup object passed as the first argument.
13347** At present the only valid value for the second parameter is
13348** [SQLITE_CHANGEGROUP_CONFIG_PATCHSET].
13349*/
13350SQLITE_API int sqlite3changegroup_config(sqlite3_changegroup*, int, void *pArg);
13351
13352/*
13353** CAPI3REF: Options for sqlite3changegroup_config().
13354**
13355** The following values may be passed as the 2nd parameter to
13356** sqlite3changegroup_config().
13357**
13358** <dt>SQLITE_CHANGEGROUP_CONFIG_PATCHSET <dd>
13359**   A changegroup object generates either a changeset or patchset. Usually,
13360**   this is determined by whether the first call to sqlite3changegroup_add()
13361**   is passed a changeset or a patchset. Or, if the first changes are added
13362**   to the changegroup object using the sqlite3changegroup_change_xxx()
13363**   APIs, then this option may be used to configure whether the changegroup
13364**   object generates a changeset or patchset.
13365**
13366**   When this option is invoked, parameter pArg must point to a value of
13367**   type int. If the changegroup currently contains zero changes, and the
13368**   value of the int variable is zero or greater than zero, then the
13369**   changegroup is configured to generate a changeset or patchset,
13370**   respectively. It is a no-op, not an error, if the changegroup is not
13371**   configured because it has already started accumulating changes.
13372**
13373**   Before returning, the int variable is set to 0 if the changegroup is
13374**   configured to generate a changeset, or 1 if it is configured to generate
13375**   a patchset.
13376*/
13377#define SQLITE_CHANGEGROUP_CONFIG_PATCHSET 1
13378
13379
13380/*
13381** CAPI3REF: Begin adding a change to a changegroup
13382**
13383** This API is used, in concert with other sqlite3changegroup_change_xxx()
13384** APIs, to add changes to a changegroup object one at a time. To add a
13385** single change, the caller must:
13386**
13387**   1. Invoke sqlite3changegroup_change_begin() to indicate the type of
13388**      change (INSERT, UPDATE or DELETE), the affected table and whether
13389**      or not the change should be marked as indirect.
13390**
13391**   2. Invoke sqlite3changegroup_change_int64() or one of the other four
13392**      value functions - _null(), _double(), _text() or _blob() - one or
13393**      more times to specify old.* and new.* values for the change being
13394**      constructed.
13395**
13396**   3. Invoke sqlite3changegroup_change_finish() to either finish adding
13397**      the change to the group, or to discard the change altogether.
13398**
13399** The first argument to this function must be a pointer to the existing
13400** changegroup object that the change will be added to. The second argument
13401** must be SQLITE_INSERT, SQLITE_UPDATE or SQLITE_DELETE. The third is the
13402** name of the table that the change affects, and the fourth is a boolean
13403** flag specifying whether the change should be marked as "indirect" (if
13404** bIndirect is non-zero) or not indirect (if bIndirect is zero).
13405**
13406** Following a successful call to this function, this function may not be
13407** called again on the same changegroup object until after
13408** sqlite3changegroup_change_finish() has been called. Doing so is an
13409** SQLITE_MISUSE error.
13410**
13411** The changegroup object passed as the first argument must be already
13412** configured with schema data for the specified table. It may be configured
13413** either by calling sqlite3changegroup_schema() with a database that contains
13414** the table, or sqlite3changegroup_add() with a changeset that contains the
13415** table. If the changegroup object has not been configured with a schema for
13416** the specified table when this function is called, SQLITE_ERROR is returned.
13417**
13418** If successful, SQLITE_OK is returned. Otherwise, if an error occurs, an
13419** SQLite error code is returned. In this case, if argument pzErr is non-NULL,
13420** then (*pzErr) may be set to point to a buffer containing a utf-8 formated,
13421** nul-terminated, English language error message. It is the responsibility
13422** of the caller to eventually free this buffer using sqlite3_free().
13423*/
13424SQLITE_API int sqlite3changegroup_change_begin(
13425  sqlite3_changegroup*,
13426  int eOp,
13427  const char *zTab,
13428  int bIndirect,
13429  char **pzErr
13430);
13431
13432/*
13433** CAPI3REF: Add a 64-bit integer to a changegroup
13434**
13435** This function may only be called between a successful call to
13436** sqlite3changegroup_change_begin() and its matching
13437** sqlite3changegroup_change_finish() call. If it is called at any
13438** other time, it is an SQLITE_MISUSE error. Calling this function
13439** specifies a 64-bit integer value to be used in the change currently being
13440** added to the changegroup object passed as the first argument.
13441**
13442** The second parameter, bNew, specifies whether the value is to be part of
13443** the new.* (if bNew is non-zero) or old.* (if bNew is zero) record of
13444** the change under construction. If this does not match the type of change
13445** specified by the preceding call to sqlite3changegroup_change_begin() (i.e.
13446** an old.* value for an SQLITE_INSERT change, or a new.* value for an
13447** SQLITE_DELETE), then SQLITE_ERROR is returned.
13448**
13449** The third parameter specifies the column of the old.* or new.* record that
13450** the value will be a part of. If the specified table has an explicit primary
13451** key, then this is the index of the table column, numbered from 0 in the order
13452** specified within the CREATE TABLE statement. Or, if the table uses an
13453** implicit rowid key, then the column 0 is the rowid and the explicit columns
13454** are numbered starting from 1. If the iCol parameter is less than 0 or greater
13455** than the index of the last column in the table, SQLITE_RANGE is returned.
13456**
13457** The fourth parameter is the integer value to use as part of the old.* or
13458** new.* record.
13459**
13460** If this call is successful, SQLITE_OK is returned. Otherwise, if an
13461** error occurs, an SQLite error code is returned.
13462*/
13463SQLITE_API int sqlite3changegroup_change_int64(
13464  sqlite3_changegroup*,
13465  int bNew,
13466  int iCol,
13467  sqlite3_int64 iVal
13468);
13469
13470/*
13471** CAPI3REF: Add a NULL to a changegroup
13472**
13473** This function is similar to sqlite3changegroup_change_int64(). Except that
13474** it configures the change currently under construction with a NULL value
13475** instead of a 64-bit integer.
13476*/
13477SQLITE_API int sqlite3changegroup_change_null(sqlite3_changegroup*, int, int);
13478
13479/*
13480** CAPI3REF: Add an double to a changegroup
13481**
13482** This function is similar to sqlite3changegroup_change_int64(). Except that
13483** it configures the change currently being constructed with a real value
13484** instead of a 64-bit integer.
13485*/
13486SQLITE_API int sqlite3changegroup_change_double(sqlite3_changegroup*, int, int, double);
13487
13488/*
13489** CAPI3REF: Add a text value to a changegroup
13490**
13491** This function is similar to sqlite3changegroup_change_int64(). It configures
13492** the currently accumulated change with a text value instead of a 64-bit
13493** integer. Parameter pVal points to a buffer containing the text encoded using
13494** utf-8. Parameter nVal may either be the size of the text value in bytes, or
13495** else a negative value, in which case the buffer pVal points to is assumed to
13496** be nul-terminated.
13497*/
13498SQLITE_API int sqlite3changegroup_change_text(
13499  sqlite3_changegroup*, int, int, const char *pVal, int nVal
13500);
13501
13502/*
13503** CAPI3REF: Add a blob to a changegroup
13504**
13505** This function is similar to sqlite3changegroup_change_int64(). It configures
13506** the currently accumulated change with a blob value instead of a 64-bit
13507** integer. Parameter pVal points to a buffer containing the blob. Parameter
13508** nVal is the size of the blob in bytes.
13509*/
13510SQLITE_API int sqlite3changegroup_change_blob(
13511    sqlite3_changegroup*, int, int, const void *pVal, int nVal
13512);
13513
13514/*
13515** CAPI3REF: Finish adding one-at-at-time changes to a changegroup
13516**
13517** This function may only be called following a successful call to
13518** sqlite3changegroup_change_begin(). Otherwise, it is an SQLITE_MISUSE error.
13519**
13520** If parameter bDiscard is non-zero, then the current change is simply
13521** discarded. In this case this function is always successful and SQLITE_OK
13522** returned.
13523**
13524** If parameter bDiscard is zero, then an attempt is made to add the current
13525** change to the changegroup. Assuming the changegroup is configured to
13526** produce a changeset (not a patchset), this requires that:
13527**
13528**   *  If the change is an INSERT or DELETE, then a value must be specified
13529**      for all columns of the new.* or old.* record, respectively.
13530**
13531**   *  If the change is an UPDATE record, then values must be provided for
13532**      the PRIMARY KEY columns of the old.* record, but must not be provided
13533**      for PRIMARY KEY columns of the new.* record.
13534**
13535**   *  If the change is an UPDATE record, then for each non-PRIMARY KEY
13536**      column in the old.* record for which a value has been provided, a
13537**      value must also be provided for the same column in the new.* record.
13538**      Similarly, for each non-PK column in the old.* record for which
13539**      a value is not provided, a value must not be provided for the same
13540**      column in the new.* record.
13541**
13542**   *  All values specified for PRIMARY KEY columns must be non-NULL.
13543**
13544** Otherwise, it is an error.
13545**
13546** If the changegroup already contains a change for the same row (identified
13547** by PRIMARY KEY columns), then the current change is combined with the
13548** existing change in the same way as for sqlite3changegroup_add().
13549**
13550** For a patchset, all of the above rules apply except that it doesn't matter
13551** whether or not values are provided for the non-PK old.* record columns
13552** for an UPDATE or DELETE change. This means that code used to produce
13553** a changeset using the sqlite3changegroup_change_xxx() APIs may also
13554** be used to produce patchsets.
13555**
13556** If the call is successful, SQLITE_OK is returned. Otherwise, if an error
13557** occurs, an SQLite error code is returned. If an error is returned and
13558** parameter pzErr is not NULL, then (*pzErr) may be set to point to a buffer
13559** containing a nul-terminated, utf-8 encoded, English language error message.
13560** It is the responsibility of the caller to eventually free any such error
13561** message buffer using sqlite3_free().
13562*/
13563SQLITE_API int sqlite3changegroup_change_finish(
13564  sqlite3_changegroup*,
13565  int bDiscard,
13566  char **pzErr
13567);
13568
13569/*
13570** Make sure we can call this stuff from C++.
13571*/
13572#ifdef __cplusplus
13573}
13574#endif
13575
13576#endif  /* !defined(__SQLITESESSION_H_) && defined(SQLITE_ENABLE_SESSION) */
13577
13578/******** End of sqlite3session.h *********/
13579/******** Begin file fts5.h *********/
13580/*
13581** 2014 May 31
13582**
13583** The author disclaims copyright to this source code.  In place of
13584** a legal notice, here is a blessing:
13585**
13586**    May you do good and not evil.
13587**    May you find forgiveness for yourself and forgive others.
13588**    May you share freely, never taking more than you give.
13589**
13590******************************************************************************
13591**
13592** Interfaces to extend FTS5. Using the interfaces defined in this file,
13593** FTS5 may be extended with:
13594**
13595**     * custom tokenizers, and
13596**     * custom auxiliary functions.
13597*/
13598
13599
13600#ifndef _FTS5_H
13601#define _FTS5_H
13602
13603
13604#ifdef __cplusplus
13605extern "C" {
13606#endif
13607
13608/*************************************************************************
13609** CUSTOM AUXILIARY FUNCTIONS
13610**
13611** Virtual table implementations may overload SQL functions by implementing
13612** the sqlite3_module.xFindFunction() method.
13613*/
13614
13615typedef struct Fts5ExtensionApi Fts5ExtensionApi;
13616typedef struct Fts5Context Fts5Context;
13617typedef struct Fts5PhraseIter Fts5PhraseIter;
13618
13619typedef void (*fts5_extension_function)(
13620  const Fts5ExtensionApi *pApi,   /* API offered by current FTS version */
13621  Fts5Context *pFts,              /* First arg to pass to pApi functions */
13622  sqlite3_context *pCtx,          /* Context for returning result/error */
13623  int nVal,                       /* Number of values in apVal[] array */
13624  sqlite3_value **apVal           /* Array of trailing arguments */
13625);
13626
13627struct Fts5PhraseIter {
13628  const unsigned char *a;
13629  const unsigned char *b;
13630};
13631
13632/*
13633** EXTENSION API FUNCTIONS
13634**
13635** xUserData(pFts):
13636**   Return a copy of the pUserData pointer passed to the xCreateFunction()
13637**   API when the extension function was registered.
13638**
13639** xColumnTotalSize(pFts, iCol, pnToken):
13640**   If parameter iCol is less than zero, set output variable *pnToken
13641**   to the total number of tokens in the FTS5 table. Or, if iCol is
13642**   non-negative but less than the number of columns in the table, return
13643**   the total number of tokens in column iCol, considering all rows in
13644**   the FTS5 table.
13645**
13646**   If parameter iCol is greater than or equal to the number of columns
13647**   in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g.
13648**   an OOM condition or IO error), an appropriate SQLite error code is
13649**   returned.
13650**
13651** xColumnCount(pFts):
13652**   Return the number of columns in the table.
13653**
13654** xColumnSize(pFts, iCol, pnToken):
13655**   If parameter iCol is less than zero, set output variable *pnToken
13656**   to the total number of tokens in the current row. Or, if iCol is
13657**   non-negative but less than the number of columns in the table, set
13658**   *pnToken to the number of tokens in column iCol of the current row.
13659**
13660**   If parameter iCol is greater than or equal to the number of columns
13661**   in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g.
13662**   an OOM condition or IO error), an appropriate SQLite error code is
13663**   returned.
13664**
13665**   This function may be quite inefficient if used with an FTS5 table
13666**   created with the "columnsize=0" option.
13667**
13668** xColumnText:
13669**   If parameter iCol is less than zero, or greater than or equal to the
13670**   number of columns in the table, SQLITE_RANGE is returned.
13671**
13672**   Otherwise, this function attempts to retrieve the text of column iCol of
13673**   the current document. If successful, (*pz) is set to point to a buffer
13674**   containing the text in utf-8 encoding, (*pn) is set to the size in bytes
13675**   (not characters) of the buffer and SQLITE_OK is returned. Otherwise,
13676**   if an error occurs, an SQLite error code is returned and the final values
13677**   of (*pz) and (*pn) are undefined.
13678**
13679** xPhraseCount:
13680**   Returns the number of phrases in the current query expression.
13681**
13682** xPhraseSize:
13683**   If parameter iCol is less than zero, or greater than or equal to the
13684**   number of phrases in the current query, as returned by xPhraseCount,
13685**   0 is returned. Otherwise, this function returns the number of tokens in
13686**   phrase iPhrase of the query. Phrases are numbered starting from zero.
13687**
13688** xInstCount:
13689**   Set *pnInst to the total number of occurrences of all phrases within
13690**   the query within the current row. Return SQLITE_OK if successful, or
13691**   an error code (i.e. SQLITE_NOMEM) if an error occurs.
13692**
13693**   This API can be quite slow if used with an FTS5 table created with the
13694**   "detail=none" or "detail=column" option. If the FTS5 table is created
13695**   with either "detail=none" or "detail=column" and "content=" option
13696**   (i.e. if it is a contentless table), then this API always returns 0.
13697**
13698** xInst:
13699**   Query for the details of phrase match iIdx within the current row.
13700**   Phrase matches are numbered starting from zero, so the iIdx argument
13701**   should be greater than or equal to zero and smaller than the value
13702**   output by xInstCount(). If iIdx is less than zero or greater than
13703**   or equal to the value returned by xInstCount(), SQLITE_RANGE is returned.
13704**
13705**   Otherwise, output parameter *piPhrase is set to the phrase number, *piCol
13706**   to the column in which it occurs and *piOff the token offset of the
13707**   first token of the phrase. SQLITE_OK is returned if successful, or an
13708**   error code (i.e. SQLITE_NOMEM) if an error occurs.
13709**
13710**   This API can be quite slow if used with an FTS5 table created with the
13711**   "detail=none" or "detail=column" option.
13712**
13713** xRowid:
13714**   Returns the rowid of the current row.
13715**
13716** xTokenize:
13717**   Tokenize text using the tokenizer belonging to the FTS5 table.
13718**
13719** xQueryPhrase(pFts5, iPhrase, pUserData, xCallback):
13720**   This API function is used to query the FTS table for phrase iPhrase
13721**   of the current query. Specifically, a query equivalent to:
13722**
13723**       ... FROM ftstable WHERE ftstable MATCH $p ORDER BY rowid
13724**
13725**   with $p set to a phrase equivalent to the phrase iPhrase of the
13726**   current query is executed. Any column filter that applies to
13727**   phrase iPhrase of the current query is included in $p. For each
13728**   row visited, the callback function passed as the fourth argument
13729**   is invoked. The context and API objects passed to the callback
13730**   function may be used to access the properties of each matched row.
13731**   Invoking Api.xUserData() returns a copy of the pointer passed as
13732**   the third argument to pUserData.
13733**
13734**   If parameter iPhrase is less than zero, or greater than or equal to
13735**   the number of phrases in the query, as returned by xPhraseCount(),
13736**   this function returns SQLITE_RANGE.
13737**
13738**   If the callback function returns any value other than SQLITE_OK, the
13739**   query is abandoned and the xQueryPhrase function returns immediately.
13740**   If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK.
13741**   Otherwise, the error code is propagated upwards.
13742**
13743**   If the query runs to completion without incident, SQLITE_OK is returned.
13744**   Or, if some error occurs before the query completes or is aborted by
13745**   the callback, an SQLite error code is returned.
13746**
13747**
13748** xSetAuxdata(pFts5, pAux, xDelete)
13749**
13750**   Save the pointer passed as the second argument as the extension function's
13751**   "auxiliary data". The pointer may then be retrieved by the current or any
13752**   future invocation of the same fts5 extension function made as part of
13753**   the same MATCH query using the xGetAuxdata() API.
13754**
13755**   Each extension function is allocated a single auxiliary data slot for
13756**   each FTS query (MATCH expression). If the extension function is invoked
13757**   more than once for a single FTS query, then all invocations share a
13758**   single auxiliary data context.
13759**
13760**   If there is already an auxiliary data pointer when this function is
13761**   invoked, then it is replaced by the new pointer. If an xDelete callback
13762**   was specified along with the original pointer, it is invoked at this
13763**   point.
13764**
13765**   The xDelete callback, if one is specified, is also invoked on the
13766**   auxiliary data pointer after the FTS5 query has finished.
13767**
13768**   If an error (e.g. an OOM condition) occurs within this function,
13769**   the auxiliary data is set to NULL and an error code returned. If the
13770**   xDelete parameter was not NULL, it is invoked on the auxiliary data
13771**   pointer before returning.
13772**
13773**
13774** xGetAuxdata(pFts5, bClear)
13775**
13776**   Returns the current auxiliary data pointer for the fts5 extension
13777**   function. See the xSetAuxdata() method for details.
13778**
13779**   If the bClear argument is non-zero, then the auxiliary data is cleared
13780**   (set to NULL) before this function returns. In this case the xDelete,
13781**   if any, is not invoked.
13782**
13783**
13784** xRowCount(pFts5, pnRow)
13785**
13786**   This function is used to retrieve the total number of rows in the table.
13787**   In other words, the same value that would be returned by:
13788**
13789**        SELECT count(*) FROM ftstable;
13790**
13791** xPhraseFirst()
13792**   This function is used, along with type Fts5PhraseIter and the xPhraseNext
13793**   method, to iterate through all instances of a single query phrase within
13794**   the current row. This is the same information as is accessible via the
13795**   xInstCount/xInst APIs. While the xInstCount/xInst APIs are more convenient
13796**   to use, this API may be faster under some circumstances. To iterate
13797**   through instances of phrase iPhrase, use the following code:
13798**
13799**       Fts5PhraseIter iter;
13800**       int iCol, iOff;
13801**       for(pApi->xPhraseFirst(pFts, iPhrase, &iter, &iCol, &iOff);
13802**           iCol>=0;
13803**           pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
13804**       ){
13805**         // An instance of phrase iPhrase at offset iOff of column iCol
13806**       }
13807**
13808**   The Fts5PhraseIter structure is defined above. Applications should not
13809**   modify this structure directly - it should only be used as shown above
13810**   with the xPhraseFirst() and xPhraseNext() API methods (and by
13811**   xPhraseFirstColumn() and xPhraseNextColumn() as illustrated below).
13812**
13813**   This API can be quite slow if used with an FTS5 table created with the
13814**   "detail=none" or "detail=column" option. If the FTS5 table is created
13815**   with either "detail=none" or "detail=column" and "content=" option
13816**   (i.e. if it is a contentless table), then this API always iterates
13817**   through an empty set (all calls to xPhraseFirst() set iCol to -1).
13818**
13819**   In all cases, matches are visited in (column ASC, offset ASC) order.
13820**   i.e. all those in column 0, sorted by offset, followed by those in
13821**   column 1, etc.
13822**
13823** xPhraseNext()
13824**   See xPhraseFirst above.
13825**
13826** xPhraseFirstColumn()
13827**   This function and xPhraseNextColumn() are similar to the xPhraseFirst()
13828**   and xPhraseNext() APIs described above. The difference is that instead
13829**   of iterating through all instances of a phrase in the current row, these
13830**   APIs are used to iterate through the set of columns in the current row
13831**   that contain one or more instances of a specified phrase. For example:
13832**
13833**       Fts5PhraseIter iter;
13834**       int iCol;
13835**       for(pApi->xPhraseFirstColumn(pFts, iPhrase, &iter, &iCol);
13836**           iCol>=0;
13837**           pApi->xPhraseNextColumn(pFts, &iter, &iCol)
13838**       ){
13839**         // Column iCol contains at least one instance of phrase iPhrase
13840**       }
13841**
13842**   This API can be quite slow if used with an FTS5 table created with the
13843**   "detail=none" option. If the FTS5 table is created with either
13844**   "detail=none" "content=" option (i.e. if it is a contentless table),
13845**   then this API always iterates through an empty set (all calls to
13846**   xPhraseFirstColumn() set iCol to -1).
13847**
13848**   The information accessed using this API and its companion
13849**   xPhraseFirstColumn() may also be obtained using xPhraseFirst/xPhraseNext
13850**   (or xInst/xInstCount). The chief advantage of this API is that it is
13851**   significantly more efficient than those alternatives when used with
13852**   "detail=column" tables.
13853**
13854** xPhraseNextColumn()
13855**   See xPhraseFirstColumn above.
13856**
13857** xQueryToken(pFts5, iPhrase, iToken, ppToken, pnToken)
13858**   This is used to access token iToken of phrase iPhrase of the current
13859**   query. Before returning, output parameter *ppToken is set to point
13860**   to a buffer containing the requested token, and *pnToken to the
13861**   size of this buffer in bytes.
13862**
13863**   If iPhrase or iToken are less than zero, or if iPhrase is greater than
13864**   or equal to the number of phrases in the query as reported by
13865**   xPhraseCount(), or if iToken is equal to or greater than the number of
13866**   tokens in the phrase, SQLITE_RANGE is returned and *ppToken and *pnToken
13867     are both zeroed.
13868**
13869**   The output text is not a copy of the query text that specified the
13870**   token. It is the output of the tokenizer module. For tokendata=1
13871**   tables, this includes any embedded 0x00 and trailing data.
13872**
13873** xInstToken(pFts5, iIdx, iToken, ppToken, pnToken)
13874**   This is used to access token iToken of phrase hit iIdx within the
13875**   current row. If iIdx is less than zero or greater than or equal to the
13876**   value returned by xInstCount(), SQLITE_RANGE is returned.  Otherwise,
13877**   output variable (*ppToken) is set to point to a buffer containing the
13878**   matching document token, and (*pnToken) to the size of that buffer in
13879**   bytes.
13880**
13881**   The output text is not a copy of the document text that was tokenized.
13882**   It is the output of the tokenizer module. For tokendata=1 tables, this
13883**   includes any embedded 0x00 and trailing data.
13884**
13885**   This API may be slow in some cases if the token identified by parameters
13886**   iIdx and iToken matched a prefix token in the query. In most cases, the
13887**   first call to this API for each prefix token in the query is forced
13888**   to scan the portion of the full-text index that matches the prefix
13889**   token to collect the extra data required by this API. If the prefix
13890**   token matches a large number of token instances in the document set,
13891**   this may be a performance problem.
13892**
13893**   If the user knows in advance that a query may use this API for a
13894**   prefix token, FTS5 may be configured to collect all required data as part
13895**   of the initial querying of the full-text index, avoiding the second scan
13896**   entirely. This also causes prefix queries that do not use this API to
13897**   run more slowly and use more memory. FTS5 may be configured in this way
13898**   either on a per-table basis using the [FTS5 insttoken | 'insttoken']
13899**   option, or on a per-query basis using the
13900**   [fts5_insttoken | fts5_insttoken()] user function.
13901**
13902**   This API can be quite slow if used with an FTS5 table created with the
13903**   "detail=none" or "detail=column" option.
13904**
13905** xColumnLocale(pFts5, iIdx, pzLocale, pnLocale)
13906**   If parameter iCol is less than zero, or greater than or equal to the
13907**   number of columns in the table, SQLITE_RANGE is returned.
13908**
13909**   Otherwise, this function attempts to retrieve the locale associated
13910**   with column iCol of the current row. Usually, there is no associated
13911**   locale, and output parameters (*pzLocale) and (*pnLocale) are set
13912**   to NULL and 0, respectively. However, if the fts5_locale() function
13913**   was used to associate a locale with the value when it was inserted
13914**   into the fts5 table, then (*pzLocale) is set to point to a nul-terminated
13915**   buffer containing the name of the locale in utf-8 encoding. (*pnLocale)
13916**   is set to the size in bytes of the buffer, not including the
13917**   nul-terminator.
13918**
13919**   If successful, SQLITE_OK is returned. Or, if an error occurs, an
13920**   SQLite error code is returned. The final value of the output parameters
13921**   is undefined in this case.
13922**
13923** xTokenize_v2:
13924**   Tokenize text using the tokenizer belonging to the FTS5 table. This
13925**   API is the same as the xTokenize() API, except that it allows a tokenizer
13926**   locale to be specified.
13927*/
13928struct Fts5ExtensionApi {
13929  int iVersion;                   /* Currently always set to 4 */
13930
13931  void *(*xUserData)(Fts5Context*);
13932
13933  int (*xColumnCount)(Fts5Context*);
13934  int (*xRowCount)(Fts5Context*, sqlite3_int64 *pnRow);
13935  int (*xColumnTotalSize)(Fts5Context*, int iCol, sqlite3_int64 *pnToken);
13936
13937  int (*xTokenize)(Fts5Context*,
13938    const char *pText, int nText, /* Text to tokenize */
13939    void *pCtx,                   /* Context passed to xToken() */
13940    int (*xToken)(void*, int, const char*, int, int, int)       /* Callback */
13941  );
13942
13943  int (*xPhraseCount)(Fts5Context*);
13944  int (*xPhraseSize)(Fts5Context*, int iPhrase);
13945
13946  int (*xInstCount)(Fts5Context*, int *pnInst);
13947  int (*xInst)(Fts5Context*, int iIdx, int *piPhrase, int *piCol, int *piOff);
13948
13949  sqlite3_int64 (*xRowid)(Fts5Context*);
13950  int (*xColumnText)(Fts5Context*, int iCol, const char **pz, int *pn);
13951  int (*xColumnSize)(Fts5Context*, int iCol, int *pnToken);
13952
13953  int (*xQueryPhrase)(Fts5Context*, int iPhrase, void *pUserData,
13954    int(*)(const Fts5ExtensionApi*,Fts5Context*,void*)
13955  );
13956  int (*xSetAuxdata)(Fts5Context*, void *pAux, void(*xDelete)(void*));
13957  void *(*xGetAuxdata)(Fts5Context*, int bClear);
13958
13959  int (*xPhraseFirst)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*);
13960  void (*xPhraseNext)(Fts5Context*, Fts5PhraseIter*, int *piCol, int *piOff);
13961
13962  int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*);
13963  void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol);
13964
13965  /* Below this point are iVersion>=3 only */
13966  int (*xQueryToken)(Fts5Context*,
13967      int iPhrase, int iToken,
13968      const char **ppToken, int *pnToken
13969  );
13970  int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*);
13971
13972  /* Below this point are iVersion>=4 only */
13973  int (*xColumnLocale)(Fts5Context*, int iCol, const char **pz, int *pn);
13974  int (*xTokenize_v2)(Fts5Context*,
13975    const char *pText, int nText,      /* Text to tokenize */
13976    const char *pLocale, int nLocale,  /* Locale to pass to tokenizer */
13977    void *pCtx,                        /* Context passed to xToken() */
13978    int (*xToken)(void*, int, const char*, int, int, int)       /* Callback */
13979  );
13980};
13981
13982/*
13983** CUSTOM AUXILIARY FUNCTIONS
13984*************************************************************************/
13985
13986/*************************************************************************
13987** CUSTOM TOKENIZERS
13988**
13989** Applications may also register custom tokenizer types. A tokenizer
13990** is registered by providing fts5 with a populated instance of the
13991** following structure. All structure methods must be defined, setting
13992** any member of the fts5_tokenizer struct to NULL leads to undefined
13993** behaviour. The structure methods are expected to function as follows:
13994**
13995** xCreate:
13996**   This function is used to allocate and initialize a tokenizer instance.
13997**   A tokenizer instance is required to actually tokenize text.
13998**
13999**   The first argument passed to this function is a copy of the (void*)
14000**   pointer provided by the application when the fts5_tokenizer_v2 object
14001**   was registered with FTS5 (the third argument to xCreateTokenizer()).
14002**   The second and third arguments are an array of nul-terminated strings
14003**   containing the tokenizer arguments, if any, specified following the
14004**   tokenizer name as part of the CREATE VIRTUAL TABLE statement used
14005**   to create the FTS5 table.
14006**
14007**   The final argument is an output variable. If successful, (*ppOut)
14008**   should be set to point to the new tokenizer handle and SQLITE_OK
14009**   returned. If an error occurs, some value other than SQLITE_OK should
14010**   be returned. In this case, fts5 assumes that the final value of *ppOut
14011**   is undefined.
14012**
14013** xDelete:
14014**   This function is invoked to delete a tokenizer handle previously
14015**   allocated using xCreate(). Fts5 guarantees that this function will
14016**   be invoked exactly once for each successful call to xCreate().
14017**
14018** xTokenize:
14019**   This function is expected to tokenize the nText byte string indicated
14020**   by argument pText. pText may or may not be nul-terminated. The first
14021**   argument passed to this function is a pointer to an Fts5Tokenizer object
14022**   returned by an earlier call to xCreate().
14023**
14024**   The third argument indicates the reason that FTS5 is requesting
14025**   tokenization of the supplied text. This is always one of the following
14026**   four values:
14027**
14028**   <ul><li> <b>FTS5_TOKENIZE_DOCUMENT</b> - A document is being inserted into
14029**            or removed from the FTS table. The tokenizer is being invoked to
14030**            determine the set of tokens to add to (or delete from) the
14031**            FTS index.
14032**
14033**       <li> <b>FTS5_TOKENIZE_QUERY</b> - A MATCH query is being executed
14034**            against the FTS index. The tokenizer is being called to tokenize
14035**            a bareword or quoted string specified as part of the query.
14036**
14037**       <li> <b>(FTS5_TOKENIZE_QUERY | FTS5_TOKENIZE_PREFIX)</b> - Same as
14038**            FTS5_TOKENIZE_QUERY, except that the bareword or quoted string is
14039**            followed by a "*" character, indicating that the last token
14040**            returned by the tokenizer will be treated as a token prefix.
14041**
14042**       <li> <b>FTS5_TOKENIZE_AUX</b> - The tokenizer is being invoked to
14043**            satisfy an fts5_api.xTokenize() request made by an auxiliary
14044**            function. Or an fts5_api.xColumnSize() request made by the same
14045**            on a columnsize=0 database.
14046**   </ul>
14047**
14048**   The sixth and seventh arguments passed to xTokenize() - pLocale and
14049**   nLocale - are a pointer to a buffer containing the locale to use for
14050**   tokenization (e.g. "en_US") and its size in bytes, respectively. The
14051**   pLocale buffer is not nul-terminated. pLocale may be passed NULL (in
14052**   which case nLocale is always 0) to indicate that the tokenizer should
14053**   use its default locale.
14054**
14055**   For each token in the input string, the supplied callback xToken() must
14056**   be invoked. The first argument to it should be a copy of the pointer
14057**   passed as the second argument to xTokenize(). The third and fourth
14058**   arguments are a pointer to a buffer containing the token text, and the
14059**   size of the token in bytes. The 4th and 5th arguments are the byte offsets
14060**   of the first byte of and first byte immediately following the text from
14061**   which the token is derived within the input.
14062**
14063**   The second argument passed to the xToken() callback ("tflags") should
14064**   normally be set to 0. The exception is if the tokenizer supports
14065**   synonyms. In this case see the discussion below for details.
14066**
14067**   FTS5 assumes the xToken() callback is invoked for each token in the
14068**   order that they occur within the input text.
14069**
14070**   If an xToken() callback returns any value other than SQLITE_OK, then
14071**   the tokenization should be abandoned and the xTokenize() method should
14072**   immediately return a copy of the xToken() return value. Or, if the
14073**   input buffer is exhausted, xTokenize() should return SQLITE_OK. Finally,
14074**   if an error occurs with the xTokenize() implementation itself, it
14075**   may abandon the tokenization and return any error code other than
14076**   SQLITE_OK or SQLITE_DONE.
14077**
14078**   If the tokenizer is registered using an fts5_tokenizer_v2 object,
14079**   then the xTokenize() method has two additional arguments - pLocale
14080**   and nLocale. These specify the locale that the tokenizer should use
14081**   for the current request. If pLocale and nLocale are both 0, then the
14082**   tokenizer should use its default locale. Otherwise, pLocale points to
14083**   an nLocale byte buffer containing the name of the locale to use as utf-8
14084**   text. pLocale is not nul-terminated.
14085**
14086** FTS5_TOKENIZER
14087**
14088** There is also an fts5_tokenizer object. This is an older, deprecated,
14089** version of fts5_tokenizer_v2. It is similar except that:
14090**
14091**  <ul>
14092**    <li> There is no "iVersion" field, and
14093**    <li> The xTokenize() method does not take a locale argument.
14094**  </ul>
14095**
14096** Legacy fts5_tokenizer tokenizers must be registered using the
14097** legacy xCreateTokenizer() function, instead of xCreateTokenizer_v2().
14098**
14099** Tokenizer implementations registered using either API may be retrieved
14100** using both xFindTokenizer() and xFindTokenizer_v2().
14101**
14102** SYNONYM SUPPORT
14103**
14104**   Custom tokenizers may also support synonyms. Consider a case in which a
14105**   user wishes to query for a phrase such as "first place". Using the
14106**   built-in tokenizers, the FTS5 query 'first + place' will match instances
14107**   of "first place" within the document set, but not alternative forms
14108**   such as "1st place". In some applications, it would be better to match
14109**   all instances of "first place" or "1st place" regardless of which form
14110**   the user specified in the MATCH query text.
14111**
14112**   There are several ways to approach this in FTS5:
14113**
14114**   <ol><li> By mapping all synonyms to a single token. In this case, using
14115**            the above example, this means that the tokenizer returns the
14116**            same token for inputs "first" and "1st". Say that token is in
14117**            fact "first", so that when the user inserts the document "I won
14118**            1st place" entries are added to the index for tokens "i", "won",
14119**            "first" and "place". If the user then queries for '1st + place',
14120**            the tokenizer substitutes "first" for "1st" and the query works
14121**            as expected.
14122**
14123**       <li> By querying the index for all synonyms of each query term
14124**            separately. In this case, when tokenizing query text, the
14125**            tokenizer may provide multiple synonyms for a single term
14126**            within the document. FTS5 then queries the index for each
14127**            synonym individually. For example, faced with the query:
14128**
14129**   <codeblock>
14130**     ... MATCH 'first place'</codeblock>
14131**
14132**            the tokenizer offers both "1st" and "first" as synonyms for the
14133**            first token in the MATCH query and FTS5 effectively runs a query
14134**            similar to:
14135**
14136**   <codeblock>
14137**     ... MATCH '(first OR 1st) place'</codeblock>
14138**
14139**            except that, for the purposes of auxiliary functions, the query
14140**            still appears to contain just two phrases - "(first OR 1st)"
14141**            being treated as a single phrase.
14142**
14143**       <li> By adding multiple synonyms for a single term to the FTS index.
14144**            Using this method, when tokenizing document text, the tokenizer
14145**            provides multiple synonyms for each token. So that when a
14146**            document such as "I won first place" is tokenized, entries are
14147**            added to the FTS index for "i", "won", "first", "1st" and
14148**            "place".
14149**
14150**            This way, even if the tokenizer does not provide synonyms
14151**            when tokenizing query text (it should not - to do so would be
14152**            inefficient), it doesn't matter if the user queries for
14153**            'first + place' or '1st + place', as there are entries in the
14154**            FTS index corresponding to both forms of the first token.
14155**   </ol>
14156**
14157**   Whether it is parsing document or query text, any call to xToken that
14158**   specifies a <i>tflags</i> argument with the FTS5_TOKEN_COLOCATED bit
14159**   is considered to supply a synonym for the previous token. For example,
14160**   when parsing the document "I won first place", a tokenizer that supports
14161**   synonyms would call xToken() 5 times, as follows:
14162**
14163**   <codeblock>
14164**       xToken(pCtx, 0, "i",                      1,  0,  1);
14165**       xToken(pCtx, 0, "won",                    3,  2,  5);
14166**       xToken(pCtx, 0, "first",                  5,  6, 11);
14167**       xToken(pCtx, FTS5_TOKEN_COLOCATED, "1st", 3,  6, 11);
14168**       xToken(pCtx, 0, "place",                  5, 12, 17);
14169**</codeblock>
14170**
14171**   It is an error to specify the FTS5_TOKEN_COLOCATED flag the first time
14172**   xToken() is called. Multiple synonyms may be specified for a single token
14173**   by making multiple calls to xToken(FTS5_TOKEN_COLOCATED) in sequence.
14174**   There is no limit to the number of synonyms that may be provided for a
14175**   single token.
14176**
14177**   In many cases, method (1) above is the best approach. It does not add
14178**   extra data to the FTS index or require FTS5 to query for multiple terms,
14179**   so it is efficient in terms of disk space and query speed. However, it
14180**   does not support prefix queries very well. If, as suggested above, the
14181**   token "first" is substituted for "1st" by the tokenizer, then the query:
14182**
14183**   <codeblock>
14184**     ... MATCH '1s*'</codeblock>
14185**
14186**   will not match documents that contain the token "1st" (as the tokenizer
14187**   will probably not map "1s" to any prefix of "first").
14188**
14189**   For full prefix support, method (3) may be preferred. In this case,
14190**   because the index contains entries for both "first" and "1st", prefix
14191**   queries such as 'fi*' or '1s*' will match correctly. However, because
14192**   extra entries are added to the FTS index, this method uses more space
14193**   within the database.
14194**
14195**   Method (2) offers a midpoint between (1) and (3). Using this method,
14196**   a query such as '1s*' will match documents that contain the literal
14197**   token "1st", but not "first" (assuming the tokenizer is not able to
14198**   provide synonyms for prefixes). However, a non-prefix query like '1st'
14199**   will match against "1st" and "first". This method does not require
14200**   extra disk space, as no extra entries are added to the FTS index.
14201**   On the other hand, it may require more CPU cycles to run MATCH queries,
14202**   as separate queries of the FTS index are required for each synonym.
14203**
14204**   When using methods (2) or (3), it is important that the tokenizer only
14205**   provide synonyms when tokenizing document text (method (3)) or query
14206**   text (method (2)), not both. Doing so will not cause any errors, but is
14207**   inefficient.
14208*/
14209typedef struct Fts5Tokenizer Fts5Tokenizer;
14210typedef struct fts5_tokenizer_v2 fts5_tokenizer_v2;
14211struct fts5_tokenizer_v2 {
14212  int iVersion;             /* Currently always 2 */
14213
14214  int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
14215  void (*xDelete)(Fts5Tokenizer*);
14216  int (*xTokenize)(Fts5Tokenizer*,
14217      void *pCtx,
14218      int flags,            /* Mask of FTS5_TOKENIZE_* flags */
14219      const char *pText, int nText,
14220      const char *pLocale, int nLocale,
14221      int (*xToken)(
14222        void *pCtx,         /* Copy of 2nd argument to xTokenize() */
14223        int tflags,         /* Mask of FTS5_TOKEN_* flags */
14224        const char *pToken, /* Pointer to buffer containing token */
14225        int nToken,         /* Size of token in bytes */
14226        int iStart,         /* Byte offset of token within input text */
14227        int iEnd            /* Byte offset of end of token within input text */
14228      )
14229  );
14230};
14231
14232/*
14233** New code should use the fts5_tokenizer_v2 type to define tokenizer
14234** implementations. The following type is included for legacy applications
14235** that still use it.
14236*/
14237typedef struct fts5_tokenizer fts5_tokenizer;
14238struct fts5_tokenizer {
14239  int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
14240  void (*xDelete)(Fts5Tokenizer*);
14241  int (*xTokenize)(Fts5Tokenizer*,
14242      void *pCtx,
14243      int flags,            /* Mask of FTS5_TOKENIZE_* flags */
14244      const char *pText, int nText,
14245      int (*xToken)(
14246        void *pCtx,         /* Copy of 2nd argument to xTokenize() */
14247        int tflags,         /* Mask of FTS5_TOKEN_* flags */
14248        const char *pToken, /* Pointer to buffer containing token */
14249        int nToken,         /* Size of token in bytes */
14250        int iStart,         /* Byte offset of token within input text */
14251        int iEnd            /* Byte offset of end of token within input text */
14252      )
14253  );
14254};
14255
14256
14257/* Flags that may be passed as the third argument to xTokenize() */
14258#define FTS5_TOKENIZE_QUERY     0x0001
14259#define FTS5_TOKENIZE_PREFIX    0x0002
14260#define FTS5_TOKENIZE_DOCUMENT  0x0004
14261#define FTS5_TOKENIZE_AUX       0x0008
14262
14263/* Flags that may be passed by the tokenizer implementation back to FTS5
14264** as the third argument to the supplied xToken callback. */
14265#define FTS5_TOKEN_COLOCATED    0x0001      /* Same position as prev. token */
14266
14267/*
14268** END OF CUSTOM TOKENIZERS
14269*************************************************************************/
14270
14271/*************************************************************************
14272** FTS5 EXTENSION REGISTRATION API
14273*/
14274typedef struct fts5_api fts5_api;
14275struct fts5_api {
14276  int iVersion;                   /* Currently always set to 3 */
14277
14278  /* Create a new tokenizer */
14279  int (*xCreateTokenizer)(
14280    fts5_api *pApi,
14281    const char *zName,
14282    void *pUserData,
14283    fts5_tokenizer *pTokenizer,
14284    void (*xDestroy)(void*)
14285  );
14286
14287  /* Find an existing tokenizer */
14288  int (*xFindTokenizer)(
14289    fts5_api *pApi,
14290    const char *zName,
14291    void **ppUserData,
14292    fts5_tokenizer *pTokenizer
14293  );
14294
14295  /* Create a new auxiliary function */
14296  int (*xCreateFunction)(
14297    fts5_api *pApi,
14298    const char *zName,
14299    void *pUserData,
14300    fts5_extension_function xFunction,
14301    void (*xDestroy)(void*)
14302  );
14303
14304  /* APIs below this point are only available if iVersion>=3 */
14305
14306  /* Create a new tokenizer */
14307  int (*xCreateTokenizer_v2)(
14308    fts5_api *pApi,
14309    const char *zName,
14310    void *pUserData,
14311    fts5_tokenizer_v2 *pTokenizer,
14312    void (*xDestroy)(void*)
14313  );
14314
14315  /* Find an existing tokenizer */
14316  int (*xFindTokenizer_v2)(
14317    fts5_api *pApi,
14318    const char *zName,
14319    void **ppUserData,
14320    fts5_tokenizer_v2 **ppTokenizer
14321  );
14322};
14323
14324/*
14325** END OF REGISTRATION API
14326*************************************************************************/
14327
14328#ifdef __cplusplus
14329}  /* end of the 'extern "C"' block */
14330#endif
14331
14332#endif /* _FTS5_H */
14333
14334/******** End of fts5.h *********/
14335#endif /* SQLITE3_H */