diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c
index 8aa824bce4..aa2653050b 100644
--- a/ext/fts3/fts3.c
+++ b/ext/fts3/fts3.c
@@ -640,6 +640,7 @@ static void fts3DeclareVtab(int *pRc, Fts3Table *p){
zLanguageid = (p->zLanguageid ? p->zLanguageid : "__langid");
sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
+ sqlite3_vtab_config(p->db, SQLITE_VTAB_INNOCUOUS);
/* Create a list of user columns for the virtual table */
zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c
index de07c52c13..9bacd4235c 100644
--- a/ext/fts3/fts3_write.c
+++ b/ext/fts3/fts3_write.c
@@ -4034,9 +4034,13 @@ static int fts3IncrmergeAppend(
nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist;
/* If the current block is not empty, and if adding this term/doclist
- ** to the current block would make it larger than Fts3Table.nNodeSize
- ** bytes, write this block out to the database. */
- if( pLeaf->block.n>0 && (pLeaf->block.n + nSpace)>p->nNodeSize ){
+ ** to the current block would make it larger than Fts3Table.nNodeSize bytes,
+ ** and if there is still room for another leaf page, write this block out to
+ ** the database. */
+ if( pLeaf->block.n>0
+ && (pLeaf->block.n + nSpace)>p->nNodeSize
+ && pLeaf->iBlock < (pWriter->iStart + pWriter->nLeafEst)
+ ){
rc = fts3WriteSegment(p, pLeaf->iBlock, pLeaf->block.a, pLeaf->block.n);
pWriter->nWork++;
@@ -4368,7 +4372,7 @@ static int fts3IncrmergeLoad(
rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock,0);
blobGrowBuffer(&pNode->block,
MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
- );
+ );
if( rc==SQLITE_OK ){
memcpy(pNode->block.a, aBlock, nBlock);
pNode->block.n = nBlock;
diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c
index 2b32965638..0500d54a9e 100644
--- a/ext/fts5/fts5_index.c
+++ b/ext/fts5/fts5_index.c
@@ -2904,7 +2904,6 @@ static int fts5MultiIterDoCompare(Fts5Iter *pIter, int iOut){
assert_nc( i2!=0 );
pRes->bTermEq = 1;
if( p1->iRowid==p2->iRowid ){
- p1->bDel = p2->bDel;
return i2;
}
res = ((p1->iRowid > p2->iRowid)==pIter->bRev) ? -1 : +1;
@@ -5132,34 +5131,39 @@ static void fts5DoSecureDelete(
/* Set variable bLastInDoclist to true if this entry happens to be
** the last rowid in the doclist for its term. */
- if( iNextOff>=iPgIdx ){
- int pgno = pSeg->iLeafPgno+1;
- fts5SecureDeleteOverflow(p, pSeg->pSeg, pgno, &bLastInDoclist);
- iNextOff = iPgIdx;
- }else{
- /* Loop through the page-footer. If iNextOff (offset of the
- ** entry following the one we are removing) is equal to the
- ** offset of a key on this page, then the entry is the last
- ** in its doclist. */
- int iKeyOff = 0;
- for(iIdx=0; iIdxbDel==0 ){
+ if( iNextOff>=iPgIdx ){
+ int pgno = pSeg->iLeafPgno+1;
+ fts5SecureDeleteOverflow(p, pSeg->pSeg, pgno, &bLastInDoclist);
+ iNextOff = iPgIdx;
+ }else{
+ /* Loop through the page-footer. If iNextOff (offset of the
+ ** entry following the one we are removing) is equal to the
+ ** offset of a key on this page, then the entry is the last
+ ** in its doclist. */
+ int iKeyOff = 0;
+ for(iIdx=0; iIdxbDel ){
+ iOff += sqlite3Fts5PutVarint(&aPg[iOff], iDelta);
+ aPg[iOff++] = 0x01;
+ }else if( bLastInDoclist==0 ){
if( iNextOff!=iPgIdx ){
u64 iNextDelta = 0;
iNextOff += fts5GetVarint(&aPg[iNextOff], &iNextDelta);
@@ -5271,6 +5275,15 @@ static void fts5DoSecureDelete(
}
}
+ /* Assuming no error has occurred, this block does final edits to the
+ ** leaf page before writing it back to disk. Input variables are:
+ **
+ ** nPg: Total initial size of leaf page.
+ ** iPgIdx: Initial offset of page footer.
+ **
+ ** iOff: Offset to move data to
+ ** iNextOff: Offset to move data from
+ */
if( p->rc==SQLITE_OK ){
const int nMove = nPg - iNextOff; /* Number of bytes to move */
int nShift = iNextOff - iOff; /* Distance to move them */
@@ -5471,10 +5484,16 @@ static void fts5FlushOneHash(Fts5Index *p){
fts5WriteFlushLeaf(p, &writer);
}
}else{
- int bDummy;
- int nPos;
- int nCopy = fts5GetPoslistSize(&pDoclist[iOff], &nPos, &bDummy);
- nCopy += nPos;
+ int bDel = 0;
+ int nPos = 0;
+ int nCopy = fts5GetPoslistSize(&pDoclist[iOff], &nPos, &bDel);
+ if( bDel && bSecureDelete ){
+ fts5BufferAppendVarint(&p->rc, pBuf, nPos*2);
+ iOff += nCopy;
+ nCopy = nPos;
+ }else{
+ nCopy += nPos;
+ }
if( (pBuf->n + pPgidx->n + nCopy) <= pgsz ){
/* The entire poslist will fit on the current leaf. So copy
** it in one go. */
diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c
index 6a8ed37b54..1c21367df1 100644
--- a/ext/fts5/fts5_main.c
+++ b/ext/fts5/fts5_main.c
@@ -408,6 +408,9 @@ static int fts5InitVtab(
if( rc==SQLITE_OK && pConfig->eContent==FTS5_CONTENT_NORMAL ){
rc = sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, (int)1);
}
+ if( rc==SQLITE_OK ){
+ rc = sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS);
+ }
if( rc!=SQLITE_OK ){
fts5FreeVtab(pTab);
@@ -1530,6 +1533,7 @@ static int fts5SpecialInsert(
Fts5Config *pConfig = pTab->p.pConfig;
int rc = SQLITE_OK;
int bError = 0;
+ int bLoadConfig = 0;
if( 0==sqlite3_stricmp("delete-all", zCmd) ){
if( pConfig->eContent==FTS5_CONTENT_NORMAL ){
@@ -1541,6 +1545,7 @@ static int fts5SpecialInsert(
}else{
rc = sqlite3Fts5StorageDeleteAll(pTab->pStorage);
}
+ bLoadConfig = 1;
}else if( 0==sqlite3_stricmp("rebuild", zCmd) ){
if( pConfig->eContent==FTS5_CONTENT_NONE ){
fts5SetVtabError(pTab,
@@ -1550,6 +1555,7 @@ static int fts5SpecialInsert(
}else{
rc = sqlite3Fts5StorageRebuild(pTab->pStorage);
}
+ bLoadConfig = 1;
}else if( 0==sqlite3_stricmp("optimize", zCmd) ){
rc = sqlite3Fts5StorageOptimize(pTab->pStorage);
}else if( 0==sqlite3_stricmp("merge", zCmd) ){
@@ -1575,6 +1581,12 @@ static int fts5SpecialInsert(
}
}
}
+
+ if( rc==SQLITE_OK && bLoadConfig ){
+ pTab->p.pConfig->iCookie--;
+ rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex);
+ }
+
return rc;
}
diff --git a/ext/fts5/test/fts5secure6.test b/ext/fts5/test/fts5secure6.test
index ffb10cb24a..e2f4ceabc8 100644
--- a/ext/fts5/test/fts5secure6.test
+++ b/ext/fts5/test/fts5secure6.test
@@ -18,7 +18,7 @@ db progress 1 progress_handler
set ::PHC 0
proc progress_handler {args} {
incr ::PHC
- if {($::PHC % 100000)==0} breakpoint
+ # if {($::PHC % 100000)==0} breakpoint
return 0
}
@@ -73,12 +73,12 @@ do_execsql_test 2.2 {
#-------------------------------------------------------------------------
reset_db
-do_execsql_test 2.0 {
+do_execsql_test 3.0 {
CREATE VIRTUAL TABLE t1 USING fts5(x);
INSERT INTO t1(t1, rank) VALUES('secure-delete', $sd)
}
-do_execsql_test 2.1 {
+do_execsql_test 3.1 {
BEGIN;
INSERT INTO t1(rowid, x)
VALUES(51869, 'when whenever where weress what turn'),
@@ -91,5 +91,51 @@ do_execsql_test 3.2 {
INSERT INTO t1(t1) VALUES('integrity-check');
}
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 4.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(x);
+ INSERT INTO t1(rowid, x) VALUES(10, 'one two');
+}
+do_execsql_test 4.1 {
+ UPDATE t1 SET x = 'one three' WHERE rowid=10;
+ INSERT INTO t1(t1, rank) VALUES('secure-delete', 1);
+}
+do_execsql_test 4.2 {
+ DELETE FROM t1 WHERE rowid=10;
+}
+do_execsql_test 4.3 {
+ INSERT INTO t1(t1) VALUES('integrity-check');
+}
+
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 5.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(content);
+
+ INSERT INTO t1(t1,rank) VALUES('secure-delete',1);
+ INSERT INTO t1 VALUES('active'),('boomer'),('atom'),('atomic'),
+ ('alpha channel backup abandon test aback boomer atom alpha active');
+ DELETE FROM t1 WHERE t1 MATCH 'abandon';
+}
+
+do_execsql_test 5.1 {
+ INSERT INTO t1(t1) VALUES('rebuild');
+}
+
+do_execsql_test 5.2 {
+ DELETE FROM t1 WHERE rowid NOTNULL<5;
+}
+
+db close
+sqlite3 db test.db
+
+do_execsql_test 5.3 {
+ PRAGMA integrity_check;
+} {ok}
+
+
finish_test
diff --git a/ext/jni/GNUmakefile b/ext/jni/GNUmakefile
index bea26745f5..19a5080471 100644
--- a/ext/jni/GNUmakefile
+++ b/ext/jni/GNUmakefile
@@ -26,6 +26,7 @@ dir.src.c := $(dir.src)/c
dir.bld := $(dir.jni)/bld
dir.bld.c := $(dir.bld)
dir.src.jni := $(dir.src)/org/sqlite/jni
+dir.src.capi := $(dir.src.jni)/capi
dir.src.fts5 := $(dir.src.jni)/fts5
dir.tests := $(dir.src)/tests
mkdir ?= mkdir -p
@@ -45,8 +46,8 @@ DISTCLEAN_FILES := $(dir.jni)/*~ $(dir.src.c)/*~ $(dir.src.jni)/*~
sqlite3-jni.h := $(dir.src.c)/sqlite3-jni.h
.NOTPARALLEL: $(sqlite3-jni.h)
-CApi.java := src/org/sqlite/jni/CApi.java
-SQLTester.java := src/org/sqlite/jni/SQLTester.java
+CApi.java := $(dir.src.capi)/CApi.java
+SQLTester.java := $(dir.src.capi)/SQLTester.java
CApi.class := $(CApi.java:.java=.class)
SQLTester.class := $(SQLTester.java:.java=.class)
@@ -77,9 +78,10 @@ $(bin.version-info): $(dir.tool)/version-info.c $(sqlite3.h) $(dir.top)/Makefile
# Be explicit about which Java files to compile so that we can work on
# in-progress files without requiring them to be in a compilable statae.
-JAVA_FILES.main := $(patsubst %,$(dir.src.jni)/%,\
- annotation/NotNull.java \
- annotation/Nullable.java \
+JAVA_FILES.main := $(patsubst %,$(dir.src.jni)/annotation/%,\
+ NotNull.java \
+ Nullable.java \
+) $(patsubst %,$(dir.src.capi)/%,\
AbstractCollationCallback.java \
AggregateFunction.java \
AuthorizerCallback.java \
@@ -98,27 +100,34 @@ JAVA_FILES.main := $(patsubst %,$(dir.src.jni)/%,\
ResultCode.java \
RollbackHookCallback.java \
ScalarFunction.java \
- Sqlite.java \
- SqliteException.java \
SQLFunction.java \
CallbackProxy.java \
CApi.java \
TableColumnMetadata.java \
TraceV2Callback.java \
UpdateHookCallback.java \
+ ValueHolder.java \
WindowFunction.java \
XDestroyCallback.java \
sqlite3.java \
sqlite3_context.java \
sqlite3_stmt.java \
sqlite3_value.java \
+) $(patsubst %,$(dir.src.jni)/wrapper1/%,\
+ AggregateFunction.java \
+ ScalarFunction.java \
+ SqlFunction.java \
+ Sqlite.java \
+ SqliteException.java \
+ ValueHolder.java \
)
+
JAVA_FILES.unittest := $(patsubst %,$(dir.src.jni)/%,\
- Tester1.java \
- Tester2.java \
+ capi/Tester1.java \
+ wrapper1/Tester2.java \
)
ifeq (1,$(enable.fts5))
- JAVA_FILES.unittest += $(patsubst %,$(dir.src.jni)/%,\
+ JAVA_FILES.unittest += $(patsubst %,$(dir.src.fts5)/%,\
TesterFts5.java \
)
JAVA_FILES.main += $(patsubst %,$(dir.src.fts5)/%,\
@@ -206,7 +215,7 @@ SQLITE_OPT = \
-DSQLITE_JNI_FATAL_OOM=$(opt.fatal-oom) \
-DSQLITE_JNI_ENABLE_METRICS=$(opt.metrics)
-opt.extras ?= 0
+opt.extras ?= 1
ifeq (1,$(opt.extras))
SQLITE_OPT += -DSQLITE_ENABLE_RTREE \
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
@@ -245,8 +254,8 @@ $$(dir.bld.c)/org_sqlite_jni$(3)_$(2).h: $(1)/$(2).java
endef
# Invoke ADD_JNI_H once for each Java file which includes JNI
# declarations:
-$(eval $(call ADD_JNI_H,$(dir.src.jni),CApi,))
-$(eval $(call ADD_JNI_H,$(dir.src.jni),SQLTester,))
+$(eval $(call ADD_JNI_H,$(dir.src.capi),CApi,_capi))
+$(eval $(call ADD_JNI_H,$(dir.src.capi),SQLTester,_capi))
ifeq (1,$(enable.fts5))
$(eval $(call ADD_JNI_H,$(dir.src.fts5),Fts5ExtensionApi,_fts5))
$(eval $(call ADD_JNI_H,$(dir.src.fts5),fts5_api,_fts5))
@@ -303,16 +312,16 @@ test.flags.jvm = -ea -Djava.library.path=$(dir.bld.c) \
$(java.flags) -cp $(classpath)
test.deps := $(CLASS_FILES) $(package.dll)
test-one: $(test.deps)
- $(bin.java) $(test.flags.jvm) org.sqlite.jni.Tester1 $(Tester1.flags)
- $(bin.java) $(test.flags.jvm) org.sqlite.jni.Tester2 $(Tester2.flags)
+ $(bin.java) $(test.flags.jvm) org.sqlite.jni.capi.Tester1 $(Tester1.flags)
+ $(bin.java) $(test.flags.jvm) org.sqlite.jni.wrapper1.Tester2 $(Tester2.flags)
test-sqllog: $(test.deps)
@echo "Testing with -sqllog..."
$(bin.java) $(test.flags.jvm) -sqllog
test-mt: $(test.deps)
@echo "Testing in multi-threaded mode:";
- $(bin.java) $(test.flags.jvm) org.sqlite.jni.Tester1 \
+ $(bin.java) $(test.flags.jvm) org.sqlite.jni.capi.Tester1 \
-t 7 -r 50 -shuffle $(Tester1.flags)
- $(bin.java) $(test.flags.jvm) org.sqlite.jni.Tester2 \
+ $(bin.java) $(test.flags.jvm) org.sqlite.jni.wrapper1.Tester2 \
-t 7 -r 50 -shuffle $(Tester2.flags)
test: test-one test-mt
@@ -325,7 +334,7 @@ ifeq (1,$(enable.tester))
tester-local: $(CLASS_FILES.tester) $(package.dll)
$(bin.java) -ea -Djava.library.path=$(dir.bld.c) \
$(java.flags) -cp $(classpath) \
- org.sqlite.jni.SQLTester $(tester.flags) $(tester.scripts)
+ org.sqlite.jni.capi.SQLTester $(tester.flags) $(tester.scripts)
tester: tester-local
else
tester:
@@ -339,7 +348,7 @@ ifneq (,$(tester.extern-scripts))
tester-ext:
$(bin.java) -ea -Djava.library.path=$(dir.bld.c) \
$(java.flags) -cp $(classpath) \
- org.sqlite.jni.SQLTester $(tester.flags) $(tester.extern-scripts)
+ org.sqlite.jni.capi.SQLTester $(tester.flags) $(tester.extern-scripts)
else
tester-ext:
@echo "******************************************************"; \
@@ -379,13 +388,12 @@ JAVA_FILES.jar := $(JAVA_FILES.main) $(JAVA_FILES.unittest) $(JAVA_FILES.package
CLASS_FILES.jar := $(filter-out %/package-info.class,$(JAVA_FILES.jar:.java=.class))
$(package.jar.in): $(package.dll) $(MAKEFILE)
ls -1 \
- $(dir.src.jni)/*.java $(dir.src.jni)/*.class \
- $(dir.src.jni)/annotation/*.java $(dir.src.jni)/annotation/*.class \
+ $(dir.src.jni)/*/*.java $(dir.src.jni)/*/*.class \
| sed -e 's,^$(dir.src)/,,' | sort > $@
$(package.jar): $(CLASS_FILES.jar) $(MAKEFILE) $(package.jar.in)
@rm -f $(dir.src)/c/*~ $(dir.src.jni)/*~
- cd $(dir.src); $(bin.jar) -cfe ../$@ org.sqlite.jni.Tester1 @$(package.jar.in)
+ cd $(dir.src); $(bin.jar) -cfe ../$@ org.sqlite.jni.capi.Tester1 @$(package.jar.in)
@ls -la $@
@echo "To use this jar you will need the -Djava.library.path=DIR/CONTAINING/libsqlite3-jni.so flag."
@echo "e.g. java -Djava.library.path=bld -jar $@"
@@ -402,6 +410,8 @@ javadoc.exclude := -exclude org.sqlite.jni.fts5
# ^^^^ 2023-09-13: elide the fts5 parts from the public docs for
# the time being, as it's not clear where the Java bindings for
# those bits are going.
+# javadoc.exclude += -exclude org.sqlite.jni.capi
+# ^^^^ exclude the capi API only for certain builds (TBD)
$(doc.index): $(JAVA_FILES.main) $(MAKEFILE)
@if [ -d $(dir.doc) ]; then rm -fr $(dir.doc)/*; fi
$(bin.javadoc) -cp $(classpath) -d $(dir.doc) -quiet \
@@ -422,7 +432,7 @@ docserve: $(doc.index)
# Clean up...
CLEAN_FILES += $(dir.bld.c)/* \
$(dir.src.jni)/*.class \
- $(dir.src.jni.tester)/*.class \
+ $(dir.src.jni)/*/*.class \
$(package.dll) \
hs_err_pid*.log
diff --git a/ext/jni/src/c/sqlite3-jni.c b/ext/jni/src/c/sqlite3-jni.c
index 7afc9a0f0f..8009592b6b 100644
--- a/ext/jni/src/c/sqlite3-jni.c
+++ b/ext/jni/src/c/sqlite3-jni.c
@@ -10,7 +10,7 @@
**
*************************************************************************
** This file implements the JNI bindings declared in
-** org.sqlite.jni.CApi (from which sqlite3-jni.h is generated).
+** org.sqlite.jni.capi.CApi (from which sqlite3-jni.h is generated).
*/
/*
@@ -169,7 +169,7 @@
** prefix seen in this macro.
*/
#define JniFuncName(Suffix) \
- Java_org_sqlite_jni_CApi_sqlite3_ ## Suffix
+ Java_org_sqlite_jni_capi_CApi_sqlite3_ ## Suffix
/* Prologue for JNI function declarations and definitions. */
#define JniDecl(ReturnType,Suffix) \
@@ -386,26 +386,26 @@ static const struct {
#define RefN(INDEX, KLAZZ) MkRef(INDEX, KLAZZ, "nativePointer", "J")
/* OutputPointer.T ref */
#define RefO(INDEX, KLAZZ, SIG) MkRef(INDEX, KLAZZ, "value", SIG)
- RefN(0, "sqlite3"),
- RefN(1, "sqlite3_backup"),
- RefN(2, "sqlite3_blob"),
- RefN(3, "sqlite3_context"),
- RefN(4, "sqlite3_stmt"),
- RefN(5, "sqlite3_value"),
- RefO(6, "OutputPointer$Bool", "Z"),
- RefO(7, "OutputPointer$Int32", "I"),
- RefO(8, "OutputPointer$Int64", "J"),
- RefO(9, "OutputPointer$sqlite3",
- "Lorg/sqlite/jni/sqlite3;"),
- RefO(10, "OutputPointer$sqlite3_blob",
- "Lorg/sqlite/jni/sqlite3_blob;"),
- RefO(11, "OutputPointer$sqlite3_stmt",
- "Lorg/sqlite/jni/sqlite3_stmt;"),
- RefO(12, "OutputPointer$sqlite3_value",
- "Lorg/sqlite/jni/sqlite3_value;"),
- RefO(13, "OutputPointer$String", "Ljava/lang/String;"),
+ RefN(0, "capi/sqlite3"),
+ RefN(1, "capi/sqlite3_backup"),
+ RefN(2, "capi/sqlite3_blob"),
+ RefN(3, "capi/sqlite3_context"),
+ RefN(4, "capi/sqlite3_stmt"),
+ RefN(5, "capi/sqlite3_value"),
+ RefO(6, "capi/OutputPointer$Bool", "Z"),
+ RefO(7, "capi/OutputPointer$Int32", "I"),
+ RefO(8, "capi/OutputPointer$Int64", "J"),
+ RefO(9, "capi/OutputPointer$sqlite3",
+ "Lorg/sqlite/jni/capi/sqlite3;"),
+ RefO(10, "capi/OutputPointer$sqlite3_blob",
+ "Lorg/sqlite/jni/capi/sqlite3_blob;"),
+ RefO(11, "capi/OutputPointer$sqlite3_stmt",
+ "Lorg/sqlite/jni/capi/sqlite3_stmt;"),
+ RefO(12, "capi/OutputPointer$sqlite3_value",
+ "Lorg/sqlite/jni/capi/sqlite3_value;"),
+ RefO(13, "capi/OutputPointer$String", "Ljava/lang/String;"),
#ifdef SQLITE_ENABLE_FTS5
- RefO(14, "OutputPointer$ByteArray", "[B"),
+ RefO(14, "capi/OutputPointer$ByteArray", "[B"),
RefN(15, "fts5/Fts5Context"),
RefN(16, "fts5/Fts5ExtensionApi"),
RefN(17, "fts5/fts5_api"),
@@ -660,7 +660,7 @@ struct S3JniGlobalType {
} g;
/*
** The list of Java-side auto-extensions
- ** (org.sqlite.jni.AutoExtensionCallback objects).
+ ** (org.sqlite.jni.capi.AutoExtensionCallback objects).
*/
struct {
S3JniAutoExtension *aExt /* The auto-extension list. It is
@@ -909,7 +909,7 @@ static S3JniEnv * S3JniEnv__get(JNIEnv * const env){
**
** For purposes of certain hand-crafted JNI function bindings, we
** need a way of reporting errors which is consistent with the rest of
-** the C API, as opposed to throwing JS exceptions. To that end, this
+** the C API, as opposed to throwing Java exceptions. To that end, this
** internal-use-only function is a thin proxy around
** sqlite3ErrorWithMessage(). The intent is that it only be used from
** JNI bindings such as sqlite3_prepare_v2/v3(), and definitely not
@@ -972,6 +972,7 @@ static jstring s3jni__utf8_to_jstring(JNIEnv * const env,
hypothetically do this for any strings where n<4 and z is
NUL-terminated and none of z[0..3] are NUL bytes. */
rv = (*env)->NewStringUTF(env, "");
+ s3jni_oom_check( rv );
}else if( z ){
jbyteArray jba;
if( n<0 ) n = sqlite3Strlen30(z);
@@ -985,8 +986,8 @@ static jstring s3jni__utf8_to_jstring(JNIEnv * const env,
}
S3JniUnrefLocal(jba);
}
+ s3jni_oom_check( rv );
}
- s3jni_oom_check( rv );
return rv;
}
#define s3jni_utf8_to_jstring(CStr,n) s3jni__utf8_to_jstring(env, CStr, n)
@@ -1370,6 +1371,7 @@ static S3JniNphOp * s3jni__nphop(JNIEnv * const env, S3JniNphOp const* pRef){
S3JniNph_mutex_enter;
if( !pNC->klazz ){
jclass const klazz = (*env)->FindClass(env, pRef->zName);
+ //printf("FindClass %s\n", pRef->zName);
S3JniExceptionIsFatal("FindClass() unexpectedly threw");
pNC->klazz = S3JniRefGlobal(klazz);
}
@@ -1468,12 +1470,14 @@ static void * NativePointerHolder__get(JNIEnv * env, jobject jNph,
#define PtrGet_sqlite3_stmt(OBJ) PtrGet_T(sqlite3_stmt, OBJ)
#define PtrGet_sqlite3_value(OBJ) PtrGet_T(sqlite3_value, OBJ)
/*
-** S3JniLongPtr_T(X,Y) expects X to be an unqualified sqlite3
-** struct type name and Y to be a native pointer to such an object in
-** the form of a jlong value. The jlong is simply cast to (X*). This
+** S3JniLongPtr_T(X,Y) expects X to be an unqualified sqlite3 struct
+** type name and Y to be a native pointer to such an object in the
+** form of a jlong value. The jlong is simply cast to (X*). This
** approach is, as of 2023-09-27, supplanting the former approach. We
** now do the native pointer extraction in the Java side, rather than
-** the C side, because it's reportedly significantly faster.
+** the C side, because it's reportedly significantly faster. The
+** intptr_t part here is necessary for compatibility with (at least)
+** ARM32.
*/
#define S3JniLongPtr_T(T,JLongAsPtr) (T*)((intptr_t)(JLongAsPtr))
#define S3JniLongPtr_sqlite3(JLongAsPtr) S3JniLongPtr_T(sqlite3,JLongAsPtr)
@@ -1512,7 +1516,7 @@ static S3JniDb * S3JniDb_alloc(JNIEnv * const env, jobject jDb){
}
/*
-** Returns the S3JniDb object for the given org.sqlite.jni.sqlite3
+** Returns the S3JniDb object for the given org.sqlite.jni.capi.sqlite3
** object, or NULL if jDb is NULL, no pointer can be extracted
** from it, or no matching entry can be found.
*/
@@ -1561,7 +1565,7 @@ static int S3JniAutoExtension_init(JNIEnv *const env,
S3JniAutoExt_mutex_assertLocker;
*ax = S3JniHook_empty;
ax->midCallback = (*env)->GetMethodID(env, klazz, "call",
- "(Lorg/sqlite/jni/sqlite3;)I");
+ "(Lorg/sqlite/jni/capi/sqlite3;)I");
S3JniUnrefLocal(klazz);
S3JniExceptionWarnIgnore;
if( !ax->midCallback ){
@@ -1657,7 +1661,7 @@ static int encodingTypeIsValid(int eTextRep){
}
/* For use with sqlite3_result/value_pointer() */
-static const char * const ResultJavaValuePtrStr = "org.sqlite.jni.ResultJavaVal";
+static const char * const ResultJavaValuePtrStr = "org.sqlite.jni.capi.ResultJavaVal";
/*
** If v is not NULL, it must be a jobject global reference. Its
@@ -1755,9 +1759,9 @@ static S3JniUdf * S3JniUdf_alloc(JNIEnv * const env, jobject jObj){
}
if( s ){
const char * zFSI = /* signature for xFunc, xStep, xInverse */
- "(Lorg/sqlite/jni/sqlite3_context;[Lorg/sqlite/jni/sqlite3_value;)V";
+ "(Lorg/sqlite/jni/capi/sqlite3_context;[Lorg/sqlite/jni/capi/sqlite3_value;)V";
const char * zFV = /* signature for xFinal, xValue */
- "(Lorg/sqlite/jni/sqlite3_context;)V";
+ "(Lorg/sqlite/jni/capi/sqlite3_context;)V";
jclass const klazz = (*env)->GetObjectClass(env, jObj);
memset(s, 0, sizeof(*s));
@@ -1831,8 +1835,8 @@ typedef struct {
** UDF, writing the result (Java wrappers for cx and argv) in the
** final 2 arguments. Returns 0 on success, SQLITE_NOMEM on allocation
** error. On error *jCx and *jArgv will be set to 0. The output
-** objects are of type org.sqlite.jni.sqlite3_context and
-** array-of-org.sqlite3.jni.sqlite3_value, respectively.
+** objects are of type org.sqlite.jni.capi.sqlite3_context and
+** array-of-org.sqlite.jni.capi.sqlite3_value, respectively.
*/
static int udf_args(JNIEnv *env,
sqlite3_context * const cx,
@@ -1864,6 +1868,28 @@ error_oom:
return SQLITE_NOMEM;
}
+/*
+** Requires that jCx and jArgv are sqlite3_context
+** resp. array-of-sqlite3_value values initialized by udf_args(). This
+** function zeroes out the nativePointer member of jCx and each entry
+** in jArgv. This is a safety-net precaution to avoid undefined
+** behavior if a Java-side UDF holds a reference to one of its
+** arguments. This MUST be called from any function which successfully
+** calls udf_args(), after calling the corresponding UDF and checking
+** its exception status. It MUST NOT be called in any other case.
+*/
+static void udf_unargs(JNIEnv *env, jobject jCx, int argc, jobjectArray jArgv){
+ int i = 0;
+ assert(jCx);
+ NativePointerHolder_set(S3JniNph(sqlite3_context), jCx, 0);
+ for( ; i < argc; ++i ){
+ jobject jsv = (*env)->GetObjectArrayElement(env, jArgv, i);
+ assert(jsv);
+ NativePointerHolder_set(S3JniNph(sqlite3_value), jsv, 0);
+ }
+}
+
+
/*
** Must be called immediately after a Java-side UDF callback throws.
** If translateToErr is true then it sets the exception's message in
@@ -1923,6 +1949,7 @@ static int udf_xFSI(sqlite3_context* const pCx, int argc,
rc = udf_report_exception(env, 'F'==zFuncType[1]/*xFunc*/, pCx,
s->zFuncName, zFuncType);
}
+ udf_unargs(env, args.jcx, argc, args.jargv);
}
S3JniUnrefLocal(args.jcx);
S3JniUnrefLocal(args.jargv);
@@ -2054,15 +2081,24 @@ static void udf_xInverse(sqlite3_context* cx, int argc,
JniDecl(jlong,JniNameSuffix)(JniArgsEnvClass, jlong jpDb){ \
return (jlong)CName(S3JniLongPtr_sqlite3(jpDb)); \
}
+/** Create a trivial JNI wrapper for (jstring CName(sqlite3*,int)). */
+#define WRAP_STR_DB_INT(JniNameSuffix,CName) \
+ JniDecl(jstring,JniNameSuffix)(JniArgsEnvClass, jlong jpDb, jint ndx){ \
+ return s3jni_utf8_to_jstring( \
+ CName(S3JniLongPtr_sqlite3(jpDb), (int)ndx), \
+ -1); \
+ }
/** Create a trivial JNI wrapper for (int CName(sqlite3_value*)). */
-#define WRAP_INT_SVALUE(JniNameSuffix,CName) \
+#define WRAP_INT_SVALUE(JniNameSuffix,CName,DfltOnNull) \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jlong jpSValue){ \
- return (jint)CName(S3JniLongPtr_sqlite3_value(jpSValue)); \
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSValue); \
+ return (jint)(sv ? CName(sv): DfltOnNull); \
}
/** Create a trivial JNI wrapper for (boolean CName(sqlite3_value*)). */
-#define WRAP_BOOL_SVALUE(JniNameSuffix,CName) \
+#define WRAP_BOOL_SVALUE(JniNameSuffix,CName,DfltOnNull) \
JniDecl(jboolean,JniNameSuffix)(JniArgsEnvClass, jlong jpSValue){ \
- return (jint)CName(S3JniLongPtr_sqlite3_value(jpSValue)) \
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSValue); \
+ return (jint)(sv ? CName(sv) : DfltOnNull) \
? JNI_TRUE : JNI_FALSE; \
}
@@ -2079,6 +2115,7 @@ WRAP_STR_STMT_INT(1column_1origin_1name, sqlite3_column_origin_name)
WRAP_STR_STMT_INT(1column_1table_1name, sqlite3_column_table_name)
WRAP_INT_STMT_INT(1column_1type, sqlite3_column_type)
WRAP_INT_STMT(1data_1count, sqlite3_data_count)
+WRAP_STR_DB_INT(1db_1name, sqlite3_db_name)
WRAP_INT_DB(1error_1offset, sqlite3_error_offset)
WRAP_INT_DB(1extended_1errcode, sqlite3_extended_errcode)
WRAP_BOOL_DB(1get_1autocommit, sqlite3_get_autocommit)
@@ -2101,14 +2138,12 @@ WRAP_INT_DB(1system_1errno, sqlite3_system_errno)
WRAP_INT_VOID(1threadsafe, sqlite3_threadsafe)
WRAP_INT_DB(1total_1changes, sqlite3_total_changes)
WRAP_INT64_DB(1total_1changes64, sqlite3_total_changes64)
-WRAP_INT_SVALUE(1value_1bytes, sqlite3_value_bytes)
-WRAP_INT_SVALUE(1value_1bytes16, sqlite3_value_bytes16)
-WRAP_INT_SVALUE(1value_1encoding, sqlite3_value_encoding)
-WRAP_BOOL_SVALUE(1value_1frombind, sqlite3_value_frombind)
-WRAP_INT_SVALUE(1value_1nochange, sqlite3_value_nochange)
-WRAP_INT_SVALUE(1value_1numeric_1type, sqlite3_value_numeric_type)
-WRAP_INT_SVALUE(1value_1subtype, sqlite3_value_subtype)
-WRAP_INT_SVALUE(1value_1type, sqlite3_value_type)
+WRAP_INT_SVALUE(1value_1encoding, sqlite3_value_encoding,SQLITE_UTF8)
+WRAP_BOOL_SVALUE(1value_1frombind, sqlite3_value_frombind,0)
+WRAP_INT_SVALUE(1value_1nochange, sqlite3_value_nochange,0)
+WRAP_INT_SVALUE(1value_1numeric_1type, sqlite3_value_numeric_type,SQLITE_NULL)
+WRAP_INT_SVALUE(1value_1subtype, sqlite3_value_subtype,0)
+WRAP_INT_SVALUE(1value_1type, sqlite3_value_type,SQLITE_NULL)
#undef WRAP_BOOL_DB
#undef WRAP_BOOL_STMT
@@ -2122,6 +2157,7 @@ WRAP_INT_SVALUE(1value_1type, sqlite3_value_type)
#undef WRAP_INT_VOID
#undef WRAP_MUTF8_VOID
#undef WRAP_STR_STMT_INT
+#undef WRAP_STR_DB_INT
S3JniApi(sqlite3_aggregate_context(),jlong,1aggregate_1context)(
JniArgsEnvClass, jobject jCx, jboolean initialize
@@ -2366,7 +2402,7 @@ S3JniApi(sqlite3_bind_java_object(),jint,1bind_1java_1object)(
int rc = SQLITE_MISUSE;
if(pStmt){
- jobject const rv = val ? S3JniRefGlobal(val) : 0;
+ jobject const rv = S3JniRefGlobal(val);
if( rv ){
rc = sqlite3_bind_pointer(pStmt, ndx, rv, ResultJavaValuePtrStr,
S3Jni_jobject_finalizer);
@@ -2433,6 +2469,24 @@ S3JniApi(sqlite3_bind_text16(),jint,1bind_1text16)(
return (jint)rc;
}
+S3JniApi(sqlite3_bind_value(),jint,1bind_1value)(
+ JniArgsEnvClass, jlong jpStmt, jint ndx, jlong jpValue
+){
+ int rc = 0;
+ sqlite3_stmt * pStmt = S3JniLongPtr_sqlite3_stmt(jpStmt);
+ if( pStmt ){
+ sqlite3_value *v = S3JniLongPtr_sqlite3_value(jpValue);
+ if( v ){
+ rc = sqlite3_bind_value(pStmt, (int)ndx, v);
+ }else{
+ rc = sqlite3_bind_null(pStmt, (int)ndx);
+ }
+ }else{
+ rc = SQLITE_MISUSE;
+ }
+ return (jint)rc;
+}
+
S3JniApi(sqlite3_bind_zeroblob(),jint,1bind_1zeroblob)(
JniArgsEnvClass, jlong jpStmt, jint ndx, jint n
){
@@ -2616,6 +2670,10 @@ S3JniApi(sqlite3_cancel_auto_extension(),jboolean,1cancel_1auto_1extension)(
S3JniAutoExtension * ax;
jboolean rc = JNI_FALSE;
int i;
+
+ if( !jAutoExt ){
+ return rc;
+ }
S3JniAutoExt_mutex_enter;
/* This algo corresponds to the one in the core. */
for( i = SJG.autoExt.nExt-1; i >= 0; --i ){
@@ -2724,7 +2782,7 @@ S3JniApi(sqlite3_collation_needed(),jint,1collation_1needed)(
}else{
jclass const klazz = (*env)->GetObjectClass(env, jHook);
jmethodID const xCallback = (*env)->GetMethodID(
- env, klazz, "call", "(Lorg/sqlite/jni/sqlite3;ILjava/lang/String;)I"
+ env, klazz, "call", "(Lorg/sqlite/jni/capi/sqlite3;ILjava/lang/String;)I"
);
S3JniUnrefLocal(klazz);
S3JniIfThrew {
@@ -2778,8 +2836,8 @@ S3JniApi(sqlite3_column_text(),jbyteArray,1column_1text)(
JniArgsEnvClass, jobject jpStmt, jint ndx
){
sqlite3_stmt * const stmt = PtrGet_sqlite3_stmt(jpStmt);
- const unsigned char * const p = sqlite3_column_text(stmt, (int)ndx);
- const int n = sqlite3_column_bytes(stmt, (int)ndx);
+ const unsigned char * const p = stmt ? sqlite3_column_text(stmt, (int)ndx) : 0;
+ const int n = p ? sqlite3_column_bytes(stmt, (int)ndx) : 0;
return p ? s3jni_new_jbyteArray(p, n) : NULL;
}
@@ -2789,8 +2847,8 @@ S3JniApi(sqlite3_column_text(),jstring,1column_1text)(
JniArgsEnvClass, jobject jpStmt, jint ndx
){
sqlite3_stmt * const stmt = PtrGet_sqlite3_stmt(jpStmt);
- const unsigned char * const p = sqlite3_column_text(stmt, (int)ndx);
- const int n = sqlite3_column_bytes(stmt, (int)ndx);
+ const unsigned char * const p = stmt ? sqlite3_column_text(stmt, (int)ndx) : 0;
+ const int n = p ? sqlite3_column_bytes(stmt, (int)ndx) : 0;
return p ? s3jni_utf8_to_jstring( (const char *)p, n) : 0;
}
#endif
@@ -2799,8 +2857,8 @@ S3JniApi(sqlite3_column_text16(),jstring,1column_1text16)(
JniArgsEnvClass, jobject jpStmt, jint ndx
){
sqlite3_stmt * const stmt = PtrGet_sqlite3_stmt(jpStmt);
- const void * const p = sqlite3_column_text16(stmt, (int)ndx);
- const int n = sqlite3_column_bytes16(stmt, (int)ndx);
+ const void * const p = stmt ? sqlite3_column_text16(stmt, (int)ndx) : 0;
+ const int n = p ? sqlite3_column_bytes16(stmt, (int)ndx) : 0;
return s3jni_text16_to_jstring(env, p, n);
}
@@ -2808,7 +2866,8 @@ S3JniApi(sqlite3_column_value(),jobject,1column_1value)(
JniArgsEnvClass, jobject jpStmt, jint ndx
){
sqlite3_value * const sv =
- sqlite3_column_value(PtrGet_sqlite3_stmt(jpStmt), (int)ndx);
+ sqlite3_column_value(PtrGet_sqlite3_stmt(jpStmt), (int)ndx)
+ /* reminder: returns an SQL NULL if jpStmt==NULL */;
return new_java_sqlite3_value(env, sv);
}
@@ -2858,7 +2917,7 @@ static jobject s3jni_commit_rollback_hook(int isCommit, JNIEnv * const env,
S3JniDb_mutex_enter;
ps = S3JniDb_from_jlong(jpDb);
if( !ps ){
- s3jni_db_error(ps->pDb, SQLITE_NOMEM, 0);
+ s3jni_db_error(ps->pDb, SQLITE_MISUSE, 0);
S3JniDb_mutex_leave;
return 0;
}
@@ -2919,6 +2978,18 @@ S3JniApi(sqlite3_compileoption_get(),jstring,1compileoption_1get)(
return rv;
}
+S3JniApi(sqlite3_compileoption_used(),jboolean,1compileoption_1used)(
+ JniArgsEnvClass, jstring name
+){
+ const char *zUtf8 = s3jni_jstring_to_mutf8(name)
+ /* We know these to be ASCII, so MUTF-8 is fine (and
+ hypothetically faster to convert). */;
+ const jboolean rc =
+ 0==sqlite3_compileoption_used(zUtf8) ? JNI_FALSE : JNI_TRUE;
+ s3jni_mutf8_release(name, zUtf8);
+ return rc;
+}
+
S3JniApi(sqlite3_complete(),int,1complete)(
JniArgsEnvClass, jbyteArray jSql
){
@@ -2935,18 +3006,6 @@ S3JniApi(sqlite3_complete(),int,1complete)(
return rc;
}
-S3JniApi(sqlite3_compileoption_used(),jboolean,1compileoption_1used)(
- JniArgsEnvClass, jstring name
-){
- const char *zUtf8 = s3jni_jstring_to_mutf8(name)
- /* We know these to be ASCII, so MUTF-8 is fine (and
- hypothetically faster to convert). */;
- const jboolean rc =
- 0==sqlite3_compileoption_used(zUtf8) ? JNI_FALSE : JNI_TRUE;
- s3jni_mutf8_release(name, zUtf8);
- return rc;
-}
-
S3JniApi(sqlite3_config() /*for a small subset of options.*/,
jint,1config__I)(JniArgsEnvClass, jint n){
switch( n ){
@@ -3073,7 +3132,7 @@ S3JniApi(sqlite3_config() /* for SQLITE_CONFIG_SQLLOG */,
}else {
jclass const klazz = (*env)->GetObjectClass(env, jLog);
jmethodID const midCallback = (*env)->GetMethodID(env, klazz, "call",
- "(Lorg/sqlite/jni/sqlite3;"
+ "(Lorg/sqlite/jni/capi/sqlite3;"
"Ljava/lang/String;"
"I)V");
S3JniUnrefLocal(klazz);
@@ -3151,6 +3210,9 @@ S3JniApi(sqlite3_create_collation() sqlite3_create_collation_v2(),
int rc;
S3JniDb * ps;
+ if( !jDb || !name || !encodingTypeIsValid(eTextRep) ){
+ return (jint)SQLITE_MISUSE;
+ }
S3JniDb_mutex_enter;
ps = S3JniDb_from_java(jDb);
jclass const klazz = (*env)->GetObjectClass(env, oCollation);
@@ -3241,39 +3303,9 @@ error_cleanup:
return (jint)rc;
}
-S3JniApi(sqlite3_db_filename(),jstring,1db_1filename)(
- JniArgsEnvClass, jobject jDb, jstring jDbName
-){
- S3JniDb * const ps = S3JniDb_from_java(jDb);
- char *zDbName;
- jstring jRv = 0;
- int nStr = 0;
-
- if( !ps || !jDbName ){
- return 0;
- }
- zDbName = s3jni_jstring_to_utf8( jDbName, &nStr);
- if( zDbName ){
- char const * zRv = sqlite3_db_filename(ps->pDb, zDbName);
- sqlite3_free(zDbName);
- if( zRv ){
- jRv = s3jni_utf8_to_jstring( zRv, -1);
- }
- }
- return jRv;
-}
-
-S3JniApi(sqlite3_db_handle(),jobject,1db_1handle)(
- JniArgsEnvClass, jobject jpStmt
-){
- sqlite3_stmt * const pStmt = PtrGet_sqlite3_stmt(jpStmt);
- sqlite3 * const pDb = pStmt ? sqlite3_db_handle(pStmt) : 0;
- S3JniDb * const ps = pDb ? S3JniDb_from_c(pDb) : 0;
- return ps ? ps->jDb : 0;
-}
S3JniApi(sqlite3_db_config() /*for MAINDBNAME*/,
- jint,1db_1config__Lorg_sqlite_jni_sqlite3_2ILjava_lang_String_2
+ jint,1db_1config__Lorg_sqlite_jni_capi_sqlite3_2ILjava_lang_String_2
)(JniArgsEnvClass, jobject jDb, jint op, jstring jStr){
S3JniDb * const ps = S3JniDb_from_java(jDb);
int rc;
@@ -3298,6 +3330,7 @@ S3JniApi(sqlite3_db_config() /*for MAINDBNAME*/,
}
S3JniDb_mutex_leave;
break;
+ case 0:
default:
rc = SQLITE_MISUSE;
}
@@ -3309,7 +3342,7 @@ S3JniApi(
/* WARNING: openjdk v19 creates a different mangled name for this
** function than openjdk v8 does. We account for that by exporting
** both versions of the name. */
- jint,1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2
+ jint,1db_1config__Lorg_sqlite_jni_capi_sqlite3_2IILorg_sqlite_jni_capi_OutputPointer_Int32_2
)(
JniArgsEnvClass, jobject jDb, jint op, jint onOff, jobject jOut
){
@@ -3341,6 +3374,7 @@ S3JniApi(
}
break;
}
+ case 0:
default:
rc = SQLITE_MISUSE;
}
@@ -3353,14 +3387,56 @@ S3JniApi(
** install both names for this function then Java will not be able to
** find the function in both environments.
*/
-JniDecl(jint,1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_00024Int32_2)(
+JniDecl(jint,1db_1config__Lorg_sqlite_jni_capi_sqlite3_2IILorg_sqlite_jni_capi_OutputPointer_00024Int32_2)(
JniArgsEnvClass, jobject jDb, jint op, jint onOff, jobject jOut
){
- return JniFuncName(1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2)(
+ return JniFuncName(1db_1config__Lorg_sqlite_jni_capi_sqlite3_2IILorg_sqlite_jni_capi_OutputPointer_Int32_2)(
env, jKlazz, jDb, op, onOff, jOut
);
}
+S3JniApi(sqlite3_db_filename(),jstring,1db_1filename)(
+ JniArgsEnvClass, jobject jDb, jstring jDbName
+){
+ S3JniDb * const ps = S3JniDb_from_java(jDb);
+ char *zDbName;
+ jstring jRv = 0;
+ int nStr = 0;
+
+ if( !ps || !jDbName ){
+ return 0;
+ }
+ zDbName = s3jni_jstring_to_utf8( jDbName, &nStr);
+ if( zDbName ){
+ char const * zRv = sqlite3_db_filename(ps->pDb, zDbName);
+ sqlite3_free(zDbName);
+ if( zRv ){
+ jRv = s3jni_utf8_to_jstring( zRv, -1);
+ }
+ }
+ return jRv;
+}
+
+S3JniApi(sqlite3_db_handle(),jobject,1db_1handle)(
+ JniArgsEnvClass, jobject jpStmt
+){
+ sqlite3_stmt * const pStmt = PtrGet_sqlite3_stmt(jpStmt);
+ sqlite3 * const pDb = pStmt ? sqlite3_db_handle(pStmt) : 0;
+ S3JniDb * const ps = pDb ? S3JniDb_from_c(pDb) : 0;
+ return ps ? ps->jDb : 0;
+}
+
+S3JniApi(sqlite3_db_readonly(),jint,1db_1readonly)(
+ JniArgsEnvClass, jobject jDb, jstring jDbName
+){
+ int rc = 0;
+ S3JniDb * const ps = S3JniDb_from_java(jDb);
+ char *zDbName = jDbName ? s3jni_jstring_to_utf8( jDbName, 0 ) : 0;
+ rc = sqlite3_db_readonly(ps ? ps->pDb : 0, zDbName);
+ sqlite3_free(zDbName);
+ return (jint)rc;
+}
+
S3JniApi(sqlite3_db_release_memory(),int,1db_1release_1memory)(
JniArgsEnvClass, jobject jDb
){
@@ -3549,12 +3625,7 @@ S3JniApi(sqlite3_keyword_name(),jstring,1keyword_1name)(
S3JniApi(sqlite3_last_insert_rowid(),jlong,1last_1insert_1rowid)(
JniArgsEnvClass, jobject jpDb
){
- jlong rc = 0;
- sqlite3 * const pDb = PtrGet_sqlite3(jpDb);
- if( pDb ){
- rc = (jlong)sqlite3_last_insert_rowid(pDb);
- }
- return rc;
+ return (jlong)sqlite3_last_insert_rowid(PtrGet_sqlite3(jpDb));
}
S3JniApi(sqlite3_limit(),jint,1limit)(
@@ -3574,6 +3645,7 @@ static int s3jni_open_pre(JNIEnv * const env, S3JniEnv **jc,
S3JniDb ** ps){
int rc = 0;
jobject jDb = 0;
+
*jc = S3JniEnv_get();
if( !*jc ){
rc = SQLITE_NOMEM;
@@ -3605,7 +3677,7 @@ end:
/*
** Post-open() code common to both the sqlite3_open() and
** sqlite3_open_v2() bindings. ps->jDb must be the
-** org.sqlite.jni.sqlite3 object which will hold the db's native
+** org.sqlite.jni.capi.sqlite3 object which will hold the db's native
** pointer. theRc must be the result code of the open() op. If
** *ppDb is NULL then ps is set aside and its state cleared,
** else ps is associated with *ppDb. If *ppDb is not NULL then
@@ -3650,6 +3722,8 @@ S3JniApi(sqlite3_open(),jint,1open)(
S3JniDb * ps = 0;
S3JniEnv * jc = 0;
int rc;
+
+ if( 0==jOut ) return SQLITE_MISUSE;
rc = s3jni_open_pre(env, &jc, strName, &zName, &ps);
if( 0==rc ){
rc = s3jni_open_post(env, jc, ps, &pOut, jOut,
@@ -3662,14 +3736,17 @@ S3JniApi(sqlite3_open(),jint,1open)(
S3JniApi(sqlite3_open_v2(),jint,1open_1v2)(
JniArgsEnvClass, jstring strName,
- jobject jOut, jint flags, jstring strVfs
+ jobject jOut, jint flags, jstring strVfs
){
sqlite3 * pOut = 0;
char *zName = 0;
S3JniDb * ps = 0;
S3JniEnv * jc = 0;
char *zVfs = 0;
- int rc = s3jni_open_pre(env, &jc, strName, &zName, &ps);
+ int rc;
+
+ if( 0==jOut ) return SQLITE_MISUSE;
+ rc = s3jni_open_pre(env, &jc, strName, &zName, &ps);
if( 0==rc ){
if( strVfs ){
zVfs = s3jni_jstring_to_utf8( strVfs, 0);
@@ -3696,10 +3773,15 @@ jint sqlite3_jni_prepare_v123( int prepVersion, JNIEnv * const env, jclass self,
sqlite3_stmt * pStmt = 0;
jobject jStmt = 0;
const char * zTail = 0;
- jbyte * const pBuf = s3jni_jbyteArray_bytes(baSql);
+ sqlite3 * const pDb = S3JniLongPtr_sqlite3(jpDb);
+ jbyte * const pBuf = pDb ? s3jni_jbyteArray_bytes(baSql) : 0;
int rc = SQLITE_ERROR;
+
assert(prepVersion==1 || prepVersion==2 || prepVersion==3);
- if( !pBuf ){
+ if( !pDb || !jOutStmt ){
+ rc = SQLITE_MISUSE;
+ goto end;
+ }else if( !pBuf ){
rc = baSql ? SQLITE_NOMEM : SQLITE_MISUSE;
goto end;
}
@@ -3709,13 +3791,13 @@ jint sqlite3_jni_prepare_v123( int prepVersion, JNIEnv * const env, jclass self,
goto end;
}
switch( prepVersion ){
- case 1: rc = sqlite3_prepare(S3JniLongPtr_sqlite3(jpDb), (const char *)pBuf,
+ case 1: rc = sqlite3_prepare(pDb, (const char *)pBuf,
(int)nMax, &pStmt, &zTail);
break;
- case 2: rc = sqlite3_prepare_v2(S3JniLongPtr_sqlite3(jpDb), (const char *)pBuf,
+ case 2: rc = sqlite3_prepare_v2(pDb, (const char *)pBuf,
(int)nMax, &pStmt, &zTail);
break;
- case 3: rc = sqlite3_prepare_v3(S3JniLongPtr_sqlite3(jpDb), (const char *)pBuf,
+ case 3: rc = sqlite3_prepare_v3(pDb, (const char *)pBuf,
(int)nMax, (unsigned int)prepFlags,
&pStmt, &zTail);
break;
@@ -3745,8 +3827,10 @@ end:
S3JniUnrefLocal(jStmt);
jStmt = 0;
}
- OutputPointer_set_obj(env, S3JniNph(OutputPointer_sqlite3_stmt),
- jOutStmt, jStmt);
+ if( jOutStmt ){
+ OutputPointer_set_obj(env, S3JniNph(OutputPointer_sqlite3_stmt),
+ jOutStmt, jStmt);
+ }
return (jint)rc;
}
S3JniApi(sqlite3_prepare(),jint,1prepare)(
@@ -3896,7 +3980,7 @@ static jobject s3jni_updatepre_hook(JNIEnv * env, int isPre, jlong jpDb, jobject
klazz = (*env)->GetObjectClass(env, jHook);
xCallback = isPre
? (*env)->GetMethodID(env, klazz, "call",
- "(Lorg/sqlite/jni/sqlite3;"
+ "(Lorg/sqlite/jni/capi/sqlite3;"
"I"
"Ljava/lang/String;"
"Ljava/lang/String;"
@@ -4070,7 +4154,10 @@ static void result_blob_text(int as64 /* true for text64/blob64() mode */,
JNIEnv * const env, sqlite3_context *pCx,
jbyteArray jBa, jlong nMax){
int const asBlob = 0==eTextRep;
- if( jBa ){
+ if( !pCx ){
+ /* We should arguably emit a warning here. But where to log it? */
+ return;
+ }else if( jBa ){
jbyte * const pBuf = s3jni_jbyteArray_bytes(jBa);
jsize nBa = (*env)->GetArrayLength(env, jBa);
if( nMax>=0 && nBa>(jsize)nMax ){
@@ -4086,7 +4173,7 @@ static void result_blob_text(int as64 /* true for text64/blob64() mode */,
Note that the text64() interfaces take an unsigned value for
the length, which Java does not support. This binding takes
the approach of passing on negative values to the C API,
- which will, in turn fail with SQLITE_TOOBIG at some later
+ which will in turn fail with SQLITE_TOOBIG at some later
point (recall that the sqlite3_result_xyz() family do not
have result values).
*/
@@ -4220,10 +4307,12 @@ S3JniApi(sqlite3_result_int64(),void,1result_1int64)(
S3JniApi(sqlite3_result_java_object(),void,1result_1java_1object)(
JniArgsEnvClass, jobject jpCx, jobject v
){
- if( v ){
+ sqlite3_context * pCx = PtrGet_sqlite3_context(jpCx);
+ if( !pCx ) return;
+ else if( v ){
jobject const rjv = S3JniRefGlobal(v);
if( rjv ){
- sqlite3_result_pointer(PtrGet_sqlite3_context(jpCx), rjv,
+ sqlite3_result_pointer(pCx, rjv,
ResultJavaValuePtrStr, S3Jni_jobject_finalizer);
}else{
sqlite3_result_error_nomem(PtrGet_sqlite3_context(jpCx));
@@ -4469,7 +4558,6 @@ static int s3jni_strlike_glob(int isLike, JNIEnv *const env,
jbyte * const pG = s3jni_jbyteArray_bytes(baG);
jbyte * const pT = pG ? s3jni_jbyteArray_bytes(baT) : 0;
- s3jni_oom_fatal(pT);
/* Note that we're relying on the byte arrays having been
NUL-terminated on the Java side. */
rc = isLike
@@ -4509,12 +4597,8 @@ S3JniApi(sqlite3_sql(),jstring,1sql)(
S3JniApi(sqlite3_step(),jint,1step)(
JniArgsEnvClass,jobject jStmt
){
- int rc = SQLITE_MISUSE;
sqlite3_stmt * const pStmt = PtrGet_sqlite3_stmt(jStmt);
- if( pStmt ){
- rc = sqlite3_step(pStmt);
- }
- return rc;
+ return pStmt ? (jint)sqlite3_step(pStmt) : (jint)SQLITE_MISUSE;
}
S3JniApi(sqlite3_table_column_metadata(),int,1table_1column_1metadata)(
@@ -4529,11 +4613,12 @@ S3JniApi(sqlite3_table_column_metadata(),int,1table_1column_1metadata)(
int pNotNull = 0, pPrimaryKey = 0, pAutoinc = 0;
int rc;
- if( !db || !jDbName || !jTableName || !jColumnName ) return SQLITE_MISUSE;
+ if( !db || !jDbName || !jTableName ) return SQLITE_MISUSE;
zDbName = s3jni_jstring_to_utf8(jDbName,0);
zTableName = zDbName ? s3jni_jstring_to_utf8(jTableName,0) : 0;
- zColumnName = zTableName ? s3jni_jstring_to_utf8(jColumnName,0) : 0;
- rc = zColumnName
+ zColumnName = (zTableName && jColumnName)
+ ? s3jni_jstring_to_utf8(jColumnName,0) : 0;
+ rc = zTableName
? sqlite3_table_column_metadata(db, zDbName, zTableName,
zColumnName, &pzDataType, &pzCollSeq,
&pNotNull, &pPrimaryKey, &pAutoinc)
@@ -4693,8 +4778,8 @@ S3JniApi(sqlite3_value_blob(),jbyteArray,1value_1blob)(
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
- const jbyte * pBytes = sqlite3_value_blob(sv);
- int const nLen = sqlite3_value_bytes(sv);
+ const jbyte * pBytes = sv ? sqlite3_value_blob(sv) : 0;
+ int const nLen = pBytes ? sqlite3_value_bytes(sv) : 0;
s3jni_oom_check( nLen ? !!pBytes : 1 );
return pBytes
@@ -4702,52 +4787,80 @@ S3JniApi(sqlite3_value_blob(),jbyteArray,1value_1blob)(
: NULL;
}
+S3JniApi(sqlite3_value_bytes(),int,1value_1bytes)(
+ JniArgsEnvClass, jlong jpSVal
+){
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ return sv ? sqlite3_value_bytes(sv) : 0;
+}
+
+S3JniApi(sqlite3_value_bytes16(),int,1value_1bytes16)(
+ JniArgsEnvClass, jlong jpSVal
+){
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ return sv ? sqlite3_value_bytes16(sv) : 0;
+}
+
S3JniApi(sqlite3_value_double(),jdouble,1value_1double)(
JniArgsEnvClass, jlong jpSVal
){
- return (jdouble) sqlite3_value_double(S3JniLongPtr_sqlite3_value(jpSVal));
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ return (jdouble) (sv ? sqlite3_value_double(sv) : 0.0);
}
S3JniApi(sqlite3_value_dup(),jobject,1value_1dup)(
JniArgsEnvClass, jlong jpSVal
){
- sqlite3_value * const sv = sqlite3_value_dup(S3JniLongPtr_sqlite3_value(jpSVal));
- return sv ? new_java_sqlite3_value(env, sv) : 0;
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ sqlite3_value * const sd = sv ? sqlite3_value_dup(sv) : 0;
+ jobject rv = sd ? new_java_sqlite3_value(env, sd) : 0;
+ if( sd && !rv ) {
+ /* OOM */
+ sqlite3_value_free(sd);
+ }
+ return rv;
}
S3JniApi(sqlite3_value_free(),void,1value_1free)(
JniArgsEnvClass, jlong jpSVal
){
- sqlite3_value_free(S3JniLongPtr_sqlite3_value(jpSVal));
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ if( sv ){
+ sqlite3_value_free(sv);
+ }
}
S3JniApi(sqlite3_value_int(),jint,1value_1int)(
JniArgsEnvClass, jlong jpSVal
){
- return (jint) sqlite3_value_int(S3JniLongPtr_sqlite3_value(jpSVal));
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ return (jint) (sv ? sqlite3_value_int(sv) : 0);
}
S3JniApi(sqlite3_value_int64(),jlong,1value_1int64)(
JniArgsEnvClass, jlong jpSVal
){
- return (jlong) sqlite3_value_int64(S3JniLongPtr_sqlite3_value(jpSVal));
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ return (jlong) (sv ? sqlite3_value_int64(sv) : 0LL);
}
S3JniApi(sqlite3_value_java_object(),jobject,1value_1java_1object)(
JniArgsEnvClass, jlong jpSVal
){
- return sqlite3_value_pointer(S3JniLongPtr_sqlite3_value(jpSVal),
- ResultJavaValuePtrStr);
+ sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
+ return sv
+ ? sqlite3_value_pointer(sv, ResultJavaValuePtrStr)
+ : 0;
}
S3JniApi(sqlite3_value_text(),jbyteArray,1value_1text)(
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
- const unsigned char * const p = sqlite3_value_text(sv);
- int const n = sqlite3_value_bytes(sv);
+ const unsigned char * const p = sv ? sqlite3_value_text(sv) : 0;
+ int const n = p ? sqlite3_value_bytes(sv) : 0;
return p ? s3jni_new_jbyteArray(p, n) : 0;
}
@@ -4757,8 +4870,8 @@ S3JniApi(sqlite3_value_text(),jstring,1value_1text)(
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
- const unsigned char * const p = sqlite3_value_text(sv);
- int const n = sqlite3_value_bytes(sv);
+ const unsigned char * const p = sv ? sqlite3_value_text(sv) : 0;
+ int const n = p ? sqlite3_value_bytes(sv) : 0;
return p ? s3jni_utf8_to_jstring( (const char *)p, n) : 0;
}
#endif
@@ -4767,9 +4880,9 @@ S3JniApi(sqlite3_value_text16(),jstring,1value_1text16)(
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
- const int n = sqlite3_value_bytes16(sv);
- const void * const p = sqlite3_value_text16(sv);
- return s3jni_text16_to_jstring(env, p, n);
+ const int n = sv ? sqlite3_value_bytes16(sv) : 0;
+ const void * const p = sv ? sqlite3_value_text16(sv) : 0;
+ return p ? s3jni_text16_to_jstring(env, p, n) : 0;
}
JniDecl(void,1jni_1internal_1details)(JniArgsEnvClass){
@@ -4915,8 +5028,8 @@ static Fts5JniAux * Fts5JniAux_alloc(JNIEnv * const env, jobject jObj){
s->jmid = (*env)->GetMethodID(env, klazz, "call",
"(Lorg/sqlite/jni/fts5/Fts5ExtensionApi;"
"Lorg/sqlite/jni/fts5/Fts5Context;"
- "Lorg/sqlite/jni/sqlite3_context;"
- "[Lorg/sqlite/jni/sqlite3_value;)V");
+ "Lorg/sqlite/jni/capi/sqlite3_context;"
+ "[Lorg/sqlite/jni/capi/sqlite3_value;)V");
S3JniUnrefLocal(klazz);
S3JniIfThrew{
S3JniExceptionReport;
@@ -5079,6 +5192,7 @@ static void s3jni_fts5_extension_function(Fts5ExtensionApi const *pApi,
S3JniIfThrew{
udf_report_exception(env, 1, pCx, pAux->zFuncName, "call");
}
+ udf_unargs(env, jpCx, argc, jArgv);
S3JniUnrefLocal(jpFts);
S3JniUnrefLocal(jpCx);
S3JniUnrefLocal(jArgv);
@@ -5632,7 +5746,7 @@ static int SQLTester_strnotglob(const char *zGlob, const char *z){
}
JNIEXPORT jint JNICALL
-Java_org_sqlite_jni_SQLTester_strglob(
+Java_org_sqlite_jni_capi_SQLTester_strglob(
JniArgsEnvClass, jbyteArray baG, jbyteArray baT
){
int rc = 0;
@@ -5659,7 +5773,7 @@ static int SQLTester_auto_extension(sqlite3 *pDb, const char **pzErr,
}
JNIEXPORT void JNICALL
-Java_org_sqlite_jni_SQLTester_installCustomExtensions(JniArgsEnvClass){
+Java_org_sqlite_jni_capi_SQLTester_installCustomExtensions(JniArgsEnvClass){
sqlite3_auto_extension( (void(*)(void))SQLTester_auto_extension );
}
@@ -5673,7 +5787,7 @@ Java_org_sqlite_jni_SQLTester_installCustomExtensions(JniArgsEnvClass){
** state.
*/
JNIEXPORT void JNICALL
-Java_org_sqlite_jni_CApi_init(JniArgsEnvClass){
+Java_org_sqlite_jni_capi_CApi_init(JniArgsEnvClass){
jclass klazz;
memset(&S3JniGlobal, 0, sizeof(S3JniGlobal));
@@ -5715,7 +5829,7 @@ Java_org_sqlite_jni_CApi_init(JniArgsEnvClass){
#ifdef SQLITE_ENABLE_FTS5
klazz = (*env)->FindClass(env, "org/sqlite/jni/fts5/Fts5PhraseIter");
- S3JniExceptionIsFatal("Error getting reference to org.sqlite.jni.Fts5PhraseIter.");
+ S3JniExceptionIsFatal("Error getting reference to org.sqlite.jni.fts5.Fts5PhraseIter.");
SJG.fts5.jPhraseIter.fidA = (*env)->GetFieldID(env, klazz, "a", "J");
S3JniExceptionIsFatal("Cannot get Fts5PhraseIter.a field.");
SJG.fts5.jPhraseIter.fidB = (*env)->GetFieldID(env, klazz, "b", "J");
diff --git a/ext/jni/src/c/sqlite3-jni.h b/ext/jni/src/c/sqlite3-jni.h
index 6d38adf06e..bf6df7ac94 100644
--- a/ext/jni/src/c/sqlite3-jni.h
+++ b/ext/jni/src/c/sqlite3-jni.h
@@ -1,2118 +1,2122 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
-/* Header for class org_sqlite_jni_CApi */
+/* Header for class org_sqlite_jni_capi_CApi */
-#ifndef _Included_org_sqlite_jni_CApi
-#define _Included_org_sqlite_jni_CApi
+#ifndef _Included_org_sqlite_jni_capi_CApi
+#define _Included_org_sqlite_jni_capi_CApi
#ifdef __cplusplus
extern "C" {
#endif
-#undef org_sqlite_jni_CApi_SQLITE_ACCESS_EXISTS
-#define org_sqlite_jni_CApi_SQLITE_ACCESS_EXISTS 0L
-#undef org_sqlite_jni_CApi_SQLITE_ACCESS_READWRITE
-#define org_sqlite_jni_CApi_SQLITE_ACCESS_READWRITE 1L
-#undef org_sqlite_jni_CApi_SQLITE_ACCESS_READ
-#define org_sqlite_jni_CApi_SQLITE_ACCESS_READ 2L
-#undef org_sqlite_jni_CApi_SQLITE_DENY
-#define org_sqlite_jni_CApi_SQLITE_DENY 1L
-#undef org_sqlite_jni_CApi_SQLITE_IGNORE
-#define org_sqlite_jni_CApi_SQLITE_IGNORE 2L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_INDEX
-#define org_sqlite_jni_CApi_SQLITE_CREATE_INDEX 1L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_TABLE
-#define org_sqlite_jni_CApi_SQLITE_CREATE_TABLE 2L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_INDEX
-#define org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_INDEX 3L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_TABLE
-#define org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_TABLE 4L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_TRIGGER
-#define org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_TRIGGER 5L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_VIEW
-#define org_sqlite_jni_CApi_SQLITE_CREATE_TEMP_VIEW 6L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_TRIGGER
-#define org_sqlite_jni_CApi_SQLITE_CREATE_TRIGGER 7L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_VIEW
-#define org_sqlite_jni_CApi_SQLITE_CREATE_VIEW 8L
-#undef org_sqlite_jni_CApi_SQLITE_DELETE
-#define org_sqlite_jni_CApi_SQLITE_DELETE 9L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_INDEX
-#define org_sqlite_jni_CApi_SQLITE_DROP_INDEX 10L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_TABLE
-#define org_sqlite_jni_CApi_SQLITE_DROP_TABLE 11L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_TEMP_INDEX
-#define org_sqlite_jni_CApi_SQLITE_DROP_TEMP_INDEX 12L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_TEMP_TABLE
-#define org_sqlite_jni_CApi_SQLITE_DROP_TEMP_TABLE 13L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_TEMP_TRIGGER
-#define org_sqlite_jni_CApi_SQLITE_DROP_TEMP_TRIGGER 14L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_TEMP_VIEW
-#define org_sqlite_jni_CApi_SQLITE_DROP_TEMP_VIEW 15L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_TRIGGER
-#define org_sqlite_jni_CApi_SQLITE_DROP_TRIGGER 16L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_VIEW
-#define org_sqlite_jni_CApi_SQLITE_DROP_VIEW 17L
-#undef org_sqlite_jni_CApi_SQLITE_INSERT
-#define org_sqlite_jni_CApi_SQLITE_INSERT 18L
-#undef org_sqlite_jni_CApi_SQLITE_PRAGMA
-#define org_sqlite_jni_CApi_SQLITE_PRAGMA 19L
-#undef org_sqlite_jni_CApi_SQLITE_READ
-#define org_sqlite_jni_CApi_SQLITE_READ 20L
-#undef org_sqlite_jni_CApi_SQLITE_SELECT
-#define org_sqlite_jni_CApi_SQLITE_SELECT 21L
-#undef org_sqlite_jni_CApi_SQLITE_TRANSACTION
-#define org_sqlite_jni_CApi_SQLITE_TRANSACTION 22L
-#undef org_sqlite_jni_CApi_SQLITE_UPDATE
-#define org_sqlite_jni_CApi_SQLITE_UPDATE 23L
-#undef org_sqlite_jni_CApi_SQLITE_ATTACH
-#define org_sqlite_jni_CApi_SQLITE_ATTACH 24L
-#undef org_sqlite_jni_CApi_SQLITE_DETACH
-#define org_sqlite_jni_CApi_SQLITE_DETACH 25L
-#undef org_sqlite_jni_CApi_SQLITE_ALTER_TABLE
-#define org_sqlite_jni_CApi_SQLITE_ALTER_TABLE 26L
-#undef org_sqlite_jni_CApi_SQLITE_REINDEX
-#define org_sqlite_jni_CApi_SQLITE_REINDEX 27L
-#undef org_sqlite_jni_CApi_SQLITE_ANALYZE
-#define org_sqlite_jni_CApi_SQLITE_ANALYZE 28L
-#undef org_sqlite_jni_CApi_SQLITE_CREATE_VTABLE
-#define org_sqlite_jni_CApi_SQLITE_CREATE_VTABLE 29L
-#undef org_sqlite_jni_CApi_SQLITE_DROP_VTABLE
-#define org_sqlite_jni_CApi_SQLITE_DROP_VTABLE 30L
-#undef org_sqlite_jni_CApi_SQLITE_FUNCTION
-#define org_sqlite_jni_CApi_SQLITE_FUNCTION 31L
-#undef org_sqlite_jni_CApi_SQLITE_SAVEPOINT
-#define org_sqlite_jni_CApi_SQLITE_SAVEPOINT 32L
-#undef org_sqlite_jni_CApi_SQLITE_RECURSIVE
-#define org_sqlite_jni_CApi_SQLITE_RECURSIVE 33L
-#undef org_sqlite_jni_CApi_SQLITE_STATIC
-#define org_sqlite_jni_CApi_SQLITE_STATIC 0LL
-#undef org_sqlite_jni_CApi_SQLITE_TRANSIENT
-#define org_sqlite_jni_CApi_SQLITE_TRANSIENT -1LL
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESETSTART_INVERT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESETSTART_INVERT 2L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESETAPPLY_NOSAVEPOINT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESETAPPLY_NOSAVEPOINT 1L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESETAPPLY_INVERT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESETAPPLY_INVERT 2L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESETAPPLY_IGNORENOOP
-#define org_sqlite_jni_CApi_SQLITE_CHANGESETAPPLY_IGNORENOOP 4L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_DATA
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_DATA 1L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_NOTFOUND
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_NOTFOUND 2L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_CONFLICT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_CONFLICT 3L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_CONSTRAINT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_CONSTRAINT 4L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_FOREIGN_KEY
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_FOREIGN_KEY 5L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_OMIT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_OMIT 0L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_REPLACE
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_REPLACE 1L
-#undef org_sqlite_jni_CApi_SQLITE_CHANGESET_ABORT
-#define org_sqlite_jni_CApi_SQLITE_CHANGESET_ABORT 2L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_SINGLETHREAD
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_SINGLETHREAD 1L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_MULTITHREAD
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_MULTITHREAD 2L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_SERIALIZED
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_SERIALIZED 3L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_MALLOC
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_MALLOC 4L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_GETMALLOC
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_GETMALLOC 5L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_SCRATCH
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_SCRATCH 6L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_PAGECACHE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_PAGECACHE 7L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_HEAP
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_HEAP 8L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_MEMSTATUS
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_MEMSTATUS 9L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_MUTEX
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_MUTEX 10L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_GETMUTEX
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_GETMUTEX 11L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_LOOKASIDE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_LOOKASIDE 13L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_PCACHE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_PCACHE 14L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_GETPCACHE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_GETPCACHE 15L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_LOG
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_LOG 16L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_URI
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_URI 17L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_PCACHE2
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_PCACHE2 18L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_GETPCACHE2
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_GETPCACHE2 19L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_COVERING_INDEX_SCAN
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_COVERING_INDEX_SCAN 20L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_SQLLOG
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_SQLLOG 21L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_MMAP_SIZE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_MMAP_SIZE 22L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_WIN32_HEAPSIZE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_WIN32_HEAPSIZE 23L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_PCACHE_HDRSZ
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_PCACHE_HDRSZ 24L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_PMASZ
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_PMASZ 25L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_STMTJRNL_SPILL
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_STMTJRNL_SPILL 26L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_SMALL_MALLOC
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_SMALL_MALLOC 27L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_SORTERREF_SIZE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_SORTERREF_SIZE 28L
-#undef org_sqlite_jni_CApi_SQLITE_CONFIG_MEMDB_MAXSIZE
-#define org_sqlite_jni_CApi_SQLITE_CONFIG_MEMDB_MAXSIZE 29L
-#undef org_sqlite_jni_CApi_SQLITE_INTEGER
-#define org_sqlite_jni_CApi_SQLITE_INTEGER 1L
-#undef org_sqlite_jni_CApi_SQLITE_FLOAT
-#define org_sqlite_jni_CApi_SQLITE_FLOAT 2L
-#undef org_sqlite_jni_CApi_SQLITE_TEXT
-#define org_sqlite_jni_CApi_SQLITE_TEXT 3L
-#undef org_sqlite_jni_CApi_SQLITE_BLOB
-#define org_sqlite_jni_CApi_SQLITE_BLOB 4L
-#undef org_sqlite_jni_CApi_SQLITE_NULL
-#define org_sqlite_jni_CApi_SQLITE_NULL 5L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_MAINDBNAME
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_MAINDBNAME 1000L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_LOOKASIDE
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_LOOKASIDE 1001L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_FKEY
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_FKEY 1002L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_TRIGGER
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_TRIGGER 1003L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_QPSG
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_QPSG 1007L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_TRIGGER_EQP
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_TRIGGER_EQP 1008L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_RESET_DATABASE
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_RESET_DATABASE 1009L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_DEFENSIVE
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_DEFENSIVE 1010L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_WRITABLE_SCHEMA
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_DQS_DML
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_DQS_DML 1013L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_DQS_DDL
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_DQS_DDL 1014L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_VIEW
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_ENABLE_VIEW 1015L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_TRUSTED_SCHEMA
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_STMT_SCANSTATUS
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_STMT_SCANSTATUS 1018L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_REVERSE_SCANORDER
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_REVERSE_SCANORDER 1019L
-#undef org_sqlite_jni_CApi_SQLITE_DBCONFIG_MAX
-#define org_sqlite_jni_CApi_SQLITE_DBCONFIG_MAX 1019L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_USED
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_USED 0L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_USED
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_USED 1L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_SCHEMA_USED
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_SCHEMA_USED 2L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_STMT_USED
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_STMT_USED 3L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_HIT
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_HIT 4L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_HIT
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_HIT 7L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_MISS
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_MISS 8L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_WRITE
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_WRITE 9L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_DEFERRED_FKS
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_DEFERRED_FKS 10L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_USED_SHARED
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_USED_SHARED 11L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_SPILL
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_CACHE_SPILL 12L
-#undef org_sqlite_jni_CApi_SQLITE_DBSTATUS_MAX
-#define org_sqlite_jni_CApi_SQLITE_DBSTATUS_MAX 12L
-#undef org_sqlite_jni_CApi_SQLITE_UTF8
-#define org_sqlite_jni_CApi_SQLITE_UTF8 1L
-#undef org_sqlite_jni_CApi_SQLITE_UTF16LE
-#define org_sqlite_jni_CApi_SQLITE_UTF16LE 2L
-#undef org_sqlite_jni_CApi_SQLITE_UTF16BE
-#define org_sqlite_jni_CApi_SQLITE_UTF16BE 3L
-#undef org_sqlite_jni_CApi_SQLITE_UTF16
-#define org_sqlite_jni_CApi_SQLITE_UTF16 4L
-#undef org_sqlite_jni_CApi_SQLITE_UTF16_ALIGNED
-#define org_sqlite_jni_CApi_SQLITE_UTF16_ALIGNED 8L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_LOCKSTATE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_LOCKSTATE 1L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_GET_LOCKPROXYFILE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_GET_LOCKPROXYFILE 2L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_SET_LOCKPROXYFILE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_SET_LOCKPROXYFILE 3L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_LAST_ERRNO
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_LAST_ERRNO 4L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_SIZE_HINT
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_SIZE_HINT 5L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_CHUNK_SIZE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_CHUNK_SIZE 6L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_FILE_POINTER
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_FILE_POINTER 7L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_SYNC_OMITTED
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_SYNC_OMITTED 8L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_WIN32_AV_RETRY
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_WIN32_AV_RETRY 9L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_PERSIST_WAL
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_PERSIST_WAL 10L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_OVERWRITE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_OVERWRITE 11L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_VFSNAME
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_VFSNAME 12L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_POWERSAFE_OVERWRITE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_POWERSAFE_OVERWRITE 13L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_PRAGMA
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_PRAGMA 14L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_BUSYHANDLER
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_BUSYHANDLER 15L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_TEMPFILENAME
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_TEMPFILENAME 16L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_MMAP_SIZE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_MMAP_SIZE 18L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_TRACE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_TRACE 19L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_HAS_MOVED
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_HAS_MOVED 20L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_SYNC
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_SYNC 21L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_COMMIT_PHASETWO
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_COMMIT_PHASETWO 22L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_WIN32_SET_HANDLE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_WIN32_SET_HANDLE 23L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_WAL_BLOCK
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_WAL_BLOCK 24L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_ZIPVFS
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_ZIPVFS 25L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_RBU
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_RBU 26L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_VFS_POINTER
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_VFS_POINTER 27L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_JOURNAL_POINTER
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_JOURNAL_POINTER 28L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_WIN32_GET_HANDLE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_WIN32_GET_HANDLE 29L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_PDB
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_PDB 30L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_BEGIN_ATOMIC_WRITE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_COMMIT_ATOMIC_WRITE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_LOCK_TIMEOUT
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_LOCK_TIMEOUT 34L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_DATA_VERSION
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_DATA_VERSION 35L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_SIZE_LIMIT
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_SIZE_LIMIT 36L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_CKPT_DONE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_CKPT_DONE 37L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_RESERVE_BYTES
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_RESERVE_BYTES 38L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_CKPT_START
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_CKPT_START 39L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_EXTERNAL_READER
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_EXTERNAL_READER 40L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_CKSM_FILE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_CKSM_FILE 41L
-#undef org_sqlite_jni_CApi_SQLITE_FCNTL_RESET_CACHE
-#define org_sqlite_jni_CApi_SQLITE_FCNTL_RESET_CACHE 42L
-#undef org_sqlite_jni_CApi_SQLITE_LOCK_NONE
-#define org_sqlite_jni_CApi_SQLITE_LOCK_NONE 0L
-#undef org_sqlite_jni_CApi_SQLITE_LOCK_SHARED
-#define org_sqlite_jni_CApi_SQLITE_LOCK_SHARED 1L
-#undef org_sqlite_jni_CApi_SQLITE_LOCK_RESERVED
-#define org_sqlite_jni_CApi_SQLITE_LOCK_RESERVED 2L
-#undef org_sqlite_jni_CApi_SQLITE_LOCK_PENDING
-#define org_sqlite_jni_CApi_SQLITE_LOCK_PENDING 3L
-#undef org_sqlite_jni_CApi_SQLITE_LOCK_EXCLUSIVE
-#define org_sqlite_jni_CApi_SQLITE_LOCK_EXCLUSIVE 4L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC 1L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC512
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC512 2L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC1K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC1K 4L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC2K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC2K 8L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC4K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC4K 16L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC8K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC8K 32L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC16K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC16K 64L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC32K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC32K 128L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC64K
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_ATOMIC64K 256L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_SAFE_APPEND
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_SAFE_APPEND 512L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_SEQUENTIAL
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_SEQUENTIAL 1024L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 2048L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_POWERSAFE_OVERWRITE
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_POWERSAFE_OVERWRITE 4096L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_IMMUTABLE
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_IMMUTABLE 8192L
-#undef org_sqlite_jni_CApi_SQLITE_IOCAP_BATCH_ATOMIC
-#define org_sqlite_jni_CApi_SQLITE_IOCAP_BATCH_ATOMIC 16384L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_LENGTH
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_LENGTH 0L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_SQL_LENGTH
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_SQL_LENGTH 1L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_COLUMN
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_COLUMN 2L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_EXPR_DEPTH
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_EXPR_DEPTH 3L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_COMPOUND_SELECT
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_COMPOUND_SELECT 4L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_VDBE_OP
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_VDBE_OP 5L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_FUNCTION_ARG
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_FUNCTION_ARG 6L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_ATTACHED
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_ATTACHED 7L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_LIKE_PATTERN_LENGTH
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_VARIABLE_NUMBER
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_VARIABLE_NUMBER 9L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_TRIGGER_DEPTH
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_TRIGGER_DEPTH 10L
-#undef org_sqlite_jni_CApi_SQLITE_LIMIT_WORKER_THREADS
-#define org_sqlite_jni_CApi_SQLITE_LIMIT_WORKER_THREADS 11L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_READONLY
-#define org_sqlite_jni_CApi_SQLITE_OPEN_READONLY 1L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_READWRITE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_READWRITE 2L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_CREATE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_CREATE 4L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_URI
-#define org_sqlite_jni_CApi_SQLITE_OPEN_URI 64L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_MEMORY
-#define org_sqlite_jni_CApi_SQLITE_OPEN_MEMORY 128L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_NOMUTEX
-#define org_sqlite_jni_CApi_SQLITE_OPEN_NOMUTEX 32768L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_FULLMUTEX
-#define org_sqlite_jni_CApi_SQLITE_OPEN_FULLMUTEX 65536L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_SHAREDCACHE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_SHAREDCACHE 131072L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_PRIVATECACHE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_PRIVATECACHE 262144L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_EXRESCODE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_EXRESCODE 33554432L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_NOFOLLOW
-#define org_sqlite_jni_CApi_SQLITE_OPEN_NOFOLLOW 16777216L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_MAIN_DB
-#define org_sqlite_jni_CApi_SQLITE_OPEN_MAIN_DB 256L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_MAIN_JOURNAL
-#define org_sqlite_jni_CApi_SQLITE_OPEN_MAIN_JOURNAL 2048L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_TEMP_DB
-#define org_sqlite_jni_CApi_SQLITE_OPEN_TEMP_DB 512L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_TEMP_JOURNAL
-#define org_sqlite_jni_CApi_SQLITE_OPEN_TEMP_JOURNAL 4096L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_TRANSIENT_DB
-#define org_sqlite_jni_CApi_SQLITE_OPEN_TRANSIENT_DB 1024L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_SUBJOURNAL
-#define org_sqlite_jni_CApi_SQLITE_OPEN_SUBJOURNAL 8192L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_SUPER_JOURNAL
-#define org_sqlite_jni_CApi_SQLITE_OPEN_SUPER_JOURNAL 16384L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_WAL
-#define org_sqlite_jni_CApi_SQLITE_OPEN_WAL 524288L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_DELETEONCLOSE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_DELETEONCLOSE 8L
-#undef org_sqlite_jni_CApi_SQLITE_OPEN_EXCLUSIVE
-#define org_sqlite_jni_CApi_SQLITE_OPEN_EXCLUSIVE 16L
-#undef org_sqlite_jni_CApi_SQLITE_PREPARE_PERSISTENT
-#define org_sqlite_jni_CApi_SQLITE_PREPARE_PERSISTENT 1L
-#undef org_sqlite_jni_CApi_SQLITE_PREPARE_NORMALIZE
-#define org_sqlite_jni_CApi_SQLITE_PREPARE_NORMALIZE 2L
-#undef org_sqlite_jni_CApi_SQLITE_PREPARE_NO_VTAB
-#define org_sqlite_jni_CApi_SQLITE_PREPARE_NO_VTAB 4L
-#undef org_sqlite_jni_CApi_SQLITE_OK
-#define org_sqlite_jni_CApi_SQLITE_OK 0L
-#undef org_sqlite_jni_CApi_SQLITE_ERROR
-#define org_sqlite_jni_CApi_SQLITE_ERROR 1L
-#undef org_sqlite_jni_CApi_SQLITE_INTERNAL
-#define org_sqlite_jni_CApi_SQLITE_INTERNAL 2L
-#undef org_sqlite_jni_CApi_SQLITE_PERM
-#define org_sqlite_jni_CApi_SQLITE_PERM 3L
-#undef org_sqlite_jni_CApi_SQLITE_ABORT
-#define org_sqlite_jni_CApi_SQLITE_ABORT 4L
-#undef org_sqlite_jni_CApi_SQLITE_BUSY
-#define org_sqlite_jni_CApi_SQLITE_BUSY 5L
-#undef org_sqlite_jni_CApi_SQLITE_LOCKED
-#define org_sqlite_jni_CApi_SQLITE_LOCKED 6L
-#undef org_sqlite_jni_CApi_SQLITE_NOMEM
-#define org_sqlite_jni_CApi_SQLITE_NOMEM 7L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY
-#define org_sqlite_jni_CApi_SQLITE_READONLY 8L
-#undef org_sqlite_jni_CApi_SQLITE_INTERRUPT
-#define org_sqlite_jni_CApi_SQLITE_INTERRUPT 9L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR
-#define org_sqlite_jni_CApi_SQLITE_IOERR 10L
-#undef org_sqlite_jni_CApi_SQLITE_CORRUPT
-#define org_sqlite_jni_CApi_SQLITE_CORRUPT 11L
-#undef org_sqlite_jni_CApi_SQLITE_NOTFOUND
-#define org_sqlite_jni_CApi_SQLITE_NOTFOUND 12L
-#undef org_sqlite_jni_CApi_SQLITE_FULL
-#define org_sqlite_jni_CApi_SQLITE_FULL 13L
-#undef org_sqlite_jni_CApi_SQLITE_CANTOPEN
-#define org_sqlite_jni_CApi_SQLITE_CANTOPEN 14L
-#undef org_sqlite_jni_CApi_SQLITE_PROTOCOL
-#define org_sqlite_jni_CApi_SQLITE_PROTOCOL 15L
-#undef org_sqlite_jni_CApi_SQLITE_EMPTY
-#define org_sqlite_jni_CApi_SQLITE_EMPTY 16L
-#undef org_sqlite_jni_CApi_SQLITE_SCHEMA
-#define org_sqlite_jni_CApi_SQLITE_SCHEMA 17L
-#undef org_sqlite_jni_CApi_SQLITE_TOOBIG
-#define org_sqlite_jni_CApi_SQLITE_TOOBIG 18L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT 19L
-#undef org_sqlite_jni_CApi_SQLITE_MISMATCH
-#define org_sqlite_jni_CApi_SQLITE_MISMATCH 20L
-#undef org_sqlite_jni_CApi_SQLITE_MISUSE
-#define org_sqlite_jni_CApi_SQLITE_MISUSE 21L
-#undef org_sqlite_jni_CApi_SQLITE_NOLFS
-#define org_sqlite_jni_CApi_SQLITE_NOLFS 22L
-#undef org_sqlite_jni_CApi_SQLITE_AUTH
-#define org_sqlite_jni_CApi_SQLITE_AUTH 23L
-#undef org_sqlite_jni_CApi_SQLITE_FORMAT
-#define org_sqlite_jni_CApi_SQLITE_FORMAT 24L
-#undef org_sqlite_jni_CApi_SQLITE_RANGE
-#define org_sqlite_jni_CApi_SQLITE_RANGE 25L
-#undef org_sqlite_jni_CApi_SQLITE_NOTADB
-#define org_sqlite_jni_CApi_SQLITE_NOTADB 26L
-#undef org_sqlite_jni_CApi_SQLITE_NOTICE
-#define org_sqlite_jni_CApi_SQLITE_NOTICE 27L
-#undef org_sqlite_jni_CApi_SQLITE_WARNING
-#define org_sqlite_jni_CApi_SQLITE_WARNING 28L
-#undef org_sqlite_jni_CApi_SQLITE_ROW
-#define org_sqlite_jni_CApi_SQLITE_ROW 100L
-#undef org_sqlite_jni_CApi_SQLITE_DONE
-#define org_sqlite_jni_CApi_SQLITE_DONE 101L
-#undef org_sqlite_jni_CApi_SQLITE_ERROR_MISSING_COLLSEQ
-#define org_sqlite_jni_CApi_SQLITE_ERROR_MISSING_COLLSEQ 257L
-#undef org_sqlite_jni_CApi_SQLITE_ERROR_RETRY
-#define org_sqlite_jni_CApi_SQLITE_ERROR_RETRY 513L
-#undef org_sqlite_jni_CApi_SQLITE_ERROR_SNAPSHOT
-#define org_sqlite_jni_CApi_SQLITE_ERROR_SNAPSHOT 769L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_READ
-#define org_sqlite_jni_CApi_SQLITE_IOERR_READ 266L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_SHORT_READ
-#define org_sqlite_jni_CApi_SQLITE_IOERR_SHORT_READ 522L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_WRITE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_WRITE 778L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_FSYNC
-#define org_sqlite_jni_CApi_SQLITE_IOERR_FSYNC 1034L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_DIR_FSYNC
-#define org_sqlite_jni_CApi_SQLITE_IOERR_DIR_FSYNC 1290L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_TRUNCATE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_TRUNCATE 1546L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_FSTAT
-#define org_sqlite_jni_CApi_SQLITE_IOERR_FSTAT 1802L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_UNLOCK
-#define org_sqlite_jni_CApi_SQLITE_IOERR_UNLOCK 2058L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_RDLOCK
-#define org_sqlite_jni_CApi_SQLITE_IOERR_RDLOCK 2314L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_DELETE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_DELETE 2570L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_BLOCKED
-#define org_sqlite_jni_CApi_SQLITE_IOERR_BLOCKED 2826L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_NOMEM
-#define org_sqlite_jni_CApi_SQLITE_IOERR_NOMEM 3082L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_ACCESS
-#define org_sqlite_jni_CApi_SQLITE_IOERR_ACCESS 3338L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_CHECKRESERVEDLOCK
-#define org_sqlite_jni_CApi_SQLITE_IOERR_CHECKRESERVEDLOCK 3594L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_LOCK
-#define org_sqlite_jni_CApi_SQLITE_IOERR_LOCK 3850L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_CLOSE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_CLOSE 4106L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_DIR_CLOSE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_DIR_CLOSE 4362L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_SHMOPEN
-#define org_sqlite_jni_CApi_SQLITE_IOERR_SHMOPEN 4618L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_SHMSIZE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_SHMSIZE 4874L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_SHMLOCK
-#define org_sqlite_jni_CApi_SQLITE_IOERR_SHMLOCK 5130L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_SHMMAP
-#define org_sqlite_jni_CApi_SQLITE_IOERR_SHMMAP 5386L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_SEEK
-#define org_sqlite_jni_CApi_SQLITE_IOERR_SEEK 5642L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_DELETE_NOENT
-#define org_sqlite_jni_CApi_SQLITE_IOERR_DELETE_NOENT 5898L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_MMAP
-#define org_sqlite_jni_CApi_SQLITE_IOERR_MMAP 6154L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_GETTEMPPATH
-#define org_sqlite_jni_CApi_SQLITE_IOERR_GETTEMPPATH 6410L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_CONVPATH
-#define org_sqlite_jni_CApi_SQLITE_IOERR_CONVPATH 6666L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_VNODE
-#define org_sqlite_jni_CApi_SQLITE_IOERR_VNODE 6922L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_AUTH
-#define org_sqlite_jni_CApi_SQLITE_IOERR_AUTH 7178L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_BEGIN_ATOMIC
-#define org_sqlite_jni_CApi_SQLITE_IOERR_BEGIN_ATOMIC 7434L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_COMMIT_ATOMIC
-#define org_sqlite_jni_CApi_SQLITE_IOERR_COMMIT_ATOMIC 7690L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_ROLLBACK_ATOMIC
-#define org_sqlite_jni_CApi_SQLITE_IOERR_ROLLBACK_ATOMIC 7946L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_DATA
-#define org_sqlite_jni_CApi_SQLITE_IOERR_DATA 8202L
-#undef org_sqlite_jni_CApi_SQLITE_IOERR_CORRUPTFS
-#define org_sqlite_jni_CApi_SQLITE_IOERR_CORRUPTFS 8458L
-#undef org_sqlite_jni_CApi_SQLITE_LOCKED_SHAREDCACHE
-#define org_sqlite_jni_CApi_SQLITE_LOCKED_SHAREDCACHE 262L
-#undef org_sqlite_jni_CApi_SQLITE_LOCKED_VTAB
-#define org_sqlite_jni_CApi_SQLITE_LOCKED_VTAB 518L
-#undef org_sqlite_jni_CApi_SQLITE_BUSY_RECOVERY
-#define org_sqlite_jni_CApi_SQLITE_BUSY_RECOVERY 261L
-#undef org_sqlite_jni_CApi_SQLITE_BUSY_SNAPSHOT
-#define org_sqlite_jni_CApi_SQLITE_BUSY_SNAPSHOT 517L
-#undef org_sqlite_jni_CApi_SQLITE_BUSY_TIMEOUT
-#define org_sqlite_jni_CApi_SQLITE_BUSY_TIMEOUT 773L
-#undef org_sqlite_jni_CApi_SQLITE_CANTOPEN_NOTEMPDIR
-#define org_sqlite_jni_CApi_SQLITE_CANTOPEN_NOTEMPDIR 270L
-#undef org_sqlite_jni_CApi_SQLITE_CANTOPEN_ISDIR
-#define org_sqlite_jni_CApi_SQLITE_CANTOPEN_ISDIR 526L
-#undef org_sqlite_jni_CApi_SQLITE_CANTOPEN_FULLPATH
-#define org_sqlite_jni_CApi_SQLITE_CANTOPEN_FULLPATH 782L
-#undef org_sqlite_jni_CApi_SQLITE_CANTOPEN_CONVPATH
-#define org_sqlite_jni_CApi_SQLITE_CANTOPEN_CONVPATH 1038L
-#undef org_sqlite_jni_CApi_SQLITE_CANTOPEN_SYMLINK
-#define org_sqlite_jni_CApi_SQLITE_CANTOPEN_SYMLINK 1550L
-#undef org_sqlite_jni_CApi_SQLITE_CORRUPT_VTAB
-#define org_sqlite_jni_CApi_SQLITE_CORRUPT_VTAB 267L
-#undef org_sqlite_jni_CApi_SQLITE_CORRUPT_SEQUENCE
-#define org_sqlite_jni_CApi_SQLITE_CORRUPT_SEQUENCE 523L
-#undef org_sqlite_jni_CApi_SQLITE_CORRUPT_INDEX
-#define org_sqlite_jni_CApi_SQLITE_CORRUPT_INDEX 779L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY_RECOVERY
-#define org_sqlite_jni_CApi_SQLITE_READONLY_RECOVERY 264L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY_CANTLOCK
-#define org_sqlite_jni_CApi_SQLITE_READONLY_CANTLOCK 520L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY_ROLLBACK
-#define org_sqlite_jni_CApi_SQLITE_READONLY_ROLLBACK 776L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY_DBMOVED
-#define org_sqlite_jni_CApi_SQLITE_READONLY_DBMOVED 1032L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY_CANTINIT
-#define org_sqlite_jni_CApi_SQLITE_READONLY_CANTINIT 1288L
-#undef org_sqlite_jni_CApi_SQLITE_READONLY_DIRECTORY
-#define org_sqlite_jni_CApi_SQLITE_READONLY_DIRECTORY 1544L
-#undef org_sqlite_jni_CApi_SQLITE_ABORT_ROLLBACK
-#define org_sqlite_jni_CApi_SQLITE_ABORT_ROLLBACK 516L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_CHECK
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_CHECK 275L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_COMMITHOOK
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_COMMITHOOK 531L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_FOREIGNKEY
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_FOREIGNKEY 787L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_FUNCTION
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_FUNCTION 1043L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_NOTNULL
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_NOTNULL 1299L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_PRIMARYKEY
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_PRIMARYKEY 1555L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_TRIGGER
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_TRIGGER 1811L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_UNIQUE
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_UNIQUE 2067L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_VTAB
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_VTAB 2323L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_ROWID
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_ROWID 2579L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_PINNED
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_PINNED 2835L
-#undef org_sqlite_jni_CApi_SQLITE_CONSTRAINT_DATATYPE
-#define org_sqlite_jni_CApi_SQLITE_CONSTRAINT_DATATYPE 3091L
-#undef org_sqlite_jni_CApi_SQLITE_NOTICE_RECOVER_WAL
-#define org_sqlite_jni_CApi_SQLITE_NOTICE_RECOVER_WAL 283L
-#undef org_sqlite_jni_CApi_SQLITE_NOTICE_RECOVER_ROLLBACK
-#define org_sqlite_jni_CApi_SQLITE_NOTICE_RECOVER_ROLLBACK 539L
-#undef org_sqlite_jni_CApi_SQLITE_WARNING_AUTOINDEX
-#define org_sqlite_jni_CApi_SQLITE_WARNING_AUTOINDEX 284L
-#undef org_sqlite_jni_CApi_SQLITE_AUTH_USER
-#define org_sqlite_jni_CApi_SQLITE_AUTH_USER 279L
-#undef org_sqlite_jni_CApi_SQLITE_OK_LOAD_PERMANENTLY
-#define org_sqlite_jni_CApi_SQLITE_OK_LOAD_PERMANENTLY 256L
-#undef org_sqlite_jni_CApi_SQLITE_SERIALIZE_NOCOPY
-#define org_sqlite_jni_CApi_SQLITE_SERIALIZE_NOCOPY 1L
-#undef org_sqlite_jni_CApi_SQLITE_DESERIALIZE_FREEONCLOSE
-#define org_sqlite_jni_CApi_SQLITE_DESERIALIZE_FREEONCLOSE 1L
-#undef org_sqlite_jni_CApi_SQLITE_DESERIALIZE_READONLY
-#define org_sqlite_jni_CApi_SQLITE_DESERIALIZE_READONLY 4L
-#undef org_sqlite_jni_CApi_SQLITE_DESERIALIZE_RESIZEABLE
-#define org_sqlite_jni_CApi_SQLITE_DESERIALIZE_RESIZEABLE 2L
-#undef org_sqlite_jni_CApi_SQLITE_SESSION_CONFIG_STRMSIZE
-#define org_sqlite_jni_CApi_SQLITE_SESSION_CONFIG_STRMSIZE 1L
-#undef org_sqlite_jni_CApi_SQLITE_SESSION_OBJCONFIG_SIZE
-#define org_sqlite_jni_CApi_SQLITE_SESSION_OBJCONFIG_SIZE 1L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_MEMORY_USED
-#define org_sqlite_jni_CApi_SQLITE_STATUS_MEMORY_USED 0L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_PAGECACHE_USED
-#define org_sqlite_jni_CApi_SQLITE_STATUS_PAGECACHE_USED 1L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_PAGECACHE_OVERFLOW
-#define org_sqlite_jni_CApi_SQLITE_STATUS_PAGECACHE_OVERFLOW 2L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_MALLOC_SIZE
-#define org_sqlite_jni_CApi_SQLITE_STATUS_MALLOC_SIZE 5L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_PARSER_STACK
-#define org_sqlite_jni_CApi_SQLITE_STATUS_PARSER_STACK 6L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_PAGECACHE_SIZE
-#define org_sqlite_jni_CApi_SQLITE_STATUS_PAGECACHE_SIZE 7L
-#undef org_sqlite_jni_CApi_SQLITE_STATUS_MALLOC_COUNT
-#define org_sqlite_jni_CApi_SQLITE_STATUS_MALLOC_COUNT 9L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_FULLSCAN_STEP
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_FULLSCAN_STEP 1L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_SORT
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_SORT 2L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_AUTOINDEX
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_AUTOINDEX 3L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_VM_STEP
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_VM_STEP 4L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_REPREPARE
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_REPREPARE 5L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_RUN
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_RUN 6L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_FILTER_MISS
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_FILTER_MISS 7L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_FILTER_HIT
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_FILTER_HIT 8L
-#undef org_sqlite_jni_CApi_SQLITE_STMTSTATUS_MEMUSED
-#define org_sqlite_jni_CApi_SQLITE_STMTSTATUS_MEMUSED 99L
-#undef org_sqlite_jni_CApi_SQLITE_SYNC_NORMAL
-#define org_sqlite_jni_CApi_SQLITE_SYNC_NORMAL 2L
-#undef org_sqlite_jni_CApi_SQLITE_SYNC_FULL
-#define org_sqlite_jni_CApi_SQLITE_SYNC_FULL 3L
-#undef org_sqlite_jni_CApi_SQLITE_SYNC_DATAONLY
-#define org_sqlite_jni_CApi_SQLITE_SYNC_DATAONLY 16L
-#undef org_sqlite_jni_CApi_SQLITE_TRACE_STMT
-#define org_sqlite_jni_CApi_SQLITE_TRACE_STMT 1L
-#undef org_sqlite_jni_CApi_SQLITE_TRACE_PROFILE
-#define org_sqlite_jni_CApi_SQLITE_TRACE_PROFILE 2L
-#undef org_sqlite_jni_CApi_SQLITE_TRACE_ROW
-#define org_sqlite_jni_CApi_SQLITE_TRACE_ROW 4L
-#undef org_sqlite_jni_CApi_SQLITE_TRACE_CLOSE
-#define org_sqlite_jni_CApi_SQLITE_TRACE_CLOSE 8L
-#undef org_sqlite_jni_CApi_SQLITE_TXN_NONE
-#define org_sqlite_jni_CApi_SQLITE_TXN_NONE 0L
-#undef org_sqlite_jni_CApi_SQLITE_TXN_READ
-#define org_sqlite_jni_CApi_SQLITE_TXN_READ 1L
-#undef org_sqlite_jni_CApi_SQLITE_TXN_WRITE
-#define org_sqlite_jni_CApi_SQLITE_TXN_WRITE 2L
-#undef org_sqlite_jni_CApi_SQLITE_DETERMINISTIC
-#define org_sqlite_jni_CApi_SQLITE_DETERMINISTIC 2048L
-#undef org_sqlite_jni_CApi_SQLITE_DIRECTONLY
-#define org_sqlite_jni_CApi_SQLITE_DIRECTONLY 524288L
-#undef org_sqlite_jni_CApi_SQLITE_INNOCUOUS
-#define org_sqlite_jni_CApi_SQLITE_INNOCUOUS 2097152L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_SCAN_UNIQUE
-#define org_sqlite_jni_CApi_SQLITE_INDEX_SCAN_UNIQUE 1L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_EQ
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_EQ 2L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_GT
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_GT 4L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LE
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LE 8L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LT
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LT 16L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_GE
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_GE 32L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_MATCH
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_MATCH 64L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LIKE
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LIKE 65L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_GLOB
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_GLOB 66L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_REGEXP
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_REGEXP 67L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_NE
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_NE 68L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_ISNOT
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_ISNOT 69L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_ISNOTNULL
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_ISNULL
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_ISNULL 71L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_IS
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_IS 72L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LIMIT
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_LIMIT 73L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_OFFSET
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_OFFSET 74L
-#undef org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_FUNCTION
-#define org_sqlite_jni_CApi_SQLITE_INDEX_CONSTRAINT_FUNCTION 150L
-#undef org_sqlite_jni_CApi_SQLITE_VTAB_CONSTRAINT_SUPPORT
-#define org_sqlite_jni_CApi_SQLITE_VTAB_CONSTRAINT_SUPPORT 1L
-#undef org_sqlite_jni_CApi_SQLITE_VTAB_INNOCUOUS
-#define org_sqlite_jni_CApi_SQLITE_VTAB_INNOCUOUS 2L
-#undef org_sqlite_jni_CApi_SQLITE_VTAB_DIRECTONLY
-#define org_sqlite_jni_CApi_SQLITE_VTAB_DIRECTONLY 3L
-#undef org_sqlite_jni_CApi_SQLITE_VTAB_USES_ALL_SCHEMAS
-#define org_sqlite_jni_CApi_SQLITE_VTAB_USES_ALL_SCHEMAS 4L
-#undef org_sqlite_jni_CApi_SQLITE_ROLLBACK
-#define org_sqlite_jni_CApi_SQLITE_ROLLBACK 1L
-#undef org_sqlite_jni_CApi_SQLITE_FAIL
-#define org_sqlite_jni_CApi_SQLITE_FAIL 3L
-#undef org_sqlite_jni_CApi_SQLITE_REPLACE
-#define org_sqlite_jni_CApi_SQLITE_REPLACE 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ACCESS_EXISTS
+#define org_sqlite_jni_capi_CApi_SQLITE_ACCESS_EXISTS 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ACCESS_READWRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_ACCESS_READWRITE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ACCESS_READ
+#define org_sqlite_jni_capi_CApi_SQLITE_ACCESS_READ 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DENY
+#define org_sqlite_jni_capi_CApi_SQLITE_DENY 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IGNORE
+#define org_sqlite_jni_capi_CApi_SQLITE_IGNORE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_INDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_INDEX 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_TABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_TABLE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_INDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_INDEX 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_TABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_TABLE 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_TRIGGER
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_TRIGGER 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_VIEW
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_TEMP_VIEW 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_TRIGGER
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_TRIGGER 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_VIEW
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_VIEW 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DELETE
+#define org_sqlite_jni_capi_CApi_SQLITE_DELETE 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_INDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_INDEX 10L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_TABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_TABLE 11L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_INDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_INDEX 12L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_TABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_TABLE 13L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_TRIGGER
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_TRIGGER 14L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_VIEW
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_TEMP_VIEW 15L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_TRIGGER
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_TRIGGER 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_VIEW
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_VIEW 17L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INSERT
+#define org_sqlite_jni_capi_CApi_SQLITE_INSERT 18L
+#undef org_sqlite_jni_capi_CApi_SQLITE_PRAGMA
+#define org_sqlite_jni_capi_CApi_SQLITE_PRAGMA 19L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READ
+#define org_sqlite_jni_capi_CApi_SQLITE_READ 20L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SELECT
+#define org_sqlite_jni_capi_CApi_SQLITE_SELECT 21L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TRANSACTION
+#define org_sqlite_jni_capi_CApi_SQLITE_TRANSACTION 22L
+#undef org_sqlite_jni_capi_CApi_SQLITE_UPDATE
+#define org_sqlite_jni_capi_CApi_SQLITE_UPDATE 23L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ATTACH
+#define org_sqlite_jni_capi_CApi_SQLITE_ATTACH 24L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DETACH
+#define org_sqlite_jni_capi_CApi_SQLITE_DETACH 25L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ALTER_TABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_ALTER_TABLE 26L
+#undef org_sqlite_jni_capi_CApi_SQLITE_REINDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_REINDEX 27L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ANALYZE
+#define org_sqlite_jni_capi_CApi_SQLITE_ANALYZE 28L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CREATE_VTABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_CREATE_VTABLE 29L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DROP_VTABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_DROP_VTABLE 30L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FUNCTION
+#define org_sqlite_jni_capi_CApi_SQLITE_FUNCTION 31L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SAVEPOINT
+#define org_sqlite_jni_capi_CApi_SQLITE_SAVEPOINT 32L
+#undef org_sqlite_jni_capi_CApi_SQLITE_RECURSIVE
+#define org_sqlite_jni_capi_CApi_SQLITE_RECURSIVE 33L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATIC
+#define org_sqlite_jni_capi_CApi_SQLITE_STATIC 0LL
+#undef org_sqlite_jni_capi_CApi_SQLITE_TRANSIENT
+#define org_sqlite_jni_capi_CApi_SQLITE_TRANSIENT -1LL
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESETSTART_INVERT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESETSTART_INVERT 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESETAPPLY_NOSAVEPOINT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESETAPPLY_NOSAVEPOINT 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESETAPPLY_INVERT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESETAPPLY_INVERT 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESETAPPLY_IGNORENOOP
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESETAPPLY_IGNORENOOP 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_DATA
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_DATA 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_NOTFOUND
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_NOTFOUND 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_CONFLICT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_CONFLICT 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_CONSTRAINT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_CONSTRAINT 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_FOREIGN_KEY
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_FOREIGN_KEY 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_OMIT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_OMIT 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_REPLACE
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_REPLACE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_ABORT
+#define org_sqlite_jni_capi_CApi_SQLITE_CHANGESET_ABORT 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SINGLETHREAD
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SINGLETHREAD 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MULTITHREAD
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MULTITHREAD 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SERIALIZED
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SERIALIZED 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MALLOC
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MALLOC 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETMALLOC
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETMALLOC 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SCRATCH
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SCRATCH 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PAGECACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PAGECACHE 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_HEAP
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_HEAP 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MEMSTATUS
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MEMSTATUS 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MUTEX
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MUTEX 10L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETMUTEX
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETMUTEX 11L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_LOOKASIDE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_LOOKASIDE 13L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PCACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PCACHE 14L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETPCACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETPCACHE 15L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_LOG
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_LOG 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_URI
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_URI 17L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PCACHE2
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PCACHE2 18L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETPCACHE2
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_GETPCACHE2 19L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_COVERING_INDEX_SCAN
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_COVERING_INDEX_SCAN 20L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SQLLOG
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SQLLOG 21L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MMAP_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MMAP_SIZE 22L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_WIN32_HEAPSIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_WIN32_HEAPSIZE 23L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PCACHE_HDRSZ
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PCACHE_HDRSZ 24L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PMASZ
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_PMASZ 25L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_STMTJRNL_SPILL
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_STMTJRNL_SPILL 26L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SMALL_MALLOC
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SMALL_MALLOC 27L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SORTERREF_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_SORTERREF_SIZE 28L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MEMDB_MAXSIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONFIG_MEMDB_MAXSIZE 29L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INTEGER
+#define org_sqlite_jni_capi_CApi_SQLITE_INTEGER 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FLOAT
+#define org_sqlite_jni_capi_CApi_SQLITE_FLOAT 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TEXT
+#define org_sqlite_jni_capi_CApi_SQLITE_TEXT 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_BLOB
+#define org_sqlite_jni_capi_CApi_SQLITE_BLOB 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NULL
+#define org_sqlite_jni_capi_CApi_SQLITE_NULL 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_MAINDBNAME
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_MAINDBNAME 1000L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_LOOKASIDE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_LOOKASIDE 1001L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_FKEY
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_FKEY 1002L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_TRIGGER
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_TRIGGER 1003L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_QPSG
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_QPSG 1007L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_TRIGGER_EQP
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_TRIGGER_EQP 1008L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_RESET_DATABASE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_RESET_DATABASE 1009L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_DEFENSIVE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_DEFENSIVE 1010L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_WRITABLE_SCHEMA
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_DQS_DML
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_DQS_DML 1013L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_DQS_DDL
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_DQS_DDL 1014L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_VIEW
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_ENABLE_VIEW 1015L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_TRUSTED_SCHEMA
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_STMT_SCANSTATUS
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_STMT_SCANSTATUS 1018L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_REVERSE_SCANORDER
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_REVERSE_SCANORDER 1019L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_MAX
+#define org_sqlite_jni_capi_CApi_SQLITE_DBCONFIG_MAX 1019L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_USED
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_USED 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_USED
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_USED 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_SCHEMA_USED
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_SCHEMA_USED 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_STMT_USED
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_STMT_USED 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_HIT
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_HIT 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_HIT
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_HIT 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_MISS
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_MISS 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_WRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_WRITE 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_DEFERRED_FKS
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_DEFERRED_FKS 10L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_USED_SHARED
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_USED_SHARED 11L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_SPILL
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_CACHE_SPILL 12L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_MAX
+#define org_sqlite_jni_capi_CApi_SQLITE_DBSTATUS_MAX 12L
+#undef org_sqlite_jni_capi_CApi_SQLITE_UTF8
+#define org_sqlite_jni_capi_CApi_SQLITE_UTF8 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_UTF16LE
+#define org_sqlite_jni_capi_CApi_SQLITE_UTF16LE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_UTF16BE
+#define org_sqlite_jni_capi_CApi_SQLITE_UTF16BE 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_UTF16
+#define org_sqlite_jni_capi_CApi_SQLITE_UTF16 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_UTF16_ALIGNED
+#define org_sqlite_jni_capi_CApi_SQLITE_UTF16_ALIGNED 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_LOCKSTATE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_LOCKSTATE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_GET_LOCKPROXYFILE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_GET_LOCKPROXYFILE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SET_LOCKPROXYFILE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SET_LOCKPROXYFILE 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_LAST_ERRNO
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_LAST_ERRNO 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SIZE_HINT
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SIZE_HINT 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CHUNK_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CHUNK_SIZE 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_FILE_POINTER
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_FILE_POINTER 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SYNC_OMITTED
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SYNC_OMITTED 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WIN32_AV_RETRY
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WIN32_AV_RETRY 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_PERSIST_WAL
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_PERSIST_WAL 10L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_OVERWRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_OVERWRITE 11L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_VFSNAME
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_VFSNAME 12L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_POWERSAFE_OVERWRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_POWERSAFE_OVERWRITE 13L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_PRAGMA
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_PRAGMA 14L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_BUSYHANDLER
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_BUSYHANDLER 15L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_TEMPFILENAME
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_TEMPFILENAME 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_MMAP_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_MMAP_SIZE 18L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_TRACE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_TRACE 19L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_HAS_MOVED
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_HAS_MOVED 20L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SYNC
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SYNC 21L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_COMMIT_PHASETWO
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_COMMIT_PHASETWO 22L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WIN32_SET_HANDLE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WIN32_SET_HANDLE 23L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WAL_BLOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WAL_BLOCK 24L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_ZIPVFS
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_ZIPVFS 25L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_RBU
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_RBU 26L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_VFS_POINTER
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_VFS_POINTER 27L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_JOURNAL_POINTER
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_JOURNAL_POINTER 28L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WIN32_GET_HANDLE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_WIN32_GET_HANDLE 29L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_PDB
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_PDB 30L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_BEGIN_ATOMIC_WRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_COMMIT_ATOMIC_WRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_LOCK_TIMEOUT
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_LOCK_TIMEOUT 34L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_DATA_VERSION
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_DATA_VERSION 35L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SIZE_LIMIT
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_SIZE_LIMIT 36L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CKPT_DONE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CKPT_DONE 37L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_RESERVE_BYTES
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_RESERVE_BYTES 38L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CKPT_START
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CKPT_START 39L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_EXTERNAL_READER
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_EXTERNAL_READER 40L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CKSM_FILE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_CKSM_FILE 41L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FCNTL_RESET_CACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_FCNTL_RESET_CACHE 42L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCK_NONE
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCK_NONE 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCK_SHARED
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCK_SHARED 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCK_RESERVED
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCK_RESERVED 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCK_PENDING
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCK_PENDING 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCK_EXCLUSIVE
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCK_EXCLUSIVE 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC512
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC512 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC1K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC1K 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC2K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC2K 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC4K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC4K 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC8K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC8K 32L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC16K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC16K 64L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC32K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC32K 128L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC64K
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_ATOMIC64K 256L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_SAFE_APPEND
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_SAFE_APPEND 512L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_SEQUENTIAL
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_SEQUENTIAL 1024L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 2048L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_POWERSAFE_OVERWRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_POWERSAFE_OVERWRITE 4096L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_IMMUTABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_IMMUTABLE 8192L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOCAP_BATCH_ATOMIC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOCAP_BATCH_ATOMIC 16384L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_LENGTH
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_LENGTH 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_SQL_LENGTH
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_SQL_LENGTH 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_COLUMN
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_COLUMN 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_EXPR_DEPTH
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_EXPR_DEPTH 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_COMPOUND_SELECT
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_COMPOUND_SELECT 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_VDBE_OP
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_VDBE_OP 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_FUNCTION_ARG
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_FUNCTION_ARG 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_ATTACHED
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_ATTACHED 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_LIKE_PATTERN_LENGTH
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_VARIABLE_NUMBER
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_VARIABLE_NUMBER 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_TRIGGER_DEPTH
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_TRIGGER_DEPTH 10L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LIMIT_WORKER_THREADS
+#define org_sqlite_jni_capi_CApi_SQLITE_LIMIT_WORKER_THREADS 11L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_READONLY
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_READONLY 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_READWRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_READWRITE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_CREATE
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_CREATE 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_URI
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_URI 64L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_MEMORY
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_MEMORY 128L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_NOMUTEX
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_NOMUTEX 32768L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_FULLMUTEX
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_FULLMUTEX 65536L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_SHAREDCACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_SHAREDCACHE 131072L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_PRIVATECACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_PRIVATECACHE 262144L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_NOFOLLOW
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_NOFOLLOW 16777216L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OPEN_EXRESCODE
+#define org_sqlite_jni_capi_CApi_SQLITE_OPEN_EXRESCODE 33554432L
+#undef org_sqlite_jni_capi_CApi_SQLITE_PREPARE_PERSISTENT
+#define org_sqlite_jni_capi_CApi_SQLITE_PREPARE_PERSISTENT 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_PREPARE_NORMALIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_PREPARE_NORMALIZE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_PREPARE_NO_VTAB
+#define org_sqlite_jni_capi_CApi_SQLITE_PREPARE_NO_VTAB 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OK
+#define org_sqlite_jni_capi_CApi_SQLITE_OK 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ERROR
+#define org_sqlite_jni_capi_CApi_SQLITE_ERROR 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INTERNAL
+#define org_sqlite_jni_capi_CApi_SQLITE_INTERNAL 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_PERM
+#define org_sqlite_jni_capi_CApi_SQLITE_PERM 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ABORT
+#define org_sqlite_jni_capi_CApi_SQLITE_ABORT 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_BUSY
+#define org_sqlite_jni_capi_CApi_SQLITE_BUSY 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCKED
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCKED 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOMEM
+#define org_sqlite_jni_capi_CApi_SQLITE_NOMEM 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INTERRUPT
+#define org_sqlite_jni_capi_CApi_SQLITE_INTERRUPT 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR 10L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CORRUPT
+#define org_sqlite_jni_capi_CApi_SQLITE_CORRUPT 11L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOTFOUND
+#define org_sqlite_jni_capi_CApi_SQLITE_NOTFOUND 12L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FULL
+#define org_sqlite_jni_capi_CApi_SQLITE_FULL 13L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN
+#define org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN 14L
+#undef org_sqlite_jni_capi_CApi_SQLITE_PROTOCOL
+#define org_sqlite_jni_capi_CApi_SQLITE_PROTOCOL 15L
+#undef org_sqlite_jni_capi_CApi_SQLITE_EMPTY
+#define org_sqlite_jni_capi_CApi_SQLITE_EMPTY 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SCHEMA
+#define org_sqlite_jni_capi_CApi_SQLITE_SCHEMA 17L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TOOBIG
+#define org_sqlite_jni_capi_CApi_SQLITE_TOOBIG 18L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT 19L
+#undef org_sqlite_jni_capi_CApi_SQLITE_MISMATCH
+#define org_sqlite_jni_capi_CApi_SQLITE_MISMATCH 20L
+#undef org_sqlite_jni_capi_CApi_SQLITE_MISUSE
+#define org_sqlite_jni_capi_CApi_SQLITE_MISUSE 21L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOLFS
+#define org_sqlite_jni_capi_CApi_SQLITE_NOLFS 22L
+#undef org_sqlite_jni_capi_CApi_SQLITE_AUTH
+#define org_sqlite_jni_capi_CApi_SQLITE_AUTH 23L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FORMAT
+#define org_sqlite_jni_capi_CApi_SQLITE_FORMAT 24L
+#undef org_sqlite_jni_capi_CApi_SQLITE_RANGE
+#define org_sqlite_jni_capi_CApi_SQLITE_RANGE 25L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOTADB
+#define org_sqlite_jni_capi_CApi_SQLITE_NOTADB 26L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOTICE
+#define org_sqlite_jni_capi_CApi_SQLITE_NOTICE 27L
+#undef org_sqlite_jni_capi_CApi_SQLITE_WARNING
+#define org_sqlite_jni_capi_CApi_SQLITE_WARNING 28L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ROW
+#define org_sqlite_jni_capi_CApi_SQLITE_ROW 100L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DONE
+#define org_sqlite_jni_capi_CApi_SQLITE_DONE 101L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ERROR_MISSING_COLLSEQ
+#define org_sqlite_jni_capi_CApi_SQLITE_ERROR_MISSING_COLLSEQ 257L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ERROR_RETRY
+#define org_sqlite_jni_capi_CApi_SQLITE_ERROR_RETRY 513L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ERROR_SNAPSHOT
+#define org_sqlite_jni_capi_CApi_SQLITE_ERROR_SNAPSHOT 769L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_READ
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_READ 266L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHORT_READ
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHORT_READ 522L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_WRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_WRITE 778L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_FSYNC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_FSYNC 1034L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_DIR_FSYNC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_DIR_FSYNC 1290L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_TRUNCATE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_TRUNCATE 1546L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_FSTAT
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_FSTAT 1802L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_UNLOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_UNLOCK 2058L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_RDLOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_RDLOCK 2314L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_DELETE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_DELETE 2570L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_BLOCKED
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_BLOCKED 2826L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_NOMEM
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_NOMEM 3082L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_ACCESS
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_ACCESS 3338L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_CHECKRESERVEDLOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_CHECKRESERVEDLOCK 3594L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_LOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_LOCK 3850L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_CLOSE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_CLOSE 4106L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_DIR_CLOSE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_DIR_CLOSE 4362L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMOPEN
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMOPEN 4618L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMSIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMSIZE 4874L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMLOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMLOCK 5130L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMMAP
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_SHMMAP 5386L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_SEEK
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_SEEK 5642L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_DELETE_NOENT
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_DELETE_NOENT 5898L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_MMAP
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_MMAP 6154L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_GETTEMPPATH
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_GETTEMPPATH 6410L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_CONVPATH
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_CONVPATH 6666L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_VNODE
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_VNODE 6922L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_AUTH
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_AUTH 7178L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_BEGIN_ATOMIC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_BEGIN_ATOMIC 7434L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_COMMIT_ATOMIC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_COMMIT_ATOMIC 7690L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_ROLLBACK_ATOMIC
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_ROLLBACK_ATOMIC 7946L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_DATA
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_DATA 8202L
+#undef org_sqlite_jni_capi_CApi_SQLITE_IOERR_CORRUPTFS
+#define org_sqlite_jni_capi_CApi_SQLITE_IOERR_CORRUPTFS 8458L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCKED_SHAREDCACHE
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCKED_SHAREDCACHE 262L
+#undef org_sqlite_jni_capi_CApi_SQLITE_LOCKED_VTAB
+#define org_sqlite_jni_capi_CApi_SQLITE_LOCKED_VTAB 518L
+#undef org_sqlite_jni_capi_CApi_SQLITE_BUSY_RECOVERY
+#define org_sqlite_jni_capi_CApi_SQLITE_BUSY_RECOVERY 261L
+#undef org_sqlite_jni_capi_CApi_SQLITE_BUSY_SNAPSHOT
+#define org_sqlite_jni_capi_CApi_SQLITE_BUSY_SNAPSHOT 517L
+#undef org_sqlite_jni_capi_CApi_SQLITE_BUSY_TIMEOUT
+#define org_sqlite_jni_capi_CApi_SQLITE_BUSY_TIMEOUT 773L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_NOTEMPDIR
+#define org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_NOTEMPDIR 270L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_ISDIR
+#define org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_ISDIR 526L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_FULLPATH
+#define org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_FULLPATH 782L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_CONVPATH
+#define org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_CONVPATH 1038L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_SYMLINK
+#define org_sqlite_jni_capi_CApi_SQLITE_CANTOPEN_SYMLINK 1550L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CORRUPT_VTAB
+#define org_sqlite_jni_capi_CApi_SQLITE_CORRUPT_VTAB 267L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CORRUPT_SEQUENCE
+#define org_sqlite_jni_capi_CApi_SQLITE_CORRUPT_SEQUENCE 523L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CORRUPT_INDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_CORRUPT_INDEX 779L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY_RECOVERY
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY_RECOVERY 264L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY_CANTLOCK
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY_CANTLOCK 520L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY_ROLLBACK
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY_ROLLBACK 776L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY_DBMOVED
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY_DBMOVED 1032L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY_CANTINIT
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY_CANTINIT 1288L
+#undef org_sqlite_jni_capi_CApi_SQLITE_READONLY_DIRECTORY
+#define org_sqlite_jni_capi_CApi_SQLITE_READONLY_DIRECTORY 1544L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ABORT_ROLLBACK
+#define org_sqlite_jni_capi_CApi_SQLITE_ABORT_ROLLBACK 516L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_CHECK
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_CHECK 275L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_COMMITHOOK
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_COMMITHOOK 531L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_FOREIGNKEY
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_FOREIGNKEY 787L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_FUNCTION
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_FUNCTION 1043L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_NOTNULL
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_NOTNULL 1299L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_PRIMARYKEY
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_PRIMARYKEY 1555L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_TRIGGER
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_TRIGGER 1811L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_UNIQUE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_UNIQUE 2067L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_VTAB
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_VTAB 2323L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_ROWID
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_ROWID 2579L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_PINNED
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_PINNED 2835L
+#undef org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_DATATYPE
+#define org_sqlite_jni_capi_CApi_SQLITE_CONSTRAINT_DATATYPE 3091L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOTICE_RECOVER_WAL
+#define org_sqlite_jni_capi_CApi_SQLITE_NOTICE_RECOVER_WAL 283L
+#undef org_sqlite_jni_capi_CApi_SQLITE_NOTICE_RECOVER_ROLLBACK
+#define org_sqlite_jni_capi_CApi_SQLITE_NOTICE_RECOVER_ROLLBACK 539L
+#undef org_sqlite_jni_capi_CApi_SQLITE_WARNING_AUTOINDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_WARNING_AUTOINDEX 284L
+#undef org_sqlite_jni_capi_CApi_SQLITE_AUTH_USER
+#define org_sqlite_jni_capi_CApi_SQLITE_AUTH_USER 279L
+#undef org_sqlite_jni_capi_CApi_SQLITE_OK_LOAD_PERMANENTLY
+#define org_sqlite_jni_capi_CApi_SQLITE_OK_LOAD_PERMANENTLY 256L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SERIALIZE_NOCOPY
+#define org_sqlite_jni_capi_CApi_SQLITE_SERIALIZE_NOCOPY 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DESERIALIZE_FREEONCLOSE
+#define org_sqlite_jni_capi_CApi_SQLITE_DESERIALIZE_FREEONCLOSE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DESERIALIZE_READONLY
+#define org_sqlite_jni_capi_CApi_SQLITE_DESERIALIZE_READONLY 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DESERIALIZE_RESIZEABLE
+#define org_sqlite_jni_capi_CApi_SQLITE_DESERIALIZE_RESIZEABLE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SESSION_CONFIG_STRMSIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_SESSION_CONFIG_STRMSIZE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SESSION_OBJCONFIG_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_SESSION_OBJCONFIG_SIZE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_MEMORY_USED
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_MEMORY_USED 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_PAGECACHE_USED
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_PAGECACHE_USED 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_PAGECACHE_OVERFLOW
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_PAGECACHE_OVERFLOW 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_MALLOC_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_MALLOC_SIZE 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_PARSER_STACK
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_PARSER_STACK 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_PAGECACHE_SIZE
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_PAGECACHE_SIZE 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STATUS_MALLOC_COUNT
+#define org_sqlite_jni_capi_CApi_SQLITE_STATUS_MALLOC_COUNT 9L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_FULLSCAN_STEP
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_FULLSCAN_STEP 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_SORT
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_SORT 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_AUTOINDEX
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_AUTOINDEX 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_VM_STEP
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_VM_STEP 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_REPREPARE
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_REPREPARE 5L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_RUN
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_RUN 6L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_FILTER_MISS
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_FILTER_MISS 7L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_FILTER_HIT
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_FILTER_HIT 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_MEMUSED
+#define org_sqlite_jni_capi_CApi_SQLITE_STMTSTATUS_MEMUSED 99L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SYNC_NORMAL
+#define org_sqlite_jni_capi_CApi_SQLITE_SYNC_NORMAL 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SYNC_FULL
+#define org_sqlite_jni_capi_CApi_SQLITE_SYNC_FULL 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_SYNC_DATAONLY
+#define org_sqlite_jni_capi_CApi_SQLITE_SYNC_DATAONLY 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TRACE_STMT
+#define org_sqlite_jni_capi_CApi_SQLITE_TRACE_STMT 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TRACE_PROFILE
+#define org_sqlite_jni_capi_CApi_SQLITE_TRACE_PROFILE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TRACE_ROW
+#define org_sqlite_jni_capi_CApi_SQLITE_TRACE_ROW 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TRACE_CLOSE
+#define org_sqlite_jni_capi_CApi_SQLITE_TRACE_CLOSE 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TXN_NONE
+#define org_sqlite_jni_capi_CApi_SQLITE_TXN_NONE 0L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TXN_READ
+#define org_sqlite_jni_capi_CApi_SQLITE_TXN_READ 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_TXN_WRITE
+#define org_sqlite_jni_capi_CApi_SQLITE_TXN_WRITE 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DETERMINISTIC
+#define org_sqlite_jni_capi_CApi_SQLITE_DETERMINISTIC 2048L
+#undef org_sqlite_jni_capi_CApi_SQLITE_DIRECTONLY
+#define org_sqlite_jni_capi_CApi_SQLITE_DIRECTONLY 524288L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INNOCUOUS
+#define org_sqlite_jni_capi_CApi_SQLITE_INNOCUOUS 2097152L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_SCAN_UNIQUE
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_SCAN_UNIQUE 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_EQ
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_EQ 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_GT
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_GT 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LE
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LE 8L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LT
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LT 16L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_GE
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_GE 32L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_MATCH
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_MATCH 64L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LIKE
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LIKE 65L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_GLOB
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_GLOB 66L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_REGEXP
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_REGEXP 67L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_NE
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_NE 68L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_ISNOT
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_ISNOT 69L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_ISNOTNULL
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_ISNULL
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_ISNULL 71L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_IS
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_IS 72L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LIMIT
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_LIMIT 73L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_OFFSET
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_OFFSET 74L
+#undef org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_FUNCTION
+#define org_sqlite_jni_capi_CApi_SQLITE_INDEX_CONSTRAINT_FUNCTION 150L
+#undef org_sqlite_jni_capi_CApi_SQLITE_VTAB_CONSTRAINT_SUPPORT
+#define org_sqlite_jni_capi_CApi_SQLITE_VTAB_CONSTRAINT_SUPPORT 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_VTAB_INNOCUOUS
+#define org_sqlite_jni_capi_CApi_SQLITE_VTAB_INNOCUOUS 2L
+#undef org_sqlite_jni_capi_CApi_SQLITE_VTAB_DIRECTONLY
+#define org_sqlite_jni_capi_CApi_SQLITE_VTAB_DIRECTONLY 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_VTAB_USES_ALL_SCHEMAS
+#define org_sqlite_jni_capi_CApi_SQLITE_VTAB_USES_ALL_SCHEMAS 4L
+#undef org_sqlite_jni_capi_CApi_SQLITE_ROLLBACK
+#define org_sqlite_jni_capi_CApi_SQLITE_ROLLBACK 1L
+#undef org_sqlite_jni_capi_CApi_SQLITE_FAIL
+#define org_sqlite_jni_capi_CApi_SQLITE_FAIL 3L
+#undef org_sqlite_jni_capi_CApi_SQLITE_REPLACE
+#define org_sqlite_jni_capi_CApi_SQLITE_REPLACE 5L
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: init
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_init
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_init
(JNIEnv *, jclass);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_java_uncache_thread
* Signature: ()Z
*/
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1java_1uncache_1thread
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1java_1uncache_1thread
(JNIEnv *, jclass);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_aggregate_context
- * Signature: (Lorg/sqlite/jni/sqlite3_context;Z)J
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;Z)J
*/
-JNIEXPORT jlong JNICALL Java_org_sqlite_jni_CApi_sqlite3_1aggregate_1context
+JNIEXPORT jlong JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1aggregate_1context
(JNIEnv *, jclass, jobject, jboolean);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_auto_extension
- * Signature: (Lorg/sqlite/jni/AutoExtensionCallback;)I
+ * Signature: (Lorg/sqlite/jni/capi/AutoExtensionCallback;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1auto_1extension
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1auto_1extension
(JNIEnv *, jclass, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_backup_finish
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1backup_1finish
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1backup_1finish
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_backup_init
- * Signature: (JLjava/lang/String;JLjava/lang/String;)Lorg/sqlite/jni/sqlite3_backup;
+ * Signature: (JLjava/lang/String;JLjava/lang/String;)Lorg/sqlite/jni/capi/sqlite3_backup;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1backup_1init
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1backup_1init
(JNIEnv *, jclass, jlong, jstring, jlong, jstring);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_backup_pagecount
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1backup_1pagecount
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1backup_1pagecount
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_backup_remaining
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1backup_1remaining
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1backup_1remaining
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_backup_step
* Signature: (JI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1backup_1step
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1backup_1step
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_blob
* Signature: (JI[BI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1blob
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1blob
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_double
* Signature: (JID)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1double
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1double
(JNIEnv *, jclass, jlong, jint, jdouble);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_int
* Signature: (JII)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1int
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1int
(JNIEnv *, jclass, jlong, jint, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_int64
* Signature: (JIJ)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1int64
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1int64
(JNIEnv *, jclass, jlong, jint, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_java_object
* Signature: (JILjava/lang/Object;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1java_1object
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1java_1object
(JNIEnv *, jclass, jlong, jint, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_null
* Signature: (JI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1null
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1null
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_parameter_count
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1parameter_1count
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1parameter_1count
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_parameter_index
* Signature: (J[B)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1parameter_1index
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1parameter_1index
(JNIEnv *, jclass, jlong, jbyteArray);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_parameter_name
* Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1parameter_1name
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1parameter_1name
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_text
* Signature: (JI[BI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1text
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1text
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_bind_text16
* Signature: (JI[BI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1text16
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1text16
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint);
/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_bind_zeroblob
- * Signature: (JII)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1zeroblob
- (JNIEnv *, jclass, jlong, jint, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_bind_zeroblob64
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_bind_value
* Signature: (JIJ)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1bind_1zeroblob64
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1value
(JNIEnv *, jclass, jlong, jint, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_bind_zeroblob
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1zeroblob
+ (JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_bind_zeroblob64
+ * Signature: (JIJ)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1bind_1zeroblob64
+ (JNIEnv *, jclass, jlong, jint, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_blob_bytes
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1blob_1bytes
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1blob_1bytes
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_blob_close
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1blob_1close
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1blob_1close
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_blob_open
- * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;JILorg/sqlite/jni/OutputPointer/sqlite3_blob;)I
+ * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;JILorg/sqlite/jni/capi/OutputPointer/sqlite3_blob;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1blob_1open
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1blob_1open
(JNIEnv *, jclass, jlong, jstring, jstring, jstring, jlong, jint, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_blob_read
* Signature: (J[BI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1blob_1read
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1blob_1read
(JNIEnv *, jclass, jlong, jbyteArray, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_blob_reopen
* Signature: (JJ)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1blob_1reopen
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1blob_1reopen
(JNIEnv *, jclass, jlong, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_blob_write
* Signature: (J[BI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1blob_1write
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1blob_1write
(JNIEnv *, jclass, jlong, jbyteArray, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_busy_handler
- * Signature: (JLorg/sqlite/jni/BusyHandlerCallback;)I
+ * Signature: (JLorg/sqlite/jni/capi/BusyHandlerCallback;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1busy_1handler
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1busy_1handler
(JNIEnv *, jclass, jlong, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_busy_timeout
* Signature: (JI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1busy_1timeout
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1busy_1timeout
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_cancel_auto_extension
- * Signature: (Lorg/sqlite/jni/AutoExtensionCallback;)Z
+ * Signature: (Lorg/sqlite/jni/capi/AutoExtensionCallback;)Z
*/
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1cancel_1auto_1extension
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1cancel_1auto_1extension
(JNIEnv *, jclass, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_changes
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1changes
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1changes
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_changes64
* Signature: (J)J
*/
-JNIEXPORT jlong JNICALL Java_org_sqlite_jni_CApi_sqlite3_1changes64
+JNIEXPORT jlong JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1changes64
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_clear_bindings
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1clear_1bindings
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1clear_1bindings
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_close
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1close
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1close
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_close_v2
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1close_1v2
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1close_1v2
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_blob
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)[B
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)[B
*/
-JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1blob
+JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1blob
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_bytes
* Signature: (JI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1bytes
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1bytes
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_bytes16
* Signature: (JI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1bytes16
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1bytes16
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_count
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1count
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1count
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_decltype
* Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1decltype
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1decltype
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_double
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)D
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)D
*/
-JNIEXPORT jdouble JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1double
+JNIEXPORT jdouble JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1double
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_int
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)I
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1int
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1int
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_int64
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)J
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)J
*/
-JNIEXPORT jlong JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1int64
+JNIEXPORT jlong JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1int64
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_name
* Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1name
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1name
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_database_name
* Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1database_1name
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1database_1name
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_origin_name
* Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1origin_1name
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1origin_1name
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_table_name
* Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1table_1name
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1table_1name
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_text
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)[B
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)[B
*/
-JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1text
+JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1text
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_text16
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Ljava/lang/String;
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1text16
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1text16
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_type
* Signature: (JI)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1type
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1type
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_column_value
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Lorg/sqlite/jni/sqlite3_value;
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;I)Lorg/sqlite/jni/capi/sqlite3_value;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1column_1value
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1column_1value
(JNIEnv *, jclass, jobject, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_collation_needed
- * Signature: (JLorg/sqlite/jni/CollationNeededCallback;)I
+ * Signature: (JLorg/sqlite/jni/capi/CollationNeededCallback;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1collation_1needed
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1collation_1needed
(JNIEnv *, jclass, jlong, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_commit_hook
- * Signature: (JLorg/sqlite/jni/CommitHookCallback;)Lorg/sqlite/jni/CommitHookCallback;
+ * Signature: (JLorg/sqlite/jni/capi/CommitHookCallback;)Lorg/sqlite/jni/capi/CommitHookCallback;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1commit_1hook
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1commit_1hook
(JNIEnv *, jclass, jlong, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_compileoption_get
* Signature: (I)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1compileoption_1get
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1compileoption_1get
(JNIEnv *, jclass, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_compileoption_used
* Signature: (Ljava/lang/String;)Z
*/
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1compileoption_1used
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1compileoption_1used
(JNIEnv *, jclass, jstring);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_complete
* Signature: ([B)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1complete
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1complete
(JNIEnv *, jclass, jbyteArray);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_config
* Signature: (I)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1config__I
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1config__I
(JNIEnv *, jclass, jint);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_config
- * Signature: (Lorg/sqlite/jni/ConfigSqllogCallback;)I
+ * Signature: (Lorg/sqlite/jni/capi/ConfigSqllogCallback;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1config__Lorg_sqlite_jni_ConfigSqllogCallback_2
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1config__Lorg_sqlite_jni_capi_ConfigSqllogCallback_2
(JNIEnv *, jclass, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_config
- * Signature: (Lorg/sqlite/jni/ConfigLogCallback;)I
+ * Signature: (Lorg/sqlite/jni/capi/ConfigLogCallback;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1config__Lorg_sqlite_jni_ConfigLogCallback_2
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1config__Lorg_sqlite_jni_capi_ConfigLogCallback_2
(JNIEnv *, jclass, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_context_db_handle
- * Signature: (Lorg/sqlite/jni/sqlite3_context;)Lorg/sqlite/jni/sqlite3;
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;)Lorg/sqlite/jni/capi/sqlite3;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1context_1db_1handle
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1context_1db_1handle
(JNIEnv *, jclass, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_create_collation
- * Signature: (Lorg/sqlite/jni/sqlite3;Ljava/lang/String;ILorg/sqlite/jni/CollationCallback;)I
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Ljava/lang/String;ILorg/sqlite/jni/capi/CollationCallback;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1create_1collation
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1create_1collation
(JNIEnv *, jclass, jobject, jstring, jint, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_create_function
- * Signature: (Lorg/sqlite/jni/sqlite3;Ljava/lang/String;IILorg/sqlite/jni/SQLFunction;)I
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Ljava/lang/String;IILorg/sqlite/jni/capi/SQLFunction;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1create_1function
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1create_1function
(JNIEnv *, jclass, jobject, jstring, jint, jint, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_data_count
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1data_1count
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1data_1count
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_db_config
- * Signature: (Lorg/sqlite/jni/sqlite3;IILorg/sqlite/jni/OutputPointer/Int32;)I
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;IILorg/sqlite/jni/capi/OutputPointer/Int32;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1config__Lorg_sqlite_jni_capi_sqlite3_2IILorg_sqlite_jni_capi_OutputPointer_Int32_2
(JNIEnv *, jclass, jobject, jint, jint, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_db_config
- * Signature: (Lorg/sqlite/jni/sqlite3;ILjava/lang/String;)I
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;ILjava/lang/String;)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1db_1config__Lorg_sqlite_jni_sqlite3_2ILjava_lang_String_2
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1config__Lorg_sqlite_jni_capi_sqlite3_2ILjava_lang_String_2
(JNIEnv *, jclass, jobject, jint, jstring);
/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_db_filename
- * Signature: (Lorg/sqlite/jni/sqlite3;Ljava/lang/String;)Ljava/lang/String;
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_db_name
+ * Signature: (JI)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1db_1filename
- (JNIEnv *, jclass, jobject, jstring);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_db_handle
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Lorg/sqlite/jni/sqlite3;
- */
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1db_1handle
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_db_release_memory
- * Signature: (Lorg/sqlite/jni/sqlite3;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1db_1release_1memory
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_db_status
- * Signature: (Lorg/sqlite/jni/sqlite3;ILorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;Z)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1db_1status
- (JNIEnv *, jclass, jobject, jint, jobject, jobject, jboolean);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_errcode
- * Signature: (Lorg/sqlite/jni/sqlite3;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1errcode
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_errmsg
- * Signature: (Lorg/sqlite/jni/sqlite3;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1errmsg
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_error_offset
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1error_1offset
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_errstr
- * Signature: (I)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1errstr
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_expanded_sql
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1expanded_1sql
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_extended_errcode
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1extended_1errcode
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_extended_result_codes
- * Signature: (Lorg/sqlite/jni/sqlite3;Z)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1extended_1result_1codes
- (JNIEnv *, jclass, jobject, jboolean);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_get_autocommit
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1get_1autocommit
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_get_auxdata
- * Signature: (Lorg/sqlite/jni/sqlite3_context;I)Ljava/lang/Object;
- */
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1get_1auxdata
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_finalize
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1finalize
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_initialize
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1initialize
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_interrupt
- * Signature: (Lorg/sqlite/jni/sqlite3;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1interrupt
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_is_interrupted
- * Signature: (Lorg/sqlite/jni/sqlite3;)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1is_1interrupted
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_keyword_check
- * Signature: (Ljava/lang/String;)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1keyword_1check
- (JNIEnv *, jclass, jstring);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_keyword_count
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1keyword_1count
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_keyword_name
- * Signature: (I)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1keyword_1name
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_last_insert_rowid
- * Signature: (Lorg/sqlite/jni/sqlite3;)J
- */
-JNIEXPORT jlong JNICALL Java_org_sqlite_jni_CApi_sqlite3_1last_1insert_1rowid
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_libversion
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1libversion
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_libversion_number
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1libversion_1number
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_limit
- * Signature: (Lorg/sqlite/jni/sqlite3;II)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1limit
- (JNIEnv *, jclass, jobject, jint, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_normalized_sql
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1normalized_1sql
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_open
- * Signature: (Ljava/lang/String;Lorg/sqlite/jni/OutputPointer/sqlite3;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1open
- (JNIEnv *, jclass, jstring, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_open_v2
- * Signature: (Ljava/lang/String;Lorg/sqlite/jni/OutputPointer/sqlite3;ILjava/lang/String;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1open_1v2
- (JNIEnv *, jclass, jstring, jobject, jint, jstring);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_prepare
- * Signature: (J[BILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1prepare
- (JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_prepare_v2
- * Signature: (J[BILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1prepare_1v2
- (JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_prepare_v3
- * Signature: (J[BIILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1prepare_1v3
- (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_preupdate_blobwrite
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1preupdate_1blobwrite
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_preupdate_count
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1preupdate_1count
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_preupdate_depth
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1preupdate_1depth
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_preupdate_hook
- * Signature: (JLorg/sqlite/jni/PreupdateHookCallback;)Lorg/sqlite/jni/PreupdateHookCallback;
- */
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1preupdate_1hook
- (JNIEnv *, jclass, jlong, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_preupdate_new
- * Signature: (JILorg/sqlite/jni/OutputPointer/sqlite3_value;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1preupdate_1new
- (JNIEnv *, jclass, jlong, jint, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_preupdate_old
- * Signature: (JILorg/sqlite/jni/OutputPointer/sqlite3_value;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1preupdate_1old
- (JNIEnv *, jclass, jlong, jint, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_progress_handler
- * Signature: (Lorg/sqlite/jni/sqlite3;ILorg/sqlite/jni/ProgressHandlerCallback;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1progress_1handler
- (JNIEnv *, jclass, jobject, jint, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_randomness
- * Signature: ([B)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1randomness
- (JNIEnv *, jclass, jbyteArray);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_release_memory
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1release_1memory
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_reset
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1reset
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_reset_auto_extension
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1reset_1auto_1extension
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_double
- * Signature: (Lorg/sqlite/jni/sqlite3_context;D)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1double
- (JNIEnv *, jclass, jobject, jdouble);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_error
- * Signature: (Lorg/sqlite/jni/sqlite3_context;[BI)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1error
- (JNIEnv *, jclass, jobject, jbyteArray, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_error_toobig
- * Signature: (Lorg/sqlite/jni/sqlite3_context;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1error_1toobig
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_error_nomem
- * Signature: (Lorg/sqlite/jni/sqlite3_context;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1error_1nomem
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_error_code
- * Signature: (Lorg/sqlite/jni/sqlite3_context;I)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1error_1code
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_null
- * Signature: (Lorg/sqlite/jni/sqlite3_context;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1null
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_int
- * Signature: (Lorg/sqlite/jni/sqlite3_context;I)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1int
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_int64
- * Signature: (Lorg/sqlite/jni/sqlite3_context;J)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1int64
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_java_object
- * Signature: (Lorg/sqlite/jni/sqlite3_context;Ljava/lang/Object;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1java_1object
- (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_value
- * Signature: (Lorg/sqlite/jni/sqlite3_context;Lorg/sqlite/jni/sqlite3_value;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1value
- (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_zeroblob
- * Signature: (Lorg/sqlite/jni/sqlite3_context;I)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1zeroblob
- (JNIEnv *, jclass, jobject, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_zeroblob64
- * Signature: (Lorg/sqlite/jni/sqlite3_context;J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1zeroblob64
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_blob
- * Signature: (Lorg/sqlite/jni/sqlite3_context;[BI)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1blob
- (JNIEnv *, jclass, jobject, jbyteArray, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_blob64
- * Signature: (Lorg/sqlite/jni/sqlite3_context;[BJ)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1blob64
- (JNIEnv *, jclass, jobject, jbyteArray, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_text
- * Signature: (Lorg/sqlite/jni/sqlite3_context;[BI)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1text
- (JNIEnv *, jclass, jobject, jbyteArray, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_result_text64
- * Signature: (Lorg/sqlite/jni/sqlite3_context;[BJI)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1result_1text64
- (JNIEnv *, jclass, jobject, jbyteArray, jlong, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_rollback_hook
- * Signature: (JLorg/sqlite/jni/RollbackHookCallback;)Lorg/sqlite/jni/RollbackHookCallback;
- */
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1rollback_1hook
- (JNIEnv *, jclass, jlong, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_set_authorizer
- * Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/AuthorizerCallback;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1set_1authorizer
- (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_set_auxdata
- * Signature: (Lorg/sqlite/jni/sqlite3_context;ILjava/lang/Object;)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1set_1auxdata
- (JNIEnv *, jclass, jobject, jint, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_set_last_insert_rowid
- * Signature: (Lorg/sqlite/jni/sqlite3;J)V
- */
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1set_1last_1insert_1rowid
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_shutdown
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1shutdown
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_sleep
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1sleep
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_sourceid
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1sourceid
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_sql
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1sql
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_status
- * Signature: (ILorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;Z)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1status
- (JNIEnv *, jclass, jint, jobject, jobject, jboolean);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_status64
- * Signature: (ILorg/sqlite/jni/OutputPointer/Int64;Lorg/sqlite/jni/OutputPointer/Int64;Z)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1status64
- (JNIEnv *, jclass, jint, jobject, jobject, jboolean);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_step
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1step
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_stmt_busy
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1stmt_1busy
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_stmt_explain
- * Signature: (JI)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1stmt_1explain
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1name
(JNIEnv *, jclass, jlong, jint);
/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_stmt_isexplain
- * Signature: (J)I
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_db_filename
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Ljava/lang/String;)Ljava/lang/String;
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1stmt_1isexplain
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_stmt_readonly
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1stmt_1readonly
- (JNIEnv *, jclass, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_stmt_status
- * Signature: (Lorg/sqlite/jni/sqlite3_stmt;IZ)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1stmt_1status
- (JNIEnv *, jclass, jobject, jint, jboolean);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_strglob
- * Signature: ([B[B)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1strglob
- (JNIEnv *, jclass, jbyteArray, jbyteArray);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_strlike
- * Signature: ([B[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1strlike
- (JNIEnv *, jclass, jbyteArray, jbyteArray, jint);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_system_errno
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1system_1errno
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_table_column_metadata
- * Signature: (Lorg/sqlite/jni/sqlite3;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/sqlite/jni/OutputPointer/String;Lorg/sqlite/jni/OutputPointer/String;Lorg/sqlite/jni/OutputPointer/Bool;Lorg/sqlite/jni/OutputPointer/Bool;Lorg/sqlite/jni/OutputPointer/Bool;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1table_1column_1metadata
- (JNIEnv *, jclass, jobject, jstring, jstring, jstring, jobject, jobject, jobject, jobject, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_threadsafe
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1threadsafe
- (JNIEnv *, jclass);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_total_changes
- * Signature: (J)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1total_1changes
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_total_changes64
- * Signature: (J)J
- */
-JNIEXPORT jlong JNICALL Java_org_sqlite_jni_CApi_sqlite3_1total_1changes64
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_trace_v2
- * Signature: (Lorg/sqlite/jni/sqlite3;ILorg/sqlite/jni/TraceV2Callback;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1trace_1v2
- (JNIEnv *, jclass, jobject, jint, jobject);
-
-/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_txn_state
- * Signature: (Lorg/sqlite/jni/sqlite3;Ljava/lang/String;)I
- */
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1txn_1state
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1filename
(JNIEnv *, jclass, jobject, jstring);
/*
- * Class: org_sqlite_jni_CApi
- * Method: sqlite3_update_hook
- * Signature: (JLorg/sqlite/jni/UpdateHookCallback;)Lorg/sqlite/jni/UpdateHookCallback;
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_db_handle
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)Lorg/sqlite/jni/capi/sqlite3;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1update_1hook
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1handle
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_db_readonly
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1readonly
+ (JNIEnv *, jclass, jobject, jstring);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_db_release_memory
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1release_1memory
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_db_status
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;ILorg/sqlite/jni/capi/OutputPointer/Int32;Lorg/sqlite/jni/capi/OutputPointer/Int32;Z)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1db_1status
+ (JNIEnv *, jclass, jobject, jint, jobject, jobject, jboolean);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_errcode
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1errcode
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_errmsg
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1errmsg
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_error_offset
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1error_1offset
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_errstr
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1errstr
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_expanded_sql
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1expanded_1sql
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_extended_errcode
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1extended_1errcode
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_extended_result_codes
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Z)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1extended_1result_1codes
+ (JNIEnv *, jclass, jobject, jboolean);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_get_autocommit
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1get_1autocommit
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_get_auxdata
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;I)Ljava/lang/Object;
+ */
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1get_1auxdata
+ (JNIEnv *, jclass, jobject, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_finalize
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1finalize
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_initialize
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1initialize
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_interrupt
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1interrupt
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_is_interrupted
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1is_1interrupted
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_keyword_check
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1keyword_1check
+ (JNIEnv *, jclass, jstring);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_keyword_count
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1keyword_1count
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_keyword_name
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1keyword_1name
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_last_insert_rowid
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1last_1insert_1rowid
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_libversion
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1libversion
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_libversion_number
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1libversion_1number
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_limit
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;II)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1limit
+ (JNIEnv *, jclass, jobject, jint, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_normalized_sql
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1normalized_1sql
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_open
+ * Signature: (Ljava/lang/String;Lorg/sqlite/jni/capi/OutputPointer/sqlite3;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1open
+ (JNIEnv *, jclass, jstring, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_open_v2
+ * Signature: (Ljava/lang/String;Lorg/sqlite/jni/capi/OutputPointer/sqlite3;ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1open_1v2
+ (JNIEnv *, jclass, jstring, jobject, jint, jstring);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_prepare
+ * Signature: (J[BILorg/sqlite/jni/capi/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1prepare
+ (JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_prepare_v2
+ * Signature: (J[BILorg/sqlite/jni/capi/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1prepare_1v2
+ (JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_prepare_v3
+ * Signature: (J[BIILorg/sqlite/jni/capi/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1prepare_1v3
+ (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_preupdate_blobwrite
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1preupdate_1blobwrite
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_preupdate_count
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1preupdate_1count
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_preupdate_depth
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1preupdate_1depth
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_preupdate_hook
+ * Signature: (JLorg/sqlite/jni/capi/PreupdateHookCallback;)Lorg/sqlite/jni/capi/PreupdateHookCallback;
+ */
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1preupdate_1hook
(JNIEnv *, jclass, jlong, jobject);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_preupdate_new
+ * Signature: (JILorg/sqlite/jni/capi/OutputPointer/sqlite3_value;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1preupdate_1new
+ (JNIEnv *, jclass, jlong, jint, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_preupdate_old
+ * Signature: (JILorg/sqlite/jni/capi/OutputPointer/sqlite3_value;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1preupdate_1old
+ (JNIEnv *, jclass, jlong, jint, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_progress_handler
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;ILorg/sqlite/jni/capi/ProgressHandlerCallback;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1progress_1handler
+ (JNIEnv *, jclass, jobject, jint, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_randomness
+ * Signature: ([B)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1randomness
+ (JNIEnv *, jclass, jbyteArray);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_release_memory
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1release_1memory
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_reset
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1reset
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_reset_auto_extension
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1reset_1auto_1extension
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_double
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;D)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1double
+ (JNIEnv *, jclass, jobject, jdouble);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_error
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;[BI)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1error
+ (JNIEnv *, jclass, jobject, jbyteArray, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_error_toobig
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1error_1toobig
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_error_nomem
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1error_1nomem
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_error_code
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;I)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1error_1code
+ (JNIEnv *, jclass, jobject, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_null
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1null
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_int
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;I)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1int
+ (JNIEnv *, jclass, jobject, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_int64
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;J)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1int64
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_java_object
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1java_1object
+ (JNIEnv *, jclass, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_value
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;Lorg/sqlite/jni/capi/sqlite3_value;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1value
+ (JNIEnv *, jclass, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_zeroblob
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;I)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1zeroblob
+ (JNIEnv *, jclass, jobject, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_zeroblob64
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1zeroblob64
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_blob
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;[BI)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1blob
+ (JNIEnv *, jclass, jobject, jbyteArray, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_blob64
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;[BJ)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1blob64
+ (JNIEnv *, jclass, jobject, jbyteArray, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_text
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;[BI)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1text
+ (JNIEnv *, jclass, jobject, jbyteArray, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_result_text64
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;[BJI)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1result_1text64
+ (JNIEnv *, jclass, jobject, jbyteArray, jlong, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_rollback_hook
+ * Signature: (JLorg/sqlite/jni/capi/RollbackHookCallback;)Lorg/sqlite/jni/capi/RollbackHookCallback;
+ */
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1rollback_1hook
+ (JNIEnv *, jclass, jlong, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_set_authorizer
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Lorg/sqlite/jni/capi/AuthorizerCallback;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1set_1authorizer
+ (JNIEnv *, jclass, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_set_auxdata
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_context;ILjava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1set_1auxdata
+ (JNIEnv *, jclass, jobject, jint, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_set_last_insert_rowid
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;J)V
+ */
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1set_1last_1insert_1rowid
+ (JNIEnv *, jclass, jobject, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_shutdown
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1shutdown
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_sleep
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1sleep
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_sourceid
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1sourceid
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_sql
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1sql
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_status
+ * Signature: (ILorg/sqlite/jni/capi/OutputPointer/Int32;Lorg/sqlite/jni/capi/OutputPointer/Int32;Z)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1status
+ (JNIEnv *, jclass, jint, jobject, jobject, jboolean);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_status64
+ * Signature: (ILorg/sqlite/jni/capi/OutputPointer/Int64;Lorg/sqlite/jni/capi/OutputPointer/Int64;Z)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1status64
+ (JNIEnv *, jclass, jint, jobject, jobject, jboolean);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_step
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1step
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_stmt_busy
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1stmt_1busy
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_stmt_explain
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1stmt_1explain
+ (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_stmt_isexplain
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1stmt_1isexplain
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_stmt_readonly
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1stmt_1readonly
+ (JNIEnv *, jclass, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_stmt_status
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3_stmt;IZ)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1stmt_1status
+ (JNIEnv *, jclass, jobject, jint, jboolean);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_strglob
+ * Signature: ([B[B)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1strglob
+ (JNIEnv *, jclass, jbyteArray, jbyteArray);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_strlike
+ * Signature: ([B[BI)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1strlike
+ (JNIEnv *, jclass, jbyteArray, jbyteArray, jint);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_system_errno
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1system_1errno
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_table_column_metadata
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/sqlite/jni/capi/OutputPointer/String;Lorg/sqlite/jni/capi/OutputPointer/String;Lorg/sqlite/jni/capi/OutputPointer/Bool;Lorg/sqlite/jni/capi/OutputPointer/Bool;Lorg/sqlite/jni/capi/OutputPointer/Bool;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1table_1column_1metadata
+ (JNIEnv *, jclass, jobject, jstring, jstring, jstring, jobject, jobject, jobject, jobject, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_threadsafe
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1threadsafe
+ (JNIEnv *, jclass);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_total_changes
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1total_1changes
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_total_changes64
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1total_1changes64
+ (JNIEnv *, jclass, jlong);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_trace_v2
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;ILorg/sqlite/jni/capi/TraceV2Callback;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1trace_1v2
+ (JNIEnv *, jclass, jobject, jint, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_txn_state
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1txn_1state
+ (JNIEnv *, jclass, jobject, jstring);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
+ * Method: sqlite3_update_hook
+ * Signature: (JLorg/sqlite/jni/capi/UpdateHookCallback;)Lorg/sqlite/jni/capi/UpdateHookCallback;
+ */
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1update_1hook
+ (JNIEnv *, jclass, jlong, jobject);
+
+/*
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_blob
* Signature: (J)[B
*/
-JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1blob
+JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1blob
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_bytes
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1bytes
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1bytes
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_bytes16
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1bytes16
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1bytes16
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_double
* Signature: (J)D
*/
-JNIEXPORT jdouble JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1double
+JNIEXPORT jdouble JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1double
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_dup
- * Signature: (J)Lorg/sqlite/jni/sqlite3_value;
+ * Signature: (J)Lorg/sqlite/jni/capi/sqlite3_value;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1dup
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1dup
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_encoding
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1encoding
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1encoding
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_free
* Signature: (J)V
*/
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1free
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1free
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_frombind
* Signature: (J)Z
*/
-JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1frombind
+JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1frombind
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_int
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1int
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1int
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_int64
* Signature: (J)J
*/
-JNIEXPORT jlong JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1int64
+JNIEXPORT jlong JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1int64
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_java_object
* Signature: (J)Ljava/lang/Object;
*/
-JNIEXPORT jobject JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1java_1object
+JNIEXPORT jobject JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1java_1object
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_nochange
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1nochange
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1nochange
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_numeric_type
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1numeric_1type
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1numeric_1type
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_subtype
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1subtype
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1subtype
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_text
* Signature: (J)[B
*/
-JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1text
+JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1text
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_text16
* Signature: (J)Ljava/lang/String;
*/
-JNIEXPORT jstring JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1text16
+JNIEXPORT jstring JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1text16
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_value_type
* Signature: (J)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_CApi_sqlite3_1value_1type
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1value_1type
(JNIEnv *, jclass, jlong);
/*
- * Class: org_sqlite_jni_CApi
+ * Class: org_sqlite_jni_capi_CApi
* Method: sqlite3_jni_internal_details
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1jni_1internal_1details
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_CApi_sqlite3_1jni_1internal_1details
(JNIEnv *, jclass);
#ifdef __cplusplus
@@ -2121,27 +2125,27 @@ JNIEXPORT void JNICALL Java_org_sqlite_jni_CApi_sqlite3_1jni_1internal_1details
#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
-/* Header for class org_sqlite_jni_SQLTester */
+/* Header for class org_sqlite_jni_capi_SQLTester */
-#ifndef _Included_org_sqlite_jni_SQLTester
-#define _Included_org_sqlite_jni_SQLTester
+#ifndef _Included_org_sqlite_jni_capi_SQLTester
+#define _Included_org_sqlite_jni_capi_SQLTester
#ifdef __cplusplus
extern "C" {
#endif
/*
- * Class: org_sqlite_jni_SQLTester
+ * Class: org_sqlite_jni_capi_SQLTester
* Method: strglob
* Signature: ([B[B)I
*/
-JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLTester_strglob
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_capi_SQLTester_strglob
(JNIEnv *, jclass, jbyteArray, jbyteArray);
/*
- * Class: org_sqlite_jni_SQLTester
+ * Class: org_sqlite_jni_capi_SQLTester
* Method: installCustomExtensions
* Signature: ()V
*/
-JNIEXPORT void JNICALL Java_org_sqlite_jni_SQLTester_installCustomExtensions
+JNIEXPORT void JNICALL Java_org_sqlite_jni_capi_SQLTester_installCustomExtensions
(JNIEnv *, jclass);
#ifdef __cplusplus
@@ -2176,7 +2180,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xColumnCount
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xColumnSize
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/OutputPointer/Int32;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/capi/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xColumnSize
(JNIEnv *, jobject, jobject, jint, jobject);
@@ -2184,7 +2188,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xColumnSize
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xColumnText
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/OutputPointer/String;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/capi/OutputPointer/String;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xColumnText
(JNIEnv *, jobject, jobject, jint, jobject);
@@ -2192,7 +2196,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xColumnText
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xColumnTotalSize
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/OutputPointer/Int64;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/capi/OutputPointer/Int64;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xColumnTotalSize
(JNIEnv *, jobject, jobject, jint, jobject);
@@ -2208,7 +2212,7 @@ JNIEXPORT jobject JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xGetAuxdata
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xInst
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/capi/OutputPointer/Int32;Lorg/sqlite/jni/capi/OutputPointer/Int32;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xInst
(JNIEnv *, jobject, jobject, jint, jobject, jobject, jobject);
@@ -2216,7 +2220,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xInst
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xInstCount
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/OutputPointer/Int32;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xInstCount
(JNIEnv *, jobject, jobject, jobject);
@@ -2232,7 +2236,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseCount
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xPhraseFirst
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/capi/OutputPointer/Int32;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseFirst
(JNIEnv *, jobject, jobject, jint, jobject, jobject, jobject);
@@ -2240,7 +2244,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseFirst
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xPhraseFirstColumn
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/OutputPointer/Int32;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;ILorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/capi/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseFirstColumn
(JNIEnv *, jobject, jobject, jint, jobject, jobject);
@@ -2248,7 +2252,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseFirstCol
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xPhraseNext
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;)V
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/capi/OutputPointer/Int32;Lorg/sqlite/jni/capi/OutputPointer/Int32;)V
*/
JNIEXPORT void JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseNext
(JNIEnv *, jobject, jobject, jobject, jobject, jobject);
@@ -2256,7 +2260,7 @@ JNIEXPORT void JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseNext
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xPhraseNextColumn
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/OutputPointer/Int32;)V
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/fts5/Fts5PhraseIter;Lorg/sqlite/jni/capi/OutputPointer/Int32;)V
*/
JNIEXPORT void JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xPhraseNextColumn
(JNIEnv *, jobject, jobject, jobject, jobject);
@@ -2280,7 +2284,7 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xQueryPhrase
/*
* Class: org_sqlite_jni_fts5_Fts5ExtensionApi
* Method: xRowCount
- * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/OutputPointer/Int64;)I
+ * Signature: (Lorg/sqlite/jni/fts5/Fts5Context;Lorg/sqlite/jni/capi/OutputPointer/Int64;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_Fts5ExtensionApi_xRowCount
(JNIEnv *, jobject, jobject, jobject);
@@ -2335,7 +2339,7 @@ extern "C" {
/*
* Class: org_sqlite_jni_fts5_fts5_api
* Method: getInstanceForDb
- * Signature: (Lorg/sqlite/jni/sqlite3;)Lorg/sqlite/jni/fts5/fts5_api;
+ * Signature: (Lorg/sqlite/jni/capi/sqlite3;)Lorg/sqlite/jni/fts5/fts5_api;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_fts5_fts5_1api_getInstanceForDb
(JNIEnv *, jclass, jobject);
diff --git a/ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java b/ext/jni/src/org/sqlite/jni/capi/AbstractCollationCallback.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/AbstractCollationCallback.java
index 63cac66a52..925536636e 100644
--- a/ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/AbstractCollationCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
import org.sqlite.jni.annotation.NotNull;
/**
diff --git a/ext/jni/src/org/sqlite/jni/AggregateFunction.java b/ext/jni/src/org/sqlite/jni/capi/AggregateFunction.java
similarity index 98%
rename from ext/jni/src/org/sqlite/jni/AggregateFunction.java
rename to ext/jni/src/org/sqlite/jni/capi/AggregateFunction.java
index 502cde12f8..89c4f27421 100644
--- a/ext/jni/src/org/sqlite/jni/AggregateFunction.java
+++ b/ext/jni/src/org/sqlite/jni/capi/AggregateFunction.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
diff --git a/ext/jni/src/org/sqlite/jni/AuthorizerCallback.java b/ext/jni/src/org/sqlite/jni/capi/AuthorizerCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/AuthorizerCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/AuthorizerCallback.java
index cd3eb06c2a..ce7c6fca6d 100644
--- a/ext/jni/src/org/sqlite/jni/AuthorizerCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/AuthorizerCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
import org.sqlite.jni.annotation.*;
/**
diff --git a/ext/jni/src/org/sqlite/jni/AutoExtensionCallback.java b/ext/jni/src/org/sqlite/jni/capi/AutoExtensionCallback.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/AutoExtensionCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/AutoExtensionCallback.java
index 96a63cafb2..7a54132d29 100644
--- a/ext/jni/src/org/sqlite/jni/AutoExtensionCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/AutoExtensionCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with the {@link CApi#sqlite3_auto_extension}
diff --git a/ext/jni/src/org/sqlite/jni/BusyHandlerCallback.java b/ext/jni/src/org/sqlite/jni/capi/BusyHandlerCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/BusyHandlerCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/BusyHandlerCallback.java
index 0f1670e17d..00223f0b66 100644
--- a/ext/jni/src/org/sqlite/jni/BusyHandlerCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/BusyHandlerCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_busy_handler}.
diff --git a/ext/jni/src/org/sqlite/jni/CApi.java b/ext/jni/src/org/sqlite/jni/capi/CApi.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/CApi.java
rename to ext/jni/src/org/sqlite/jni/capi/CApi.java
index 8149d624ad..a721844744 100644
--- a/ext/jni/src/org/sqlite/jni/CApi.java
+++ b/ext/jni/src/org/sqlite/jni/capi/CApi.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file declares JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
import java.nio.charset.StandardCharsets;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -27,7 +27,7 @@ import java.util.Arrays;
use, a static import is recommended:
{@code
- import static org.sqlite.jni.CApi.*;
+ import static org.sqlite.jni.capi.CApi.*;
}
The C-side part can be found in sqlite3-jni.c.
@@ -91,7 +91,7 @@ import java.util.Arrays;
https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8
*/
-final class CApi {
+public final class CApi {
static {
System.loadLibrary("sqlite3-jni");
}
@@ -400,6 +400,17 @@ final class CApi {
: sqlite3_bind_text16(stmt.getNativePointer(), ndx, data, data.length);
}
+ static native int sqlite3_bind_value(@NotNull long ptrToStmt, int ndx, long ptrToValue);
+
+ /**
+ Functions like the C-level sqlite3_bind_value(), or
+ sqlite3_bind_null() if val is null.
+ */
+ public static int sqlite3_bind_value(@NotNull sqlite3_stmt stmt, int ndx, sqlite3_value val){
+ return sqlite3_bind_value(stmt.getNativePointer(), ndx,
+ null==val ? 0L : val.getNativePointer());
+ }
+
static native int sqlite3_bind_zeroblob(@NotNull long ptrToStmt, int ndx, int n);
public static int sqlite3_bind_zeroblob(@NotNull sqlite3_stmt stmt, int ndx, int n){
@@ -811,12 +822,21 @@ final class CApi {
@NotNull sqlite3 db, int op, @NotNull String val
);
+ private static native String sqlite3_db_name(@NotNull long ptrToDb, int ndx);
+
+ public static String sqlite3_db_name(@NotNull sqlite3 db, int ndx){
+ return null==db ? null : sqlite3_db_name(db.getNativePointer(), ndx);
+ }
+
+
public static native String sqlite3_db_filename(
@NotNull sqlite3 db, @NotNull String dbName
);
public static native sqlite3 sqlite3_db_handle(@NotNull sqlite3_stmt stmt);
+ public static native int sqlite3_db_readonly(@NotNull sqlite3 db, String dbName);
+
public static native int sqlite3_db_release_memory(sqlite3 db);
public static native int sqlite3_db_status(
@@ -1615,7 +1635,8 @@ final class CApi {
public static void sqlite3_result_text16(
@NotNull sqlite3_context cx, @Nullable byte[] utf16
){
- sqlite3_result_text64(cx, utf16, utf16.length, SQLITE_UTF16);
+ if(null == utf16) sqlite3_result_null(cx);
+ else sqlite3_result_text64(cx, utf16, utf16.length, SQLITE_UTF16);
}
public static void sqlite3_result_text16(
@@ -2206,27 +2227,29 @@ final class CApi {
public static final int SQLITE_LIMIT_WORKER_THREADS = 11;
// open flags
- public static final int SQLITE_OPEN_READONLY = 1;
- public static final int SQLITE_OPEN_READWRITE = 2;
- public static final int SQLITE_OPEN_CREATE = 4;
- public static final int SQLITE_OPEN_URI = 64;
- public static final int SQLITE_OPEN_MEMORY = 128;
- public static final int SQLITE_OPEN_NOMUTEX = 32768;
- public static final int SQLITE_OPEN_FULLMUTEX = 65536;
- public static final int SQLITE_OPEN_SHAREDCACHE = 131072;
- public static final int SQLITE_OPEN_PRIVATECACHE = 262144;
- public static final int SQLITE_OPEN_EXRESCODE = 33554432;
- public static final int SQLITE_OPEN_NOFOLLOW = 16777216;
- public static final int SQLITE_OPEN_MAIN_DB = 256;
- public static final int SQLITE_OPEN_MAIN_JOURNAL = 2048;
- public static final int SQLITE_OPEN_TEMP_DB = 512;
- public static final int SQLITE_OPEN_TEMP_JOURNAL = 4096;
- public static final int SQLITE_OPEN_TRANSIENT_DB = 1024;
- public static final int SQLITE_OPEN_SUBJOURNAL = 8192;
- public static final int SQLITE_OPEN_SUPER_JOURNAL = 16384;
- public static final int SQLITE_OPEN_WAL = 524288;
- public static final int SQLITE_OPEN_DELETEONCLOSE = 8;
- public static final int SQLITE_OPEN_EXCLUSIVE = 16;
+
+ public static final int SQLITE_OPEN_READONLY = 0x00000001 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_READWRITE = 0x00000002 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_CREATE = 0x00000004 /* Ok for sqlite3_open_v2() */;
+ //public static final int SQLITE_OPEN_DELETEONCLOSE = 0x00000008 /* VFS only */;
+ //public static final int SQLITE_OPEN_EXCLUSIVE = 0x00000010 /* VFS only */;
+ //public static final int SQLITE_OPEN_AUTOPROXY = 0x00000020 /* VFS only */;
+ public static final int SQLITE_OPEN_URI = 0x00000040 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_MEMORY = 0x00000080 /* Ok for sqlite3_open_v2() */;
+ //public static final int SQLITE_OPEN_MAIN_DB = 0x00000100 /* VFS only */;
+ //public static final int SQLITE_OPEN_TEMP_DB = 0x00000200 /* VFS only */;
+ //public static final int SQLITE_OPEN_TRANSIENT_DB = 0x00000400 /* VFS only */;
+ //public static final int SQLITE_OPEN_MAIN_JOURNAL = 0x00000800 /* VFS only */;
+ //public static final int SQLITE_OPEN_TEMP_JOURNAL = 0x00001000 /* VFS only */;
+ //public static final int SQLITE_OPEN_SUBJOURNAL = 0x00002000 /* VFS only */;
+ //public static final int SQLITE_OPEN_SUPER_JOURNAL = 0x00004000 /* VFS only */;
+ public static final int SQLITE_OPEN_NOMUTEX = 0x00008000 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_FULLMUTEX = 0x00010000 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_SHAREDCACHE = 0x00020000 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_PRIVATECACHE = 0x00040000 /* Ok for sqlite3_open_v2() */;
+ //public static final int SQLITE_OPEN_WAL = 0x00080000 /* VFS only */;
+ public static final int SQLITE_OPEN_NOFOLLOW = 0x01000000 /* Ok for sqlite3_open_v2() */;
+ public static final int SQLITE_OPEN_EXRESCODE = 0x02000000 /* Extended result codes */;
// prepare flags
public static final int SQLITE_PREPARE_PERSISTENT = 1;
@@ -2386,9 +2409,9 @@ final class CApi {
public static final int SQLITE_TXN_WRITE = 2;
// udf flags
- public static final int SQLITE_DETERMINISTIC = 2048;
- public static final int SQLITE_DIRECTONLY = 524288;
- public static final int SQLITE_INNOCUOUS = 2097152;
+ public static final int SQLITE_DETERMINISTIC = 0x000000800;
+ public static final int SQLITE_DIRECTONLY = 0x000080000;
+ public static final int SQLITE_INNOCUOUS = 0x000200000;
// virtual tables
public static final int SQLITE_INDEX_SCAN_UNIQUE = 1;
diff --git a/ext/jni/src/org/sqlite/jni/CallbackProxy.java b/ext/jni/src/org/sqlite/jni/capi/CallbackProxy.java
similarity index 98%
rename from ext/jni/src/org/sqlite/jni/CallbackProxy.java
rename to ext/jni/src/org/sqlite/jni/capi/CallbackProxy.java
index 086c2f8e5d..0495702561 100644
--- a/ext/jni/src/org/sqlite/jni/CallbackProxy.java
+++ b/ext/jni/src/org/sqlite/jni/capi/CallbackProxy.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
This marker interface exists soley for use as a documentation and
class-grouping tool. It should be applied to interfaces or
diff --git a/ext/jni/src/org/sqlite/jni/CollationCallback.java b/ext/jni/src/org/sqlite/jni/capi/CollationCallback.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/CollationCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/CollationCallback.java
index 0e35296326..ed8bd09475 100644
--- a/ext/jni/src/org/sqlite/jni/CollationCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/CollationCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
import org.sqlite.jni.annotation.NotNull;
/**
diff --git a/ext/jni/src/org/sqlite/jni/CollationNeededCallback.java b/ext/jni/src/org/sqlite/jni/capi/CollationNeededCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/CollationNeededCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/CollationNeededCallback.java
index 21b014ba11..fe61fe5065 100644
--- a/ext/jni/src/org/sqlite/jni/CollationNeededCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/CollationNeededCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_collation_needed}.
diff --git a/ext/jni/src/org/sqlite/jni/CommitHookCallback.java b/ext/jni/src/org/sqlite/jni/capi/CommitHookCallback.java
similarity index 95%
rename from ext/jni/src/org/sqlite/jni/CommitHookCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/CommitHookCallback.java
index c6e4538bbd..24373bdf2b 100644
--- a/ext/jni/src/org/sqlite/jni/CommitHookCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/CommitHookCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_commit_hook}.
diff --git a/ext/jni/src/org/sqlite/jni/ConfigLogCallback.java b/ext/jni/src/org/sqlite/jni/capi/ConfigLogCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/ConfigLogCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/ConfigLogCallback.java
index d5af70fa52..6513b0730d 100644
--- a/ext/jni/src/org/sqlite/jni/ConfigLogCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/ConfigLogCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A callback for use with sqlite3_config().
diff --git a/ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java b/ext/jni/src/org/sqlite/jni/capi/ConfigSqllogCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/ConfigSqllogCallback.java
index 9a5a201aac..df753e6513 100644
--- a/ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/ConfigSqllogCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A callback for use with sqlite3_config().
diff --git a/ext/jni/src/org/sqlite/jni/NativePointerHolder.java b/ext/jni/src/org/sqlite/jni/capi/NativePointerHolder.java
similarity index 98%
rename from ext/jni/src/org/sqlite/jni/NativePointerHolder.java
rename to ext/jni/src/org/sqlite/jni/capi/NativePointerHolder.java
index 2b0e8cfbdd..e82909e424 100644
--- a/ext/jni/src/org/sqlite/jni/NativePointerHolder.java
+++ b/ext/jni/src/org/sqlite/jni/capi/NativePointerHolder.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A helper for passing pointers between JNI C code and Java, in
diff --git a/ext/jni/src/org/sqlite/jni/OutputPointer.java b/ext/jni/src/org/sqlite/jni/capi/OutputPointer.java
similarity index 87%
rename from ext/jni/src/org/sqlite/jni/OutputPointer.java
rename to ext/jni/src/org/sqlite/jni/capi/OutputPointer.java
index c6e48ed72f..60b9025386 100644
--- a/ext/jni/src/org/sqlite/jni/OutputPointer.java
+++ b/ext/jni/src/org/sqlite/jni/capi/OutputPointer.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Helper classes for handling JNI output pointers.
@@ -49,16 +49,16 @@ public final class OutputPointer {
code.
*/
public static final class sqlite3 {
- private org.sqlite.jni.sqlite3 value;
+ private org.sqlite.jni.capi.sqlite3 value;
/** Initializes with a null value. */
public sqlite3(){value = null;}
/** Sets the current value to null. */
public void clear(){value = null;}
/** Returns the current value. */
- public final org.sqlite.jni.sqlite3 get(){return value;}
+ public final org.sqlite.jni.capi.sqlite3 get(){return value;}
/** Equivalent to calling get() then clear(). */
- public final org.sqlite.jni.sqlite3 take(){
- final org.sqlite.jni.sqlite3 v = value;
+ public final org.sqlite.jni.capi.sqlite3 take(){
+ final org.sqlite.jni.capi.sqlite3 v = value;
value = null;
return v;
}
@@ -70,16 +70,16 @@ public final class OutputPointer {
code.
*/
public static final class sqlite3_blob {
- private org.sqlite.jni.sqlite3_blob value;
+ private org.sqlite.jni.capi.sqlite3_blob value;
/** Initializes with a null value. */
public sqlite3_blob(){value = null;}
/** Sets the current value to null. */
public void clear(){value = null;}
/** Returns the current value. */
- public final org.sqlite.jni.sqlite3_blob get(){return value;}
+ public final org.sqlite.jni.capi.sqlite3_blob get(){return value;}
/** Equivalent to calling get() then clear(). */
- public final org.sqlite.jni.sqlite3_blob take(){
- final org.sqlite.jni.sqlite3_blob v = value;
+ public final org.sqlite.jni.capi.sqlite3_blob take(){
+ final org.sqlite.jni.capi.sqlite3_blob v = value;
value = null;
return v;
}
@@ -92,16 +92,16 @@ public final class OutputPointer {
code.
*/
public static final class sqlite3_stmt {
- private org.sqlite.jni.sqlite3_stmt value;
+ private org.sqlite.jni.capi.sqlite3_stmt value;
/** Initializes with a null value. */
public sqlite3_stmt(){value = null;}
/** Sets the current value to null. */
public void clear(){value = null;}
/** Returns the current value. */
- public final org.sqlite.jni.sqlite3_stmt get(){return value;}
+ public final org.sqlite.jni.capi.sqlite3_stmt get(){return value;}
/** Equivalent to calling get() then clear(). */
- public final org.sqlite.jni.sqlite3_stmt take(){
- final org.sqlite.jni.sqlite3_stmt v = value;
+ public final org.sqlite.jni.capi.sqlite3_stmt take(){
+ final org.sqlite.jni.capi.sqlite3_stmt v = value;
value = null;
return v;
}
@@ -114,16 +114,16 @@ public final class OutputPointer {
code.
*/
public static final class sqlite3_value {
- private org.sqlite.jni.sqlite3_value value;
+ private org.sqlite.jni.capi.sqlite3_value value;
/** Initializes with a null value. */
public sqlite3_value(){value = null;}
/** Sets the current value to null. */
public void clear(){value = null;}
/** Returns the current value. */
- public final org.sqlite.jni.sqlite3_value get(){return value;}
+ public final org.sqlite.jni.capi.sqlite3_value get(){return value;}
/** Equivalent to calling get() then clear(). */
- public final org.sqlite.jni.sqlite3_value take(){
- final org.sqlite.jni.sqlite3_value v = value;
+ public final org.sqlite.jni.capi.sqlite3_value take(){
+ final org.sqlite.jni.capi.sqlite3_value v = value;
value = null;
return v;
}
diff --git a/ext/jni/src/org/sqlite/jni/PrepareMultiCallback.java b/ext/jni/src/org/sqlite/jni/capi/PrepareMultiCallback.java
similarity index 98%
rename from ext/jni/src/org/sqlite/jni/PrepareMultiCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/PrepareMultiCallback.java
index 2599c1cd7f..1c805a9b16 100644
--- a/ext/jni/src/org/sqlite/jni/PrepareMultiCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/PrepareMultiCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_prepare_multi}.
diff --git a/ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java b/ext/jni/src/org/sqlite/jni/capi/PreupdateHookCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/PreupdateHookCallback.java
index 29088726f0..99d3fb0351 100644
--- a/ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/PreupdateHookCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_preupdate_hook}.
diff --git a/ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java b/ext/jni/src/org/sqlite/jni/capi/ProgressHandlerCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/ProgressHandlerCallback.java
index 2bc56665cb..464baa2e3d 100644
--- a/ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/ProgressHandlerCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_progress_handler}.
diff --git a/ext/jni/src/org/sqlite/jni/ResultCode.java b/ext/jni/src/org/sqlite/jni/capi/ResultCode.java
similarity index 99%
rename from ext/jni/src/org/sqlite/jni/ResultCode.java
rename to ext/jni/src/org/sqlite/jni/capi/ResultCode.java
index e6f0ad89dc..5a8b2e6a18 100644
--- a/ext/jni/src/org/sqlite/jni/ResultCode.java
+++ b/ext/jni/src/org/sqlite/jni/capi/ResultCode.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
This enum contains all of the core and "extended" result codes used
diff --git a/ext/jni/src/org/sqlite/jni/RollbackHookCallback.java b/ext/jni/src/org/sqlite/jni/capi/RollbackHookCallback.java
similarity index 95%
rename from ext/jni/src/org/sqlite/jni/RollbackHookCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/RollbackHookCallback.java
index bd736e1b76..5ce17e718a 100644
--- a/ext/jni/src/org/sqlite/jni/RollbackHookCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/RollbackHookCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_rollback_hook}.
diff --git a/ext/jni/src/org/sqlite/jni/SQLFunction.java b/ext/jni/src/org/sqlite/jni/capi/SQLFunction.java
similarity index 99%
rename from ext/jni/src/org/sqlite/jni/SQLFunction.java
rename to ext/jni/src/org/sqlite/jni/capi/SQLFunction.java
index 66119ebe55..4806e2fc0c 100644
--- a/ext/jni/src/org/sqlite/jni/SQLFunction.java
+++ b/ext/jni/src/org/sqlite/jni/capi/SQLFunction.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
SQLFunction is used in conjunction with the
diff --git a/ext/jni/src/org/sqlite/jni/SQLTester.java b/ext/jni/src/org/sqlite/jni/capi/SQLTester.java
similarity index 99%
rename from ext/jni/src/org/sqlite/jni/SQLTester.java
rename to ext/jni/src/org/sqlite/jni/capi/SQLTester.java
index 1170c86d92..81d6106be7 100644
--- a/ext/jni/src/org/sqlite/jni/SQLTester.java
+++ b/ext/jni/src/org/sqlite/jni/capi/SQLTester.java
@@ -12,13 +12,13 @@
** This file contains the main application entry pointer for the
** SQLTester framework.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.nio.charset.StandardCharsets;
import java.util.regex.*;
-import static org.sqlite.jni.CApi.*;
+import static org.sqlite.jni.capi.CApi.*;
/**
Modes for how to escape (or not) column values and names from
@@ -457,7 +457,7 @@ public class SQLTester {
}
private void appendDbErr(sqlite3 db, StringBuilder sb, int rc){
- sb.append(org.sqlite.jni.ResultCode.getEntryForInt(rc)).append(' ');
+ sb.append(org.sqlite.jni.capi.ResultCode.getEntryForInt(rc)).append(' ');
final String msg = escapeSqlValue(sqlite3_errmsg(db));
if( '{' == msg.charAt(0) ){
sb.append(msg);
diff --git a/ext/jni/src/org/sqlite/jni/ScalarFunction.java b/ext/jni/src/org/sqlite/jni/capi/ScalarFunction.java
similarity index 91%
rename from ext/jni/src/org/sqlite/jni/ScalarFunction.java
rename to ext/jni/src/org/sqlite/jni/capi/ScalarFunction.java
index 73fb58cda2..95541bdcba 100644
--- a/ext/jni/src/org/sqlite/jni/ScalarFunction.java
+++ b/ext/jni/src/org/sqlite/jni/capi/ScalarFunction.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
@@ -27,7 +27,7 @@ public abstract class ScalarFunction implements SQLFunction {
/**
Optionally override to be notified when the UDF is finalized by
- SQLite. This implementation does nothing.
+ SQLite. This default implementation does nothing.
*/
public void xDestroy() {}
}
diff --git a/ext/jni/src/org/sqlite/jni/TableColumnMetadata.java b/ext/jni/src/org/sqlite/jni/capi/TableColumnMetadata.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/TableColumnMetadata.java
rename to ext/jni/src/org/sqlite/jni/capi/TableColumnMetadata.java
index 70b7c90ec8..d8b6226ac9 100644
--- a/ext/jni/src/org/sqlite/jni/TableColumnMetadata.java
+++ b/ext/jni/src/org/sqlite/jni/capi/TableColumnMetadata.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A wrapper object for use with sqlite3_table_column_metadata().
diff --git a/ext/jni/src/org/sqlite/jni/Tester1.java b/ext/jni/src/org/sqlite/jni/capi/Tester1.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/Tester1.java
rename to ext/jni/src/org/sqlite/jni/capi/Tester1.java
index 0ff1c98dbe..6fb28e65b9 100644
--- a/ext/jni/src/org/sqlite/jni/Tester1.java
+++ b/ext/jni/src/org/sqlite/jni/capi/Tester1.java
@@ -11,8 +11,8 @@
*************************************************************************
** This file contains a set of tests for the sqlite3 JNI bindings.
*/
-package org.sqlite.jni;
-import static org.sqlite.jni.CApi.*;
+package org.sqlite.jni.capi;
+import static org.sqlite.jni.capi.CApi.*;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.ArrayList;
@@ -38,17 +38,6 @@ import java.util.concurrent.Future;
@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD})
@interface SingleThreadOnly{}
-/**
- A helper class which simply holds a single value. Its current use
- is for communicating values out of anonymous classes, as doing so
- requires a "final" reference.
-*/
-class ValueHolder {
- public T value;
- public ValueHolder(){}
- public ValueHolder(T v){value = v;}
-}
-
public class Tester1 implements Runnable {
//! True when running in multi-threaded mode.
private static boolean mtMode = false;
@@ -255,6 +244,12 @@ public class Tester1 implements Runnable {
and this call is here to ensure that the build fails
if it cannot find both names. */;
+ affirm( 0==sqlite3_db_readonly(db,"main") );
+ affirm( 0==sqlite3_db_readonly(db,null) );
+ affirm( 0>sqlite3_db_readonly(db,"nope") );
+ affirm( 0>sqlite3_db_readonly(null,null) );
+ affirm( 0==sqlite3_last_insert_rowid(null) );
+
// These interrupt checks are only to make sure that the JNI binding
// has the proper exported symbol names. They don't actually test
// anything useful.
@@ -563,7 +558,7 @@ public class Tester1 implements Runnable {
final String expect = "SELECT 'hell😃'";
affirm( expect.equals(sqlite3_expanded_sql(stmt)) );
String n = sqlite3_normalized_sql(stmt);
- affirm( null==n || expect.equals(n) );
+ affirm( null==n || "SELECT?;".equals(n) );
sqlite3_finalize(stmt);
sqlite3_close(db);
}
@@ -688,6 +683,8 @@ public class Tester1 implements Runnable {
// These ValueHolders are just to confirm that the func did what we want...
final ValueHolder xDestroyCalled = new ValueHolder<>(false);
final ValueHolder xFuncAccum = new ValueHolder<>(0);
+ final ValueHolder neverEverDoThisInClientCode = new ValueHolder<>(null);
+ final ValueHolder neverEverDoThisInClientCode2 = new ValueHolder<>(null);
// Create an SQLFunction instance using one of its 3 subclasses:
// Scalar, Aggregate, or Window:
@@ -698,6 +695,15 @@ public class Tester1 implements Runnable {
new ScalarFunction(){
public void xFunc(sqlite3_context cx, sqlite3_value[] args){
affirm(db == sqlite3_context_db_handle(cx));
+ if( null==neverEverDoThisInClientCode.value ){
+ /* !!!NEVER!!! hold a reference to an sqlite3_value or
+ sqlite3_context object like this in client code! They
+ are ONLY legal for the duration of their single
+ call. We do it here ONLY to test that the defenses
+ against clients doing this are working. */
+ neverEverDoThisInClientCode2.value = cx;
+ neverEverDoThisInClientCode.value = args;
+ }
int result = 0;
for( sqlite3_value v : args ) result += sqlite3_value_int(v);
xFuncAccum.value += result;// just for post-run testing
@@ -723,6 +729,13 @@ public class Tester1 implements Runnable {
affirm(1 == n);
affirm(6 == xFuncAccum.value);
affirm( !xDestroyCalled.value );
+ affirm( null!=neverEverDoThisInClientCode.value );
+ affirm( null!=neverEverDoThisInClientCode2.value );
+ affirm( 0 xBusyCalled = new ValueHolder<>(0);
BusyHandlerCallback handler = new BusyHandlerCallback(){
@@ -1296,7 +1312,7 @@ public class Tester1 implements Runnable {
}
Exception err = null;
try {
- Class t = Class.forName("org.sqlite.jni.TesterFts5");
+ Class t = Class.forName("org.sqlite.jni.fts5.TesterFts5");
java.lang.reflect.Constructor ctor = t.getConstructor();
ctor.setAccessible(true);
final long timeStart = System.currentTimeMillis();
@@ -1456,7 +1472,7 @@ public class Tester1 implements Runnable {
affirm( "noCase".equals(zCollSeq.value) );
affirm( "duck".equals(zDataType.value) );
- final TableColumnMetadata m =
+ TableColumnMetadata m =
sqlite3_table_column_metadata(db, "main", "t", "a");
affirm( null != m );
affirm( bPrimaryKey.value == m.isPrimaryKey() );
@@ -1466,6 +1482,16 @@ public class Tester1 implements Runnable {
affirm( zDataType.value.equals(m.getDataType()) );
affirm( null == sqlite3_table_column_metadata(db, "nope", "t", "a") );
+ affirm( null == sqlite3_table_column_metadata(db, "main", "nope", "a") );
+
+ m = sqlite3_table_column_metadata(db, "main", "t", null)
+ /* Check only for existence of table */;
+ affirm( null != m );
+ affirm( m.isPrimaryKey() );
+ affirm( !m.isAutoincrement() );
+ affirm( !m.isNotNull() );
+ affirm( "BINARY".equalsIgnoreCase(m.getCollation()) );
+ affirm( "INTEGER".equalsIgnoreCase(m.getDataType()) );
sqlite3_close_v2(db);
}
diff --git a/ext/jni/src/org/sqlite/jni/TraceV2Callback.java b/ext/jni/src/org/sqlite/jni/capi/TraceV2Callback.java
similarity index 98%
rename from ext/jni/src/org/sqlite/jni/TraceV2Callback.java
rename to ext/jni/src/org/sqlite/jni/capi/TraceV2Callback.java
index b16012b60e..56465a2c0a 100644
--- a/ext/jni/src/org/sqlite/jni/TraceV2Callback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/TraceV2Callback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
import org.sqlite.jni.annotation.Nullable;
/**
diff --git a/ext/jni/src/org/sqlite/jni/UpdateHookCallback.java b/ext/jni/src/org/sqlite/jni/capi/UpdateHookCallback.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/UpdateHookCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/UpdateHookCallback.java
index 32724be6d4..33d72a5dd2 100644
--- a/ext/jni/src/org/sqlite/jni/UpdateHookCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/UpdateHookCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for use with {@link CApi#sqlite3_update_hook}.
diff --git a/ext/jni/src/org/sqlite/jni/capi/ValueHolder.java b/ext/jni/src/org/sqlite/jni/capi/ValueHolder.java
new file mode 100644
index 0000000000..b3f03ac867
--- /dev/null
+++ b/ext/jni/src/org/sqlite/jni/capi/ValueHolder.java
@@ -0,0 +1,25 @@
+/*
+** 2023-10-16
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+*************************************************************************
+** This file contains a set of tests for the sqlite3 JNI bindings.
+*/
+package org.sqlite.jni.capi;
+
+/**
+ A helper class which simply holds a single value. Its primary use
+ is for communicating values out of anonymous classes, as doing so
+ requires a "final" reference.
+*/
+public class ValueHolder {
+ public T value;
+ public ValueHolder(){}
+ public ValueHolder(T v){value = v;}
+}
diff --git a/ext/jni/src/org/sqlite/jni/WindowFunction.java b/ext/jni/src/org/sqlite/jni/capi/WindowFunction.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/WindowFunction.java
rename to ext/jni/src/org/sqlite/jni/capi/WindowFunction.java
index 7f70177ac0..eaf1bb9a35 100644
--- a/ext/jni/src/org/sqlite/jni/WindowFunction.java
+++ b/ext/jni/src/org/sqlite/jni/capi/WindowFunction.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
diff --git a/ext/jni/src/org/sqlite/jni/XDestroyCallback.java b/ext/jni/src/org/sqlite/jni/capi/XDestroyCallback.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/XDestroyCallback.java
rename to ext/jni/src/org/sqlite/jni/capi/XDestroyCallback.java
index 4b547e6bc9..372e4ec8d0 100644
--- a/ext/jni/src/org/sqlite/jni/XDestroyCallback.java
+++ b/ext/jni/src/org/sqlite/jni/capi/XDestroyCallback.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file declares JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
Callback for a hook called by SQLite when certain client-provided
diff --git a/ext/jni/src/org/sqlite/jni/package-info.java b/ext/jni/src/org/sqlite/jni/capi/package-info.java
similarity index 98%
rename from ext/jni/src/org/sqlite/jni/package-info.java
rename to ext/jni/src/org/sqlite/jni/capi/package-info.java
index d669e680f7..127f380675 100644
--- a/ext/jni/src/org/sqlite/jni/package-info.java
+++ b/ext/jni/src/org/sqlite/jni/capi/package-info.java
@@ -2,7 +2,7 @@
This package houses a JNI binding to the SQLite3 C API.
The primary interfaces are in {@link
- org.sqlite.jni.CApi}.
+ org.sqlite.jni.capi.CApi}.
API Goals and Requirements
@@ -86,4 +86,4 @@
undefined behavior.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
diff --git a/ext/jni/src/org/sqlite/jni/sqlite3.java b/ext/jni/src/org/sqlite/jni/capi/sqlite3.java
similarity index 97%
rename from ext/jni/src/org/sqlite/jni/sqlite3.java
rename to ext/jni/src/org/sqlite/jni/capi/sqlite3.java
index c358e91c8f..901317f0ef 100644
--- a/ext/jni/src/org/sqlite/jni/sqlite3.java
+++ b/ext/jni/src/org/sqlite/jni/capi/sqlite3.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A wrapper for communicating C-level (sqlite3*) instances with
diff --git a/ext/jni/src/org/sqlite/jni/sqlite3_backup.java b/ext/jni/src/org/sqlite/jni/capi/sqlite3_backup.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/sqlite3_backup.java
rename to ext/jni/src/org/sqlite/jni/capi/sqlite3_backup.java
index 232b001818..0ef75c17eb 100644
--- a/ext/jni/src/org/sqlite/jni/sqlite3_backup.java
+++ b/ext/jni/src/org/sqlite/jni/capi/sqlite3_backup.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A wrapper for passing C-level (sqlite3_backup*) instances around in
diff --git a/ext/jni/src/org/sqlite/jni/sqlite3_blob.java b/ext/jni/src/org/sqlite/jni/capi/sqlite3_blob.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/sqlite3_blob.java
rename to ext/jni/src/org/sqlite/jni/capi/sqlite3_blob.java
index f84b848a40..1b96c18b06 100644
--- a/ext/jni/src/org/sqlite/jni/sqlite3_blob.java
+++ b/ext/jni/src/org/sqlite/jni/capi/sqlite3_blob.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A wrapper for passing C-level (sqlite3_blob*) instances around in
diff --git a/ext/jni/src/org/sqlite/jni/sqlite3_context.java b/ext/jni/src/org/sqlite/jni/capi/sqlite3_context.java
similarity index 99%
rename from ext/jni/src/org/sqlite/jni/sqlite3_context.java
rename to ext/jni/src/org/sqlite/jni/capi/sqlite3_context.java
index 22bc62ab46..82ec49af16 100644
--- a/ext/jni/src/org/sqlite/jni/sqlite3_context.java
+++ b/ext/jni/src/org/sqlite/jni/capi/sqlite3_context.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
sqlite3_context instances are used in conjunction with user-defined
diff --git a/ext/jni/src/org/sqlite/jni/sqlite3_stmt.java b/ext/jni/src/org/sqlite/jni/capi/sqlite3_stmt.java
similarity index 96%
rename from ext/jni/src/org/sqlite/jni/sqlite3_stmt.java
rename to ext/jni/src/org/sqlite/jni/capi/sqlite3_stmt.java
index e773b73631..3b8b71f8a5 100644
--- a/ext/jni/src/org/sqlite/jni/sqlite3_stmt.java
+++ b/ext/jni/src/org/sqlite/jni/capi/sqlite3_stmt.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
/**
A wrapper for communicating C-level (sqlite3_stmt*) instances with
diff --git a/ext/jni/src/org/sqlite/jni/sqlite3_value.java b/ext/jni/src/org/sqlite/jni/capi/sqlite3_value.java
similarity index 95%
rename from ext/jni/src/org/sqlite/jni/sqlite3_value.java
rename to ext/jni/src/org/sqlite/jni/capi/sqlite3_value.java
index 2cfb32ff1a..a4772f0f63 100644
--- a/ext/jni/src/org/sqlite/jni/sqlite3_value.java
+++ b/ext/jni/src/org/sqlite/jni/capi/sqlite3_value.java
@@ -11,7 +11,7 @@
*************************************************************************
** This file is part of the JNI bindings for the sqlite3 C API.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.capi;
public final class sqlite3_value extends NativePointerHolder {
//! Invoked only from JNI.
diff --git a/ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java b/ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java
index a5b937ceb8..439b477910 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java
@@ -12,7 +12,7 @@
** This file is part of the JNI bindings for the sqlite3 C API.
*/
package org.sqlite.jni.fts5;
-import org.sqlite.jni.*;
+import org.sqlite.jni.capi.*;
/**
A wrapper for communicating C-level (Fts5Context*) instances with
diff --git a/ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java b/ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java
index 7829104cd9..594f3eaad6 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java
@@ -13,7 +13,7 @@
*/
package org.sqlite.jni.fts5;
import java.nio.charset.StandardCharsets;
-import org.sqlite.jni.*;
+import org.sqlite.jni.capi.*;
import org.sqlite.jni.annotation.*;
/**
diff --git a/ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java b/ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java
index 0f8f3e551b..5774eb5936 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java
@@ -12,7 +12,7 @@
** This file is part of the JNI bindings for the sqlite3 C API.
*/
package org.sqlite.jni.fts5;
-import org.sqlite.jni.NativePointerHolder;
+import org.sqlite.jni.capi.NativePointerHolder;
/**
A wrapper for C-level Fts5PhraseIter. They are only modified and
diff --git a/ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java b/ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java
index 1992438448..b72e5d0fc0 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java
@@ -12,7 +12,7 @@
** This file is part of the JNI bindings for the sqlite3 C API.
*/
package org.sqlite.jni.fts5;
-import org.sqlite.jni.NativePointerHolder;
+import org.sqlite.jni.capi.NativePointerHolder;
/**
INCOMPLETE AND COMPLETELY UNTESTED.
diff --git a/ext/jni/src/org/sqlite/jni/TesterFts5.java b/ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java
similarity index 99%
rename from ext/jni/src/org/sqlite/jni/TesterFts5.java
rename to ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java
index 04cc7dbcfb..c4264c5417 100644
--- a/ext/jni/src/org/sqlite/jni/TesterFts5.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java
@@ -11,10 +11,10 @@
*************************************************************************
** This file contains a set of tests for the sqlite3 JNI bindings.
*/
-package org.sqlite.jni;
-import static org.sqlite.jni.CApi.*;
-import static org.sqlite.jni.Tester1.*;
-import org.sqlite.jni.*;
+package org.sqlite.jni.fts5;
+import static org.sqlite.jni.capi.CApi.*;
+import static org.sqlite.jni.capi.Tester1.*;
+import org.sqlite.jni.capi.*;
import org.sqlite.jni.fts5.*;
import java.util.*;
diff --git a/ext/jni/src/org/sqlite/jni/fts5/fts5_api.java b/ext/jni/src/org/sqlite/jni/fts5/fts5_api.java
index 3172dc8306..d7d2da430d 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/fts5_api.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/fts5_api.java
@@ -13,7 +13,7 @@
*/
package org.sqlite.jni.fts5;
import org.sqlite.jni.annotation.*;
-import org.sqlite.jni.*;
+import org.sqlite.jni.capi.*;
/**
A wrapper for communicating C-level (fts5_api*) instances with
diff --git a/ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java b/ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java
index 7ed353ac0b..5e47633baa 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java
@@ -12,8 +12,8 @@
** This file is part of the JNI bindings for the sqlite3 C API.
*/
package org.sqlite.jni.fts5;
-import org.sqlite.jni.sqlite3_context;
-import org.sqlite.jni.sqlite3_value;
+import org.sqlite.jni.capi.sqlite3_context;
+import org.sqlite.jni.capi.sqlite3_value;
/**
JNI-level wrapper for C's fts5_extension_function type.
diff --git a/ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java b/ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java
index d442fe9aaa..f4ada4dc30 100644
--- a/ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java
+++ b/ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java
@@ -12,7 +12,7 @@
** This file is part of the JNI bindings for the sqlite3 C API.
*/
package org.sqlite.jni.fts5;
-import org.sqlite.jni.NativePointerHolder;
+import org.sqlite.jni.capi.NativePointerHolder;
import org.sqlite.jni.annotation.NotNull;
/**
diff --git a/ext/jni/src/org/sqlite/jni/wrapper1/AggregateFunction.java b/ext/jni/src/org/sqlite/jni/wrapper1/AggregateFunction.java
new file mode 100644
index 0000000000..173d775e62
--- /dev/null
+++ b/ext/jni/src/org/sqlite/jni/wrapper1/AggregateFunction.java
@@ -0,0 +1,82 @@
+/*
+** 2023-10-16
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+*************************************************************************
+** This file is part of the wrapper1 interface for sqlite3.
+*/
+package org.sqlite.jni.wrapper1;
+import org.sqlite.jni.capi.CApi;
+import org.sqlite.jni.annotation.*;
+import org.sqlite.jni.capi.sqlite3_context;
+import org.sqlite.jni.capi.sqlite3_value;
+
+/**
+ EXPERIMENTAL/INCOMPLETE/UNTESTED
+
+ A SqlFunction implementation for aggregate functions. The T type
+ represents the type of data accumulated by this aggregate while it
+ works. e.g. a SUM()-like UDF might use Integer or Long and a
+ CONCAT()-like UDF might use a StringBuilder or a List.
+*/
+public abstract class AggregateFunction implements SqlFunction {
+
+ /**
+ As for the xStep() argument of the C API's
+ sqlite3_create_function(). If this function throws, the
+ exception is reported via sqlite3_result_error().
+ */
+ public abstract void xStep(SqlFunction.Arguments args);
+
+ /**
+ As for the xFinal() argument of the C API's
+ sqlite3_create_function(). If this function throws, it is
+ translated into sqlite3_result_error().
+
+ Note that the passed-in object will not actually contain any
+ arguments for xFinal() but will contain the context object needed
+ for setting the call's result or error state.
+ */
+ public abstract void xFinal(SqlFunction.Arguments args);
+
+ /**
+ Optionally override to be notified when the UDF is finalized by
+ SQLite.
+ */
+ public void xDestroy() {}
+
+ /** Per-invocation state for the UDF. */
+ private final SqlFunction.PerContextState map =
+ new SqlFunction.PerContextState<>();
+
+ /**
+ To be called from the implementation's xStep() method, as well
+ as the xValue() and xInverse() methods of the {@link WindowFunction}
+ subclass, to fetch the current per-call UDF state. On the
+ first call to this method for any given sqlite3_context
+ argument, the context is set to the given initial value. On all other
+ calls, the 2nd argument is ignored.
+
+ @see SQLFunction.PerContextState#getAggregateState
+ */
+ protected final ValueHolder getAggregateState(SqlFunction.Arguments args, T initialValue){
+ return map.getAggregateState(args, initialValue);
+ }
+
+ /**
+ To be called from the implementation's xFinal() method to fetch
+ the final state of the UDF and remove its mapping.
+
+ see SQLFunction.PerContextState#takeAggregateState
+ */
+ protected final T takeAggregateState(SqlFunction.Arguments args){
+ return map.takeAggregateState(args);
+ }
+
+}
diff --git a/ext/jni/src/org/sqlite/jni/wrapper1/SqlFunction.java b/ext/jni/src/org/sqlite/jni/wrapper1/SqlFunction.java
new file mode 100644
index 0000000000..d6acda5aa5
--- /dev/null
+++ b/ext/jni/src/org/sqlite/jni/wrapper1/SqlFunction.java
@@ -0,0 +1,301 @@
+/*
+** 2023-10-16
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+*************************************************************************
+** This file is part of the wrapper1 interface for sqlite3.
+*/
+package org.sqlite.jni.wrapper1;
+import org.sqlite.jni.capi.CApi;
+import org.sqlite.jni.capi.sqlite3_context;
+import org.sqlite.jni.capi.sqlite3_value;
+
+/**
+ Base marker interface for SQLite's three types of User-Defined SQL
+ Functions (UDFs): Scalar, Aggregate, and Window functions.
+*/
+public interface SqlFunction {
+
+ /**
+ The Arguments type is an abstraction on top of the lower-level
+ UDF function argument types. It provides _most_ of the functionality
+ of the lower-level interface, insofar as possible without "leaking"
+ those types into this API.
+ */
+ public final static class Arguments implements Iterable{
+ private final sqlite3_context cx;
+ private final sqlite3_value args[];
+ public final int length;
+
+ /**
+ Must be passed the context and arguments for the UDF call this
+ object is wrapping. Intended to be used by internal proxy
+ classes which "convert" the lower-level interface into this
+ package's higher-level interface, e.g. ScalarAdapter and
+ AggregateAdapter.
+
+ Passing null for the args is equivalent to passing a length-0
+ array.
+ */
+ Arguments(sqlite3_context cx, sqlite3_value args[]){
+ this.cx = cx;
+ this.args = args==null ? new sqlite3_value[0] : args;;
+ this.length = this.args.length;
+ }
+
+ /**
+ Wrapper for a single SqlFunction argument. Primarily intended
+ for use with the Arguments class's Iterable interface.
+ */
+ public final static class Arg {
+ private final Arguments a;
+ private final int ndx;
+ /* Only for use by the Arguments class. */
+ private Arg(Arguments a, int ndx){
+ this.a = a;
+ this.ndx = ndx;
+ }
+ /** Returns this argument's index in its parent argument list. */
+ public int getIndex(){return ndx;}
+ public int getInt(){return a.getInt(ndx);}
+ public long getInt64(){return a.getInt64(ndx);}
+ public double getDouble(){return a.getDouble(ndx);}
+ public byte[] getBlob(){return a.getBlob(ndx);}
+ public byte[] getText(){return a.getText(ndx);}
+ public String getText16(){return a.getText16(ndx);}
+ public int getBytes(){return a.getBytes(ndx);}
+ public int getBytes16(){return a.getBytes16(ndx);}
+ public Object getObject(){return a.getObject(ndx);}
+ public T getObjectCasted(Class type){ return a.getObjectCasted(ndx, type); }
+ public int getType(){return a.getType(ndx);}
+ public Object getAuxData(){return a.getAuxData(ndx);}
+ public void setAuxData(Object o){a.setAuxData(ndx, o);}
+ }
+
+ @Override
+ public java.util.Iterator iterator(){
+ final Arg[] proxies = new Arg[args.length];
+ for( int i = 0; i < args.length; ++i ){
+ proxies[i] = new Arg(this, i);
+ }
+ return java.util.Arrays.stream(proxies).iterator();
+ }
+
+ /**
+ Returns the sqlite3_value at the given argument index or throws
+ an IllegalArgumentException exception if ndx is out of range.
+ */
+ private sqlite3_value valueAt(int ndx){
+ if(ndx<0 || ndx>=args.length){
+ throw new IllegalArgumentException(
+ "SQL function argument index "+ndx+" is out of range."
+ );
+ }
+ return args[ndx];
+ }
+
+ sqlite3_context getContext(){return cx;}
+
+ public int getArgCount(){ return args.length; }
+
+ public int getInt(int arg){return CApi.sqlite3_value_int(valueAt(arg));}
+ public long getInt64(int arg){return CApi.sqlite3_value_int64(valueAt(arg));}
+ public double getDouble(int arg){return CApi.sqlite3_value_double(valueAt(arg));}
+ public byte[] getBlob(int arg){return CApi.sqlite3_value_blob(valueAt(arg));}
+ public byte[] getText(int arg){return CApi.sqlite3_value_text(valueAt(arg));}
+ public String getText16(int arg){return CApi.sqlite3_value_text16(valueAt(arg));}
+ public int getBytes(int arg){return CApi.sqlite3_value_bytes(valueAt(arg));}
+ public int getBytes16(int arg){return CApi.sqlite3_value_bytes16(valueAt(arg));}
+ public Object getObject(int arg){return CApi.sqlite3_value_java_object(valueAt(arg));}
+ public T getObjectCasted(int arg, Class type){
+ return CApi.sqlite3_value_java_casted(valueAt(arg), type);
+ }
+
+ public int getType(int arg){return CApi.sqlite3_value_type(valueAt(arg));}
+ public int getSubtype(int arg){return CApi.sqlite3_value_subtype(valueAt(arg));}
+ public int getNumericType(int arg){return CApi.sqlite3_value_numeric_type(valueAt(arg));}
+ public int getNoChange(int arg){return CApi.sqlite3_value_nochange(valueAt(arg));}
+ public boolean getFromBind(int arg){return CApi.sqlite3_value_frombind(valueAt(arg));}
+ public int getEncoding(int arg){return CApi.sqlite3_value_encoding(valueAt(arg));}
+
+ public void resultInt(int v){ CApi.sqlite3_result_int(cx, v); }
+ public void resultInt64(long v){ CApi.sqlite3_result_int64(cx, v); }
+ public void resultDouble(double v){ CApi.sqlite3_result_double(cx, v); }
+ public void resultError(String msg){CApi.sqlite3_result_error(cx, msg);}
+ public void resultError(Exception e){CApi.sqlite3_result_error(cx, e);}
+ public void resultErrorTooBig(){CApi.sqlite3_result_error_toobig(cx);}
+ public void resultErrorCode(int rc){CApi.sqlite3_result_error_code(cx, rc);}
+ public void resultObject(Object o){CApi.sqlite3_result_java_object(cx, o);}
+ public void resultNull(){CApi.sqlite3_result_null(cx);}
+ public void resultArg(int argNdx){CApi.sqlite3_result_value(cx, valueAt(argNdx));}
+ public void resultZeroBlob(long n){
+ // Throw on error? If n is too big,
+ // sqlite3_result_error_toobig() is automatically called.
+ CApi.sqlite3_result_zeroblob64(cx, n);
+ }
+
+ public void resultBlob(byte[] blob){CApi.sqlite3_result_blob(cx, blob);}
+ public void resultText(byte[] utf8){CApi.sqlite3_result_text(cx, utf8);}
+ public void resultText(String txt){CApi.sqlite3_result_text(cx, txt);}
+ public void resultText16(byte[] utf16){CApi.sqlite3_result_text16(cx, utf16);}
+ public void resultText16(String txt){CApi.sqlite3_result_text16(cx, txt);}
+
+ public void setAuxData(int arg, Object o){
+ /* From the API docs: https://www.sqlite.org/c3ref/get_auxdata.html
+
+ The value of the N parameter to these interfaces should be
+ non-negative. Future enhancements may make use of negative N
+ values to define new kinds of function caching behavior.
+ */
+ valueAt(arg);
+ CApi.sqlite3_set_auxdata(cx, arg, o);
+ }
+
+ public Object getAuxData(int arg){
+ valueAt(arg);
+ return CApi.sqlite3_get_auxdata(cx, arg);
+ }
+ }
+
+ /**
+ PerContextState assists aggregate and window functions in
+ managing their accumulator state across calls to the UDF's
+ callbacks.
+
+ T must be of a type which can be legally stored as a value in
+ java.util.HashMap.
+
+ If a given aggregate or window function is called multiple times
+ in a single SQL statement, e.g. SELECT MYFUNC(A), MYFUNC(B)...,
+ then the clients need some way of knowing which call is which so
+ that they can map their state between their various UDF callbacks
+ and reset it via xFinal(). This class takes care of such
+ mappings.
+
+
This class works by mapping
+ sqlite3_context.getAggregateContext() to a single piece of
+ state, of a client-defined type (the T part of this class), which
+ persists across a "matching set" of the UDF's callbacks.
+
+
This class is a helper providing commonly-needed functionality
+ - it is not required for use with aggregate or window functions.
+ Client UDFs are free to perform such mappings using custom
+ approaches. The provided {@link AggregateFunction} and {@link
+ WindowFunction} classes use this.
+ */
+ public static final class PerContextState {
+ private final java.util.Map> map
+ = new java.util.HashMap<>();
+
+ /**
+ Should be called from a UDF's xStep(), xValue(), and xInverse()
+ methods, passing it that method's first argument and an initial
+ value for the persistent state. If there is currently no
+ mapping for the given context within the map, one is created
+ using the given initial value, else the existing one is used
+ and the 2nd argument is ignored. It returns a ValueHolder
+ which can be used to modify that state directly without
+ requiring that the client update the underlying map's entry.
+
+ The caller is obligated to eventually call
+ takeAggregateState() to clear the mapping.
+ */
+ public ValueHolder getAggregateState(SqlFunction.Arguments args, T initialValue){
+ final Long key = args.getContext().getAggregateContext(true);
+ ValueHolder rc = null==key ? null : map.get(key);
+ if( null==rc ){
+ map.put(key, rc = new ValueHolder<>(initialValue));
+ }
+ return rc;
+ }
+
+ /**
+ Should be called from a UDF's xFinal() method and passed that
+ method's first argument. This function removes the value
+ associated with with the arguments' aggregate context from the
+ map and returns it, returning null if no other UDF method has
+ been called to set up such a mapping. The latter condition will
+ be the case if a UDF is used in a statement which has no result
+ rows.
+ */
+ public T takeAggregateState(SqlFunction.Arguments args){
+ final ValueHolder h = map.remove(args.getContext().getAggregateContext(false));
+ return null==h ? null : h.value;
+ }
+ }
+
+ /**
+ Internal-use adapter for wrapping this package's ScalarFunction
+ for use with the org.sqlite.jni.capi.ScalarFunction interface.
+ */
+ static final class ScalarAdapter extends org.sqlite.jni.capi.ScalarFunction {
+ final ScalarFunction impl;
+ ScalarAdapter(ScalarFunction impl){
+ this.impl = impl;
+ }
+ /**
+ Proxies this.impl.xFunc(), adapting the call arguments to that
+ function's signature. If the proxy throws, it's translated to
+ sqlite_result_error() with the exception's message.
+ */
+ public void xFunc(sqlite3_context cx, sqlite3_value[] args){
+ try{
+ impl.xFunc( new SqlFunction.Arguments(cx, args) );
+ }catch(Exception e){
+ CApi.sqlite3_result_error(cx, e);
+ }
+ }
+
+ public void xDestroy(){
+ impl.xDestroy();
+ }
+ }
+
+ /**
+ Internal-use adapter for wrapping this package's AggregateFunction
+ for use with the org.sqlite.jni.capi.AggregateFunction interface.
+ */
+ static final class AggregateAdapter extends org.sqlite.jni.capi.AggregateFunction {
+ final AggregateFunction impl;
+ AggregateAdapter(AggregateFunction impl){
+ this.impl = impl;
+ }
+
+ /**
+ Proxies this.impl.xStep(), adapting the call arguments to that
+ function's signature. If the proxied function throws, it is
+ translated to sqlite_result_error() with the exception's
+ message.
+ */
+ public void xStep(sqlite3_context cx, sqlite3_value[] args){
+ try{
+ impl.xStep( new SqlFunction.Arguments(cx, args) );
+ }catch(Exception e){
+ CApi.sqlite3_result_error(cx, e);
+ }
+ }
+
+ /**
+ As for the xFinal() argument of the C API's sqlite3_create_function().
+ If the proxied function throws, it is translated into a sqlite3_result_error().
+ */
+ public void xFinal(sqlite3_context cx){
+ try{
+ impl.xFinal( new SqlFunction.Arguments(cx, null) );
+ }catch(Exception e){
+ CApi.sqlite3_result_error(cx, e);
+ }
+ }
+
+ public void xDestroy(){
+ impl.xDestroy();
+ }
+ }
+
+}
diff --git a/ext/jni/src/org/sqlite/jni/Sqlite.java b/ext/jni/src/org/sqlite/jni/wrapper1/Sqlite.java
similarity index 75%
rename from ext/jni/src/org/sqlite/jni/Sqlite.java
rename to ext/jni/src/org/sqlite/jni/wrapper1/Sqlite.java
index 5c2c456296..bcf97b2394 100644
--- a/ext/jni/src/org/sqlite/jni/Sqlite.java
+++ b/ext/jni/src/org/sqlite/jni/wrapper1/Sqlite.java
@@ -9,11 +9,15 @@
** May you share freely, never taking more than you give.
**
*************************************************************************
-** This file is part of the JNI bindings for the sqlite3 C API.
+** This file is part of the wrapper1 interface for sqlite3.
*/
-package org.sqlite.jni;
+package org.sqlite.jni.wrapper1;
import java.nio.charset.StandardCharsets;
-import static org.sqlite.jni.CApi.*;
+import static org.sqlite.jni.capi.CApi.*;
+import org.sqlite.jni.capi.CApi;
+import org.sqlite.jni.capi.sqlite3;
+import org.sqlite.jni.capi.sqlite3_stmt;
+import org.sqlite.jni.capi.OutputPointer;
/**
This class represents a database connection, analog to the C-side
@@ -68,14 +72,16 @@ public final class Sqlite implements AutoCloseable {
/**
Returns this object's underlying native db handle, or null if
- this instance has been closed.
+ this instance has been closed. This is very specifically not
+ public.
*/
sqlite3 nativeHandle(){ return this.db; }
- private void affirmOpen(){
+ private sqlite3 affirmOpen(){
if( null==db || 0==db.getNativePointer() ){
throw new IllegalArgumentException("This database instance is closed.");
}
+ return this.db;
}
// private byte[] stringToUtf8(String s){
@@ -88,6 +94,10 @@ public final class Sqlite implements AutoCloseable {
}
}
+ /**
+ Corresponds to the sqlite3_stmt class. Use Sqlite.prepare() to
+ create new instances.
+ */
public final class Stmt implements AutoCloseable {
private Sqlite _db = null;
private sqlite3_stmt stmt = null;
@@ -111,7 +121,7 @@ public final class Sqlite implements AutoCloseable {
/**
Corresponds to sqlite3_finalize(), but we cannot override the
name finalize() here because this one requires a different
- signature. We do not throw on error here because "destructors
+ signature. It does not throw on error here because "destructors
do not throw." If it returns non-0, the object is still
finalized.
*/
@@ -175,9 +185,8 @@ public final class Sqlite implements AutoCloseable {
rather than the sqlite3_stmt class.
*/
public Stmt prepare(String sql, int prepFlags){
- affirmOpen();
final OutputPointer.sqlite3_stmt out = new OutputPointer.sqlite3_stmt();
- final int rc = sqlite3_prepare_v3(this.db, sql, prepFlags, out);
+ final int rc = sqlite3_prepare_v3(affirmOpen(), sql, prepFlags, out);
affirmRcOk(rc);
return new Stmt(this, out.take());
}
@@ -186,4 +195,24 @@ public final class Sqlite implements AutoCloseable {
return prepare(sql, 0);
}
+ public void createFunction(String name, int nArg, int eTextRep, ScalarFunction f ){
+ int rc = CApi.sqlite3_create_function(affirmOpen(), name, nArg, eTextRep,
+ new SqlFunction.ScalarAdapter(f));
+ if( 0!=rc ) throw new SqliteException(db);
+ }
+
+ public void createFunction(String name, int nArg, ScalarFunction f){
+ this.createFunction(name, nArg, CApi.SQLITE_UTF8, f);
+ }
+
+ public void createFunction(String name, int nArg, int eTextRep, AggregateFunction f ){
+ int rc = CApi.sqlite3_create_function(affirmOpen(), name, nArg, eTextRep,
+ new SqlFunction.AggregateAdapter(f));
+ if( 0!=rc ) throw new SqliteException(db);
+ }
+
+ public void createFunction(String name, int nArg, AggregateFunction f){
+ this.createFunction(name, nArg, CApi.SQLITE_UTF8, f);
+ }
+
}
diff --git a/ext/jni/src/org/sqlite/jni/SqliteException.java b/ext/jni/src/org/sqlite/jni/wrapper1/SqliteException.java
similarity index 90%
rename from ext/jni/src/org/sqlite/jni/SqliteException.java
rename to ext/jni/src/org/sqlite/jni/wrapper1/SqliteException.java
index c15cb34919..111f004db4 100644
--- a/ext/jni/src/org/sqlite/jni/SqliteException.java
+++ b/ext/jni/src/org/sqlite/jni/wrapper1/SqliteException.java
@@ -9,10 +9,11 @@
** May you share freely, never taking more than you give.
**
*************************************************************************
-** This file is part of the JNI bindings for the sqlite3 C API.
+** This file is part of the wrapper1 interface for sqlite3.
*/
-package org.sqlite.jni;
-import static org.sqlite.jni.CApi.*;
+package org.sqlite.jni.wrapper1;
+import static org.sqlite.jni.capi.CApi.*;
+import org.sqlite.jni.capi.sqlite3;
/**
A wrapper for communicating C-level (sqlite3*) instances with
@@ -53,7 +54,7 @@ public final class SqliteException extends java.lang.RuntimeException {
a failed db-open operation, and the place(s) where that can
happen are inside this library, not client-level code.
*/
- public SqliteException(sqlite3 db){
+ SqliteException(sqlite3 db){
super(sqlite3_errmsg(db));
errCode = sqlite3_errcode(db);
xerrCode = sqlite3_extended_errcode(db);
@@ -62,8 +63,8 @@ public final class SqliteException extends java.lang.RuntimeException {
}
/**
- Records the current error state of db (which must not be null and must
- refer to an open database) then closes it.
+ Records the current error state of db (which must not be null and
+ must refer to an open database).
*/
public SqliteException(Sqlite db){
this(db.nativeHandle());
diff --git a/ext/jni/src/org/sqlite/jni/Tester2.java b/ext/jni/src/org/sqlite/jni/wrapper1/Tester2.java
similarity index 67%
rename from ext/jni/src/org/sqlite/jni/Tester2.java
rename to ext/jni/src/org/sqlite/jni/wrapper1/Tester2.java
index e75f56e064..f5fd5f84e6 100644
--- a/ext/jni/src/org/sqlite/jni/Tester2.java
+++ b/ext/jni/src/org/sqlite/jni/wrapper1/Tester2.java
@@ -11,15 +11,32 @@
*************************************************************************
** This file contains a set of tests for the sqlite3 JNI bindings.
*/
-package org.sqlite.jni;
-import static org.sqlite.jni.CApi.*;
+package org.sqlite.jni.wrapper1;
+//import static org.sqlite.jni.capi.CApi.*;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
+import org.sqlite.jni.capi.*;
+
+/**
+ An annotation for Tester2 tests which we do not want to run in
+ reflection-driven test mode because either they are not suitable
+ for multi-threaded threaded mode or we have to control their execution
+ order.
+*/
+@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD})
+@interface ManualTest{}
+/**
+ Annotation for Tester2 tests which mark those which must be skipped
+ in multi-threaded mode.
+*/
+@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD})
+@interface SingleThreadOnly{}
public class Tester2 implements Runnable {
//! True when running in multi-threaded mode.
@@ -107,9 +124,59 @@ public class Tester2 implements Runnable {
affirm(v, "Affirmation failed.");
}
+
+ public static void execSql(Sqlite db, String[] sql){
+ execSql(db, String.join("", sql));
+ }
+
+ public static int execSql(Sqlite dbw, boolean throwOnError, String sql){
+ final sqlite3 db = dbw.nativeHandle();
+ OutputPointer.Int32 oTail = new OutputPointer.Int32();
+ final byte[] sqlUtf8 = sql.getBytes(StandardCharsets.UTF_8);
+ int pos = 0, n = 1;
+ byte[] sqlChunk = sqlUtf8;
+ int rc = 0;
+ sqlite3_stmt stmt = null;
+ final OutputPointer.sqlite3_stmt outStmt = new OutputPointer.sqlite3_stmt();
+ while(pos < sqlChunk.length){
+ if(pos > 0){
+ sqlChunk = Arrays.copyOfRange(sqlChunk, pos,
+ sqlChunk.length);
+ }
+ if( 0==sqlChunk.length ) break;
+ rc = CApi.sqlite3_prepare_v2(db, sqlChunk, outStmt, oTail);
+ if(throwOnError) affirm(0 == rc);
+ else if( 0!=rc ) break;
+ pos = oTail.value;
+ stmt = outStmt.take();
+ if( null == stmt ){
+ // empty statement was parsed.
+ continue;
+ }
+ affirm(0 != stmt.getNativePointer());
+ while( CApi.SQLITE_ROW == (rc = CApi.sqlite3_step(stmt)) ){
+ }
+ CApi.sqlite3_finalize(stmt);
+ affirm(0 == stmt.getNativePointer());
+ if(0!=rc && CApi.SQLITE_ROW!=rc && CApi.SQLITE_DONE!=rc){
+ break;
+ }
+ }
+ CApi.sqlite3_finalize(stmt);
+ if(CApi.SQLITE_ROW==rc || CApi.SQLITE_DONE==rc) rc = 0;
+ if( 0!=rc && throwOnError){
+ throw new SqliteException(db);
+ }
+ return rc;
+ }
+
+ static void execSql(Sqlite db, String sql){
+ execSql(db, true, sql);
+ }
+
@SingleThreadOnly /* because it's thread-agnostic */
private void test1(){
- affirm(sqlite3_libversion_number() == SQLITE_VERSION_NUMBER);
+ affirm(CApi.sqlite3_libversion_number() == CApi.SQLITE_VERSION_NUMBER);
}
/* Copy/paste/rename this to add new tests. */
@@ -127,9 +194,11 @@ public class Tester2 implements Runnable {
}
Sqlite openDb(String name){
- return Sqlite.open(name, SQLITE_OPEN_READWRITE|
- SQLITE_OPEN_CREATE|
- SQLITE_OPEN_EXRESCODE);
+ final Sqlite db = Sqlite.open(name, CApi.SQLITE_OPEN_READWRITE|
+ CApi.SQLITE_OPEN_CREATE|
+ CApi.SQLITE_OPEN_EXRESCODE);
+ ++metrics.dbOpen;
+ return db;
}
Sqlite openDb(){ return openDb(":memory:"); }
@@ -157,22 +226,78 @@ public class Tester2 implements Runnable {
try (Sqlite db = openDb()) {
Sqlite.Stmt stmt = db.prepare("SELECT 1");
affirm( null!=stmt.nativeHandle() );
- affirm( SQLITE_ROW == stmt.step() );
- affirm( SQLITE_DONE == stmt.step() );
+ affirm( CApi.SQLITE_ROW == stmt.step() );
+ affirm( CApi.SQLITE_DONE == stmt.step() );
stmt.reset();
- affirm( SQLITE_ROW == stmt.step() );
- affirm( SQLITE_DONE == stmt.step() );
+ affirm( CApi.SQLITE_ROW == stmt.step() );
+ affirm( CApi.SQLITE_DONE == stmt.step() );
affirm( 0 == stmt.finalizeStmt() );
affirm( null==stmt.nativeHandle() );
stmt = db.prepare("SELECT 1");
- affirm( SQLITE_ROW == stmt.step() );
+ affirm( CApi.SQLITE_ROW == stmt.step() );
affirm( 0 == stmt.finalizeStmt() )
/* getting a non-0 out of sqlite3_finalize() is tricky */;
affirm( null==stmt.nativeHandle() );
}
}
+ void testUdfScalar(){
+ final ValueHolder xDestroyCalled = new ValueHolder<>(0);
+ try (Sqlite db = openDb()) {
+ execSql(db, "create table t(a); insert into t(a) values(1),(2),(3)");
+ final ValueHolder vh = new ValueHolder<>(0);
+ final ScalarFunction f = new ScalarFunction(){
+ public void xFunc(SqlFunction.Arguments args){
+ for( SqlFunction.Arguments.Arg arg : args ){
+ vh.value += arg.getInt();
+ }
+ }
+ public void xDestroy(){
+ ++xDestroyCalled.value;
+ }
+ };
+ db.createFunction("myfunc", -1, f);
+ execSql(db, "select myfunc(1,2,3)");
+ affirm( 6 == vh.value );
+ vh.value = 0;
+ execSql(db, "select myfunc(-1,-2,-3)");
+ affirm( -6 == vh.value );
+ affirm( 0 == xDestroyCalled.value );
+ }
+ affirm( 1 == xDestroyCalled.value );
+ }
+
+ void testUdfAggregate(){
+ final ValueHolder xDestroyCalled = new ValueHolder<>(0);
+ final ValueHolder vh = new ValueHolder<>(0);
+ try (Sqlite db = openDb()) {
+ execSql(db, "create table t(a); insert into t(a) values(1),(2),(3)");
+ final AggregateFunction f = new AggregateFunction(){
+ public void xStep(SqlFunction.Arguments args){
+ final ValueHolder agg = this.getAggregateState(args, 0);
+ for( SqlFunction.Arguments.Arg arg : args ){
+ agg.value += arg.getInt();
+ }
+ }
+ public void xFinal(SqlFunction.Arguments args){
+ final Integer v = this.takeAggregateState(args);
+ if( null==v ) args.resultNull();
+ else args.resultInt(v);
+ vh.value = v;
+ }
+ public void xDestroy(){
+ ++xDestroyCalled.value;
+ }
+ };
+ db.createFunction("myagg", -1, f);
+ execSql(db, "select myagg(a) from t");
+ affirm( 6 == vh.value );
+ affirm( 0 == xDestroyCalled.value );
+ }
+ affirm( 1 == xDestroyCalled.value );
+ }
+
private void runTests(boolean fromThread) throws Exception {
List mlist = testMethods;
affirm( null!=mlist );
@@ -219,8 +344,8 @@ public class Tester2 implements Runnable {
listErrors.add(e);
}
}finally{
- affirm( sqlite3_java_uncache_thread() );
- affirm( !sqlite3_java_uncache_thread() );
+ affirm( CApi.sqlite3_java_uncache_thread() );
+ affirm( !CApi.sqlite3_java_uncache_thread() );
}
}
@@ -290,7 +415,7 @@ public class Tester2 implements Runnable {
}
if( sqlLog ){
- if( sqlite3_compileoption_used("ENABLE_SQLLOG") ){
+ if( CApi.sqlite3_compileoption_used("ENABLE_SQLLOG") ){
final ConfigSqllogCallback log = new ConfigSqllogCallback() {
@Override public void call(sqlite3 db, String msg, int op){
switch(op){
@@ -300,11 +425,11 @@ public class Tester2 implements Runnable {
}
}
};
- int rc = sqlite3_config( log );
+ int rc = CApi.sqlite3_config( log );
affirm( 0==rc );
- rc = sqlite3_config( (ConfigSqllogCallback)null );
+ rc = CApi.sqlite3_config( (ConfigSqllogCallback)null );
affirm( 0==rc );
- rc = sqlite3_config( log );
+ rc = CApi.sqlite3_config( log );
affirm( 0==rc );
}else{
outln("WARNING: -sqllog is not active because library was built ",
@@ -317,11 +442,11 @@ public class Tester2 implements Runnable {
outln("ConfigLogCallback: ",ResultCode.getEntryForInt(code),": ", msg);
};
};
- int rc = sqlite3_config( log );
+ int rc = CApi.sqlite3_config( log );
affirm( 0==rc );
- rc = sqlite3_config( (ConfigLogCallback)null );
+ rc = CApi.sqlite3_config( (ConfigLogCallback)null );
affirm( 0==rc );
- rc = sqlite3_config( log );
+ rc = CApi.sqlite3_config( log );
affirm( 0==rc );
}
@@ -356,33 +481,33 @@ public class Tester2 implements Runnable {
final long timeStart = System.currentTimeMillis();
int nLoop = 0;
- switch( sqlite3_threadsafe() ){ /* Sanity checking */
+ switch( CApi.sqlite3_threadsafe() ){ /* Sanity checking */
case 0:
- affirm( SQLITE_ERROR==sqlite3_config( SQLITE_CONFIG_SINGLETHREAD ),
+ affirm( CApi.SQLITE_ERROR==CApi.sqlite3_config( CApi.SQLITE_CONFIG_SINGLETHREAD ),
"Could not switch to single-thread mode." );
- affirm( SQLITE_ERROR==sqlite3_config( SQLITE_CONFIG_MULTITHREAD ),
+ affirm( CApi.SQLITE_ERROR==CApi.sqlite3_config( CApi.SQLITE_CONFIG_MULTITHREAD ),
"Could switch to multithread mode." );
- affirm( SQLITE_ERROR==sqlite3_config( SQLITE_CONFIG_SERIALIZED ),
+ affirm( CApi.SQLITE_ERROR==CApi.sqlite3_config( CApi.SQLITE_CONFIG_SERIALIZED ),
"Could not switch to serialized threading mode." );
outln("This is a single-threaded build. Not using threads.");
nThread = 1;
break;
case 1:
case 2:
- affirm( 0==sqlite3_config( SQLITE_CONFIG_SINGLETHREAD ),
+ affirm( 0==CApi.sqlite3_config( CApi.SQLITE_CONFIG_SINGLETHREAD ),
"Could not switch to single-thread mode." );
- affirm( 0==sqlite3_config( SQLITE_CONFIG_MULTITHREAD ),
+ affirm( 0==CApi.sqlite3_config( CApi.SQLITE_CONFIG_MULTITHREAD ),
"Could not switch to multithread mode." );
- affirm( 0==sqlite3_config( SQLITE_CONFIG_SERIALIZED ),
+ affirm( 0==CApi.sqlite3_config( CApi.SQLITE_CONFIG_SERIALIZED ),
"Could not switch to serialized threading mode." );
break;
default:
affirm( false, "Unhandled SQLITE_THREADSAFE value." );
}
outln("libversion_number: ",
- sqlite3_libversion_number(),"\n",
- sqlite3_libversion(),"\n",SQLITE_SOURCE_ID,"\n",
- "SQLITE_THREADSAFE=",sqlite3_threadsafe());
+ CApi.sqlite3_libversion_number(),"\n",
+ CApi.sqlite3_libversion(),"\n",CApi.SQLITE_SOURCE_ID,"\n",
+ "SQLITE_THREADSAFE=",CApi.sqlite3_threadsafe());
final boolean showLoopCount = (nRepeat>1 && nThread>1);
if( showLoopCount ){
outln("Running ",nRepeat," loop(s) with ",nThread," thread(s) each.");
@@ -427,10 +552,10 @@ public class Tester2 implements Runnable {
outln("\tAssertions checked: ",affirmCount);
outln("\tDatabases opened: ",metrics.dbOpen);
if( doSomethingForDev ){
- sqlite3_jni_internal_details();
+ CApi.sqlite3_jni_internal_details();
}
- affirm( 0==sqlite3_release_memory(1) );
- sqlite3_shutdown();
+ affirm( 0==CApi.sqlite3_release_memory(1) );
+ CApi.sqlite3_shutdown();
int nMethods = 0;
int nNatives = 0;
int nCanonical = 0;
diff --git a/ext/jni/src/org/sqlite/jni/wrapper1/ValueHolder.java b/ext/jni/src/org/sqlite/jni/wrapper1/ValueHolder.java
new file mode 100644
index 0000000000..009936a43e
--- /dev/null
+++ b/ext/jni/src/org/sqlite/jni/wrapper1/ValueHolder.java
@@ -0,0 +1,25 @@
+/*
+** 2023-10-16
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+*************************************************************************
+** This file contains a set of tests for the sqlite3 JNI bindings.
+*/
+package org.sqlite.jni.wrapper1;
+
+/**
+ A helper class which simply holds a single value. Its primary use
+ is for communicating values out of anonymous classes, as doing so
+ requires a "final" reference.
+*/
+public class ValueHolder {
+ public T value;
+ public ValueHolder(){}
+ public ValueHolder(T v){value = v;}
+}
diff --git a/ext/rtree/geopoly.c b/ext/rtree/geopoly.c
index 7bda24a8cb..3e9c2a2713 100644
--- a/ext/rtree/geopoly.c
+++ b/ext/rtree/geopoly.c
@@ -1252,6 +1252,7 @@ static int geopolyInit(
(void)pAux;
sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
+ sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS);
/* Allocate the sqlite3_vtab structure */
nDb = strlen(argv[1]);
diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c
index 8f01be37f6..682c052c56 100644
--- a/ext/rtree/rtree.c
+++ b/ext/rtree/rtree.c
@@ -3615,6 +3615,8 @@ static int rtreeInit(
}
sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
+ sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS);
+
/* Allocate the sqlite3_vtab structure */
nDb = (int)strlen(argv[1]);
@@ -4130,7 +4132,6 @@ static int rtreeCheckTable(
){
RtreeCheck check; /* Common context for various routines */
sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */
- int bEnd = 0; /* True if transaction should be closed */
int nAux = 0; /* Number of extra columns. */
/* Initialize the context object */
@@ -4139,14 +4140,6 @@ static int rtreeCheckTable(
check.zDb = zDb;
check.zTab = zTab;
- /* If there is not already an open transaction, open one now. This is
- ** to ensure that the queries run as part of this integrity-check operate
- ** on a consistent snapshot. */
- if( sqlite3_get_autocommit(db) ){
- check.rc = sqlite3_exec(db, "BEGIN", 0, 0, 0);
- bEnd = 1;
- }
-
/* Find the number of auxiliary columns */
if( check.rc==SQLITE_OK ){
pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab);
@@ -4187,11 +4180,6 @@ static int rtreeCheckTable(
sqlite3_finalize(check.aCheckMapping[0]);
sqlite3_finalize(check.aCheckMapping[1]);
- /* If one was opened, close the transaction */
- if( bEnd ){
- int rc = sqlite3_exec(db, "END", 0, 0, 0);
- if( check.rc==SQLITE_OK ) check.rc = rc;
- }
*pzReport = check.zReport;
return check.rc;
}
diff --git a/ext/rtree/rtree1.test b/ext/rtree/rtree1.test
index 633d0a5d5f..2d8458a538 100644
--- a/ext/rtree/rtree1.test
+++ b/ext/rtree/rtree1.test
@@ -784,4 +784,15 @@ do_execsql_test 22.1 {
SELECT id, x0 > 9223372036854775807 AS 'a0' FROM t1;
} {123 1}
+# 2023-10-14 dbsqlfuzz --sql-fuzz find. rtreecheck() should not call
+# BEGIN/COMMIT because that causes problems with statement transactions,
+# and it is unnecessary.
+#
+reset_db
+do_test 23.0 {
+ db eval {CREATE TABLE t1(a,b,c);}
+ catch {db eval {CREATE TABLE t2 AS SELECT rtreecheck('t1') AS y;}}
+ db eval {PRAGMA integrity_check;}
+} {ok}
+
finish_test
diff --git a/ext/wasm/api/sqlite3-api-worker1.js b/ext/wasm/api/sqlite3-api-worker1.js
index 9a386c13e7..29f7d2be63 100644
--- a/ext/wasm/api/sqlite3-api-worker1.js
+++ b/ext/wasm/api/sqlite3-api-worker1.js
@@ -333,7 +333,6 @@ sqlite3.initWorker1API = function(){
if(!(globalThis.WorkerGlobalScope instanceof Function)){
toss("initWorker1API() must be run from a Worker thread.");
}
- const self = this.self;
const sqlite3 = this.sqlite3 || toss("Missing this.sqlite3 object.");
const DB = sqlite3.oo1.DB;
@@ -657,5 +656,5 @@ sqlite3.initWorker1API = function(){
}, wState.xfer);
};
globalThis.postMessage({type:'sqlite3-api',result:'worker1-ready'});
-}.bind({self, sqlite3});
+}.bind({sqlite3});
});
diff --git a/ext/wasm/api/sqlite3-worker1.c-pp.js b/ext/wasm/api/sqlite3-worker1.c-pp.js
index f260422309..220722ffe1 100644
--- a/ext/wasm/api/sqlite3-worker1.c-pp.js
+++ b/ext/wasm/api/sqlite3-worker1.c-pp.js
@@ -37,7 +37,7 @@ import {default as sqlite3InitModule} from './sqlite3-bundler-friendly.mjs';
"use strict";
{
const urlParams = globalThis.location
- ? new URL(self.location.href).searchParams
+ ? new URL(globalThis.location.href).searchParams
: new URLSearchParams();
let theJs = 'sqlite3.js';
if(urlParams.has('sqlite3.dir')){
diff --git a/manifest b/manifest
index addf7011fa..91428eb475 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\sfixes\sfrom\strunk\sinto\sthe\sjsonb\sbranch.
-D 2023-10-12T17:47:50.731
+C Merge\srecent\strunk\senhancements\sinto\sthe\sjsonb\sbranch.
+D 2023-10-19T20:46:22.878
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -60,7 +60,7 @@ F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts3/fts3.c 4095c97f2960f508bd34fc06d40f61d54e2ad09e7fbab75dc0114f57ebb6040d
+F ext/fts3/fts3.c 89298f42a071d4f08588a308cf2904fc5014f59b47ea48949a127b5747e9b90a
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
F ext/fts3/fts3Int.h e573c6d881f7238d77cc3fd2396cbb9b2fe13efef7d2ad295a155151c4e7efbd
F ext/fts3/fts3_aux.c 7eab82a9cf0830f6551ba3abfdbe73ed39e322a4d3940ee82fbf723674ecd9f3
@@ -78,7 +78,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
F ext/fts3/fts3_tokenizer1.c c1de4ae28356ad98ccb8b2e3388a7fdcce7607b5523738c9afb6275dab765154
F ext/fts3/fts3_unicode.c de426ff05c1c2e7bce161cf6b706638419c3a1d9c2667de9cb9dc0458c18e226
F ext/fts3/fts3_unicode2.c 416eb7e1e81142703520d284b768ca2751d40e31fa912cae24ba74860532bf0f
-F ext/fts3/fts3_write.c b28f4cde90ed560245ecb76a882b45aa62da16ff6f61e9884eae5c7c5eff16ea
+F ext/fts3/fts3_write.c 3a0043bb527c5d11e90493fd9fead30836e161a5330ba2ba739b372b03ea0459
F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
F ext/fts3/tool/fts3cov.sh c331d006359456cf6f8f953e37f2b9c7d568f3863f00bb5f7eb87fea4ac01b73
F ext/fts3/tool/fts3view.c 413c346399159df81f86c4928b7c4a455caab73bfbc8cd68f950f632e5751674
@@ -94,8 +94,8 @@ F ext/fts5/fts5_buffer.c 3001fbabb585d6de52947b44b455235072b741038391f830d6b7292
F ext/fts5/fts5_config.c 054359543566cbff1ba65a188330660a5457299513ac71c53b3a07d934c7b081
F ext/fts5/fts5_expr.c bd3b81ce669c4104e34ffe66570af1999a317b142c15fccb112de9fb0caa57a6
F ext/fts5/fts5_hash.c 65e7707bc8774706574346d18c20218facf87de3599b995963c3e6d6809f203d
-F ext/fts5/fts5_index.c 5c3872a01ae519af9839b675408163aab8eb1e31917c8b3d0ce726b4ad11d942
-F ext/fts5/fts5_main.c 799ec88d2309055f6406bddb0bd6ed80148c5da5eb14594c3c5309a6e944d489
+F ext/fts5/fts5_index.c a0f8e58e1c101d0b7959264f76b8c0c3c44914a999b29ec4264a6f55f1bccfe1
+F ext/fts5/fts5_main.c 95b479e4cc1ae5d22084caa9d85295ed759044d24a0c1679115aea4910792a1f
F ext/fts5/fts5_storage.c 3c9b41fce41b6410f2e8f82eb035c6a29b2560483f773e6dc98cf3cb2e4ddbb5
F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae
F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
@@ -204,7 +204,7 @@ F ext/fts5/test/fts5secure2.test 2e961d7eef939f294c56b5d895cac7f1c3a60b934ee2cfd
F ext/fts5/test/fts5secure3.test c7e1080a6912f2a3ac68f2e05b88b72a99de38543509b2bbf427cac5c9c1c610
F ext/fts5/test/fts5secure4.test 0d10a80590c07891478700af7793b232962042677432b9846cf7fc8337b67c97
F ext/fts5/test/fts5secure5.test c07a68ced5951567ac116c22f2d2aafae497e47fe9fcb6a335c22f9c7a4f2c3a
-F ext/fts5/test/fts5secure6.test 120feecc8c55b4774f858721e6c62c2094b059ecbcfd7fdc24bde886f55ef6ca
+F ext/fts5/test/fts5secure6.test 74bf04733cc523bccca519bb03d3b4e2ed6f6e3db7c59bf6be82c88a0ac857fd
F ext/fts5/test/fts5secure7.test fd03d0868d64340a1db8615b02e5508fea409de13910114e4f19eaefc120777a
F ext/fts5/test/fts5securefault.test dbca2b6a1c16700017f5051138991b705410889933f2a37c57ae8a23b296b10b
F ext/fts5/test/fts5simple.test a298670508c1458b88ce6030440f26a30673931884eb5f4094ac1773b3ba217b
@@ -235,63 +235,67 @@ F ext/fts5/tool/showfts5.tcl d54da0e067306663e2d5d523965ca487698e722c
F ext/icu/README.txt 7ab7ced8ae78e3a645b57e78570ff589d4c672b71370f5aa9e1cd7024f400fc9
F ext/icu/icu.c c074519b46baa484bb5396c7e01e051034da8884bad1a1cb7f09bbe6be3f0282
F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a32075a8
-F ext/jni/GNUmakefile 6da240c9a11701f3ed569384cd15ef611e8b3c5e3897d265923b14bf0e1eb272
+F ext/jni/GNUmakefile 5c3ac326bf3853486ebe0d70819abc790cc65c412182ce4ebd5012b008d9b059
F ext/jni/README.md ef9ac115e97704ea995d743b4a8334e23c659e5534c3b64065a5405256d5f2f4
F ext/jni/jar-dist.make 030aaa4ae71dd86e4ec5e7c1e6cd86f9dfa47c4592c070d2e35157e42498e1fa
-F ext/jni/src/c/sqlite3-jni.c bf432771fbc84da2b5f4037e0bcf20757548aac2fa782b272c4894a9c279964a
-F ext/jni/src/c/sqlite3-jni.h be1fdff7ab3a2bb357197271c8ac5d2bf6ff59380c106dde3a13be88724bad22
-F ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java 95e88ba04f4aac51ffec65693e878e234088b2f21b387f4e4285c8b72b33e436
-F ext/jni/src/org/sqlite/jni/AggregateFunction.java 7312486bc65fecdb91753c0a4515799194e031f45edbe16a6373cea18f404dc4
-F ext/jni/src/org/sqlite/jni/AuthorizerCallback.java fde5f758ad170ca45ae00b12194c8ba8d8f3090bd64cc3e002dd9c5e7dff8568
-F ext/jni/src/org/sqlite/jni/AutoExtensionCallback.java c0fbfd3779fc92982c7935325a7484dee43eeb80d716989ed31218f453addb94
-F ext/jni/src/org/sqlite/jni/BusyHandlerCallback.java 4cb7fc70efd55583fed6033c34a8719da42975ca97ef4781dda0b9f6cc8ec2e8
-F ext/jni/src/org/sqlite/jni/CApi.java c1dde485a3a3f43c46c8d9c527f9ba5bf303fe0409b2c0de253fb7b6e1055f7e
-F ext/jni/src/org/sqlite/jni/CallbackProxy.java 064a8a00e4c63cc501c30504f93ca996d422c5f010067f969b2d0a10f0868153
-F ext/jni/src/org/sqlite/jni/CollationCallback.java 8cf57cb014a645ecc12609eed17308852a597bc5e83d82a4fdb90f7fadc25f9d
-F ext/jni/src/org/sqlite/jni/CollationNeededCallback.java 0c62245e000d5db52576c728cac20f6a31f31f5cf40ca4cbcd64b22964e82ae5
-F ext/jni/src/org/sqlite/jni/CommitHookCallback.java d15bd87ca6159a48b281966cf7a6e67dd17e2fabf974a797c9e3a66a74f361e8
-F ext/jni/src/org/sqlite/jni/ConfigLogCallback.java 16bb391d8d4ae89cc43baa3cfa0c80c988003627b7ea872deb41156a76f7e867
-F ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java 6d6b64638123acb70ffefcd5d2345b1bea3d3b528727d1684cc20cc2357f03a0
-F ext/jni/src/org/sqlite/jni/NativePointerHolder.java 3eb36b5e81993a847f5ec03d23ab219a92671f817547b6a85d312667faeedd8b
-F ext/jni/src/org/sqlite/jni/OutputPointer.java 2f57c05672ddc9b38e3f8eed11759896cf0bf01107ffd24d5182b99f6e7254b6
-F ext/jni/src/org/sqlite/jni/PrepareMultiCallback.java 6f051951fecab41f2e842b1ac1d3c498706de9387c86f62564e2afbe03d026cb
-F ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java 242dc2afea13c45b4809d41b6a919e0a4003508713ceffe5f6545270138c6a7b
-F ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java 247a47f49a1dd54fda28201c27796d2600a5c904f47fa21697a5377d49febe56
-F ext/jni/src/org/sqlite/jni/ResultCode.java dc7400b8b18df10027525d8d0f04300b2c6afc617d4d980923f8b5bb14412f3a
-F ext/jni/src/org/sqlite/jni/RollbackHookCallback.java ec6cd96bff5d3bc5af079cbf1469ae7fb34c50583a23581a58d6b2f8b55bafd3
-F ext/jni/src/org/sqlite/jni/SQLFunction.java 544a875d33fd160467d82e2397ac33157b29971d715a821a4fad3c899113ee8c
-F ext/jni/src/org/sqlite/jni/SQLTester.java d246c67f93e2fa2603bd106dbb3246ea725c987dffd6e5d42214ae262f750c68
-F ext/jni/src/org/sqlite/jni/ScalarFunction.java 6d387bb499fbe3bc13c53315335233dbf6a0c711e8fa7c521683219b041c614c
-F ext/jni/src/org/sqlite/jni/Sqlite.java 1617ea2bf3dfa493b7f031a3187cbfd6837c39bc1d406c4b3edcf9aab941639d
-F ext/jni/src/org/sqlite/jni/SqliteException.java e17500e8bca2c68c260d8d0163fe4b7dc8bd0b1b90211201325c4a5566ce75ca
-F ext/jni/src/org/sqlite/jni/TableColumnMetadata.java 54511b4297fa28dcb3f49b24035e34ced10e3fd44fd0e458e784f4d6b0096dab
-F ext/jni/src/org/sqlite/jni/Tester1.java f7b85fe24cf6c3e43bdf7e390617657e8137359f804d76921829c2a8c41b6df1
-F ext/jni/src/org/sqlite/jni/Tester2.java 70e005d41060e398ec0f69bd39a8e1c376fd51f81629cf25e877889ec9cb6ec6
-F ext/jni/src/org/sqlite/jni/TesterFts5.java d60fe9944a81156b3b5325dd1b0e8e92a1547468f39fd1266d06f7bb6a95fa70
-F ext/jni/src/org/sqlite/jni/TraceV2Callback.java f157edd9c72e7d2243c169061487cd7bb51a0d50f3ac976dbcbbacf748ab1fc2
-F ext/jni/src/org/sqlite/jni/UpdateHookCallback.java 959d4677a857c9079c6e96ddd10918b946d68359af6252b6f284379069ea3d27
-F ext/jni/src/org/sqlite/jni/WindowFunction.java 488980f4dbb6bdd7067d6cb9c43e4075475e51c54d9b74a5834422654b126246
-F ext/jni/src/org/sqlite/jni/XDestroyCallback.java 50c5ca124ef6c6b735a7e136e7a23a557be367e61b56d4aab5777a614ab46cc2
+F ext/jni/src/c/sqlite3-jni.c 8d32ca0598a11370a9e92a6d111f38934c225056b42b13512175acf6e37eed4c
+F ext/jni/src/c/sqlite3-jni.h b4c413a0d0c734683da1049cfcf89e35ae2719759d0656ec0f8c57188f18cab8
F ext/jni/src/org/sqlite/jni/annotation/NotNull.java a99341e88154e70447596b1af6a27c586317df41a7e0f246fd41370cd7b723b2
F ext/jni/src/org/sqlite/jni/annotation/Nullable.java 0b1879852707f752512d4db9d7edd0d8db2f0c2612316ce1c832715e012ff6ba
F ext/jni/src/org/sqlite/jni/annotation/package-info.java 977b374aed9d5853cbf3438ba3b0940abfa2ea4574f702a2448ee143b98ac3ca
+F ext/jni/src/org/sqlite/jni/capi/AbstractCollationCallback.java 1afa90d3f236f79cc7fcd2497e111992644f7596fbc8e8bcf7f1908ae00acd6c w ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java
+F ext/jni/src/org/sqlite/jni/capi/AggregateFunction.java bc29e986c866c2ddbbb9f935f5b7264c1c1026864e50a4a735192864f75e37c0 w ext/jni/src/org/sqlite/jni/AggregateFunction.java
+F ext/jni/src/org/sqlite/jni/capi/AuthorizerCallback.java 7ed409d5449684616cc924534e22ff6b07d361f12ad904b69ecb10e0568a8013 w ext/jni/src/org/sqlite/jni/AuthorizerCallback.java
+F ext/jni/src/org/sqlite/jni/capi/AutoExtensionCallback.java 74cc4998a73d6563542ecb90804a3c4f4e828cb4bd69e61226d1a51f4646e759 w ext/jni/src/org/sqlite/jni/AutoExtensionCallback.java
+F ext/jni/src/org/sqlite/jni/capi/BusyHandlerCallback.java 7b8e19810c42b0ad21a04b5d8c804b32ee5905d137148703f16a75b612c380ca w ext/jni/src/org/sqlite/jni/BusyHandlerCallback.java
+F ext/jni/src/org/sqlite/jni/capi/CApi.java 5d754b4bb57852d006ad046b2860eb23ba406f800846460b26beee5172df4fc3 w ext/jni/src/org/sqlite/jni/CApi.java
+F ext/jni/src/org/sqlite/jni/capi/CallbackProxy.java 0bfd6e56e8265c2f05c9207665707285534d78f8466ef0e0430c65677f00943d w ext/jni/src/org/sqlite/jni/CallbackProxy.java
+F ext/jni/src/org/sqlite/jni/capi/CollationCallback.java e29bcfc540fdd343e2f5cca4d27235113f2886acb13380686756d5cabdfd065a w ext/jni/src/org/sqlite/jni/CollationCallback.java
+F ext/jni/src/org/sqlite/jni/capi/CollationNeededCallback.java f81cf10b79c52f9b2e9247d523d29ae48863935f60420eae35f257c38c80ce95 w ext/jni/src/org/sqlite/jni/CollationNeededCallback.java
+F ext/jni/src/org/sqlite/jni/capi/CommitHookCallback.java 29c002f3c638cc80f7db1594564a262d1beb32637824c3dca2d60a224d1f71d7 w ext/jni/src/org/sqlite/jni/CommitHookCallback.java
+F ext/jni/src/org/sqlite/jni/capi/ConfigLogCallback.java b995ca412f59b631803b93aa5b3684fce62e335d1e123207084c054abfd488d4 w ext/jni/src/org/sqlite/jni/ConfigLogCallback.java
+F ext/jni/src/org/sqlite/jni/capi/ConfigSqllogCallback.java 701f2e4d8bdeb27cfbeeb56315d15b13d8752b0fdbca705f31bd4366c58d8a33 w ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java
+F ext/jni/src/org/sqlite/jni/capi/NativePointerHolder.java b7036dcb1ef1b39f1f36ac605dde0ff1a24a9a01ade6aa1a605039443e089a61 w ext/jni/src/org/sqlite/jni/NativePointerHolder.java
+F ext/jni/src/org/sqlite/jni/capi/OutputPointer.java 68f60aec7aeb5cd4e5fb83449037f668c63cb99f682ee1036cc226d0cbd909b9 w ext/jni/src/org/sqlite/jni/OutputPointer.java
+F ext/jni/src/org/sqlite/jni/capi/PrepareMultiCallback.java aca8f9fa72e3b6602bc9a7dd3ae9f5b2808103fbbee9b2749dc96c19cdc261a1 w ext/jni/src/org/sqlite/jni/PrepareMultiCallback.java
+F ext/jni/src/org/sqlite/jni/capi/PreupdateHookCallback.java 819d938e26208adde17ca4b7ddde1d8cd6915b6ab7b708249a9787beca6bd6b6 w ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java
+F ext/jni/src/org/sqlite/jni/capi/ProgressHandlerCallback.java 01bc0c238eed2d5f93c73522cb7849a445cc9098c2ed1e78248fa20ed1cfde5b w ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java
+F ext/jni/src/org/sqlite/jni/capi/ResultCode.java 8141171f1bcf9f46eef303b9d3c5dc2537a25ad1628f3638398d8a60cacefa7f w ext/jni/src/org/sqlite/jni/ResultCode.java
+F ext/jni/src/org/sqlite/jni/capi/RollbackHookCallback.java 105e324d09c207100485e7667ad172e64322c62426bb49b547e9b0dc9c33f5f0 w ext/jni/src/org/sqlite/jni/RollbackHookCallback.java
+F ext/jni/src/org/sqlite/jni/capi/SQLFunction.java fef556adbc3624292423083a648bdf97fa8a4f6b3b6577c9660dd7bd6a6d3c4a w ext/jni/src/org/sqlite/jni/SQLFunction.java
+F ext/jni/src/org/sqlite/jni/capi/SQLTester.java 09bee15aa0eedac68d767ae21d9a6a62a31ade59182a3ccbf036d6463d9e30b1 w ext/jni/src/org/sqlite/jni/SQLTester.java
+F ext/jni/src/org/sqlite/jni/capi/ScalarFunction.java 93b9700fca4c68075ccab12fe0fbbc76c91cafc9f368e835b9bd7cd7732c8615 w ext/jni/src/org/sqlite/jni/ScalarFunction.java
+F ext/jni/src/org/sqlite/jni/capi/TableColumnMetadata.java addf120e0e76e5be1ff2260daa7ce305ff9b5fafd64153a7a28e9d8f000a815f w ext/jni/src/org/sqlite/jni/TableColumnMetadata.java
+F ext/jni/src/org/sqlite/jni/capi/Tester1.java ca195521b6bda3e0cd00e76bb71ec8060d1fab76a2f13b1af9feea40789f44bb w ext/jni/src/org/sqlite/jni/Tester1.java
+F ext/jni/src/org/sqlite/jni/capi/TraceV2Callback.java 0a25e117a0daae3394a77f24713e36d7b44c67d6e6d30e9e1d56a63442eef723 w ext/jni/src/org/sqlite/jni/TraceV2Callback.java
+F ext/jni/src/org/sqlite/jni/capi/UpdateHookCallback.java 2766b8526bbffc4f1045f70e79f1bc1b1efe1c3e95ca06cdb8a7391032dda3b4 w ext/jni/src/org/sqlite/jni/UpdateHookCallback.java
+F ext/jni/src/org/sqlite/jni/capi/ValueHolder.java 9f9e151f1da017b706c0ee5f40f4c86b54e773d6ae4339723e0cc85a456251ab
+F ext/jni/src/org/sqlite/jni/capi/WindowFunction.java caf4396f91b2567904cf94bc538a069fd62260d975bd037d15a02a890ed1ef9e w ext/jni/src/org/sqlite/jni/WindowFunction.java
+F ext/jni/src/org/sqlite/jni/capi/XDestroyCallback.java f3abb8dd7381f53ebba909437090caf68200f06717b8a7d6aa96fa3e8133117d w ext/jni/src/org/sqlite/jni/XDestroyCallback.java
+F ext/jni/src/org/sqlite/jni/capi/package-info.java 08ff986a65d2be9162442c82d28a65ce431d826f188520717c2ecb1484d0a50e w ext/jni/src/org/sqlite/jni/package-info.java
+F ext/jni/src/org/sqlite/jni/capi/sqlite3.java 4010bbebc5bf44e2044e610786088cdee7dc155da2b333c0551492ff1cedf33b w ext/jni/src/org/sqlite/jni/sqlite3.java
+F ext/jni/src/org/sqlite/jni/capi/sqlite3_backup.java 6742b431cd4d77e8000c1f92ec66265a58414c86bf3b0b5fbcb1164e08477227 w ext/jni/src/org/sqlite/jni/sqlite3_backup.java
+F ext/jni/src/org/sqlite/jni/capi/sqlite3_blob.java f204ab6ab1263e119fe43730141a00662d80972129a5351dfb11aae5d282df36 w ext/jni/src/org/sqlite/jni/sqlite3_blob.java
+F ext/jni/src/org/sqlite/jni/capi/sqlite3_context.java f0ef982009c335c4393ffcb68051809ca1711e4f47bcb8d1d46952f22c01bc22 w ext/jni/src/org/sqlite/jni/sqlite3_context.java
+F ext/jni/src/org/sqlite/jni/capi/sqlite3_stmt.java ff579621e9bd5ffbc6b2ef9f996c12db4df6e0c8cc5697c91273e5fca279fcf8 w ext/jni/src/org/sqlite/jni/sqlite3_stmt.java
+F ext/jni/src/org/sqlite/jni/capi/sqlite3_value.java e1d62a257c13504b46d39d5c21c49cf157ad73fda00cc5f34c931aa008c37049 w ext/jni/src/org/sqlite/jni/sqlite3_value.java
F ext/jni/src/org/sqlite/jni/fts5/Fts5.java e94681023785f1eff5399f0ddc82f46b035977d350f14838db659236ebdf6b41
-F ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java 7058da97059b8e156c17561a47ecd7faa0fc3e2d8c2588b9a28dbff8d06202dd
-F ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java c8e06475a6172a7cd61b2bad9cfb18b6f059ffdd2935e62856f95785a14fe0e5
-F ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java 2a7f3d76a1206e6a43d4c4ed9609b294d5431cc7d8fb875d8419f76efa6e56dc
-F ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java cc9a53846a168a215238af224c31cef0e8379780e36e8a5e743b00c08145cf19
+F ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java 338637e6e5a2cc385d962b220f3c1f475cc371d12ae43d18ef27327b6e6225f7
+F ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java 7da0fbb5728f7c056a43e6407f13dd0c7c9c445221267786a109b987f5fc8a9d
+F ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java 28045042d593a1f1b9b80d54ec77cbf1d8a1bc95e442eceefa9a3a6f56600b0e
+F ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java 3c8f677ffb85b8782f865d6fcbc16200b3375d0e3c29ed541a494fde3011bf49
+F ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java eaee4d641229a098eb704b96a45c9a23c6514dc39009d3611e265bab33834deb w ext/jni/src/org/sqlite/jni/TesterFts5.java
F ext/jni/src/org/sqlite/jni/fts5/XTokenizeCallback.java 1efd1220ea328a32f2d2a1b16c735864159e929480f71daad4de9d5944839167
-F ext/jni/src/org/sqlite/jni/fts5/fts5_api.java 90f09477331c371a8abe0a6504cfe094bc075b29a800be9d72a2c92a7bb49db1
-F ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java 1fe0f5692c1d67475d12b067f0469949073446f18c56eba5ee5da6ddd06db9b9
-F ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java ea993738b851038c16d98576abd0db3d6028a231f075a394fb8a78c7834d0f6c
-F ext/jni/src/org/sqlite/jni/package-info.java 7d465cbdf9050761db0db6d0c542afaaad7dc67f61510860592159c48bfc40e8
-F ext/jni/src/org/sqlite/jni/sqlite3.java 4fa76f9c618264ed17ab613570076002c0b78717261b263350cd92d6d6b01242
-F ext/jni/src/org/sqlite/jni/sqlite3_backup.java 42db8b2f9cd8e9e16217273890e5d4afbb102603d7130a2cb1651f1c69c1cfa4
-F ext/jni/src/org/sqlite/jni/sqlite3_blob.java 7c341bca1856475fc3bf3697251e0cf1d737ddcb099c65d90afdc164aaddcc51
-F ext/jni/src/org/sqlite/jni/sqlite3_context.java ba8da75eaaeb557c986af3fb4dbc69501cf2b083ca33497f2c0c70dbc0a53f2c
-F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java fa0703004721c49d6d08a0c1e99439fadb8cebaebf42b81ee3f427d7f950d1eb
-F ext/jni/src/org/sqlite/jni/sqlite3_value.java 3d1d4903e267bc0bc81d57d21f5e85978eff389a1a6ed46726dbe75f85e6914a
+F ext/jni/src/org/sqlite/jni/fts5/fts5_api.java a8e88c3783d21cec51b0748568a96653fead88f8f4953376178d9c7385b197ea
+F ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java 9e2b954d210d572552b28aca523b272fae14bd41e318921b22f65b728d5bf978
+F ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java 92bdaa3893bd684533004d64ade23d329843f809cd0d0f4f1a2856da6e6b4d90
F ext/jni/src/org/sqlite/jni/test-script-interpreter.md f9f25126127045d051e918fe59004a1485311c50a13edbf18c79a6ff9160030e
+F ext/jni/src/org/sqlite/jni/wrapper1/AggregateFunction.java 5ad99bd74c85f56bbef324d9ec29b4048f4620547c9a80093d8586c3557f9f9a
+F ext/jni/src/org/sqlite/jni/wrapper1/SqlFunction.java 004394eeb944baa56e36cd7ae69ba6d4a52b52db3c49439db16e98270b861421
+F ext/jni/src/org/sqlite/jni/wrapper1/Sqlite.java a9ddc6a9e8c113168cc67592ae24c0e56d30dd06226eeab012f2761a0889d7bb w ext/jni/src/org/sqlite/jni/Sqlite.java
+F ext/jni/src/org/sqlite/jni/wrapper1/SqliteException.java 1386f7b753134fc12253ce2fbbc448ba8c970567fac01a3356cb672e14408d73 w ext/jni/src/org/sqlite/jni/SqliteException.java
+F ext/jni/src/org/sqlite/jni/wrapper1/Tester2.java c24b510ebe801c30533cc62efdf69a4a5e2da9ec4b49f8d403f2060693f060a0 w ext/jni/src/org/sqlite/jni/Tester2.java
+F ext/jni/src/org/sqlite/jni/wrapper1/ValueHolder.java 7b89a7391f771692c5b83b0a5b86266abe8d59f1c77d7a0eccc9b79f259d79af
F ext/jni/src/tests/000-000-sanity.test c3427a0e0ac84d7cbe4c95fdc1cd4b61f9ddcf43443408f3000139478c4dc745
F ext/jni/src/tests/000-001-ignored.test e17e874c6ab3c437f1293d88093cf06286083b65bf162317f91bbfd92f961b70
F ext/jni/src/tests/900-001-fts.test bf0ce17a8d082773450e91f2388f5bbb2dfa316d0b676c313c637a91198090f0
@@ -474,10 +478,10 @@ F ext/repair/test/checkfreelist01.test 3e8aa6aeb4007680c94a8d07b41c339aa635cc782
F ext/repair/test/checkindex01.test b530f141413b587c9eb78ff734de6bb79bc3515c335096108c12c01bddbadcec
F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c
F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
-F ext/rtree/geopoly.c a7f8b4951e283300caf347cdc6097b66da9f6649797b12905fd528413b7ce267
-F ext/rtree/rtree.c b3b1c96e46fc820b57851b4fbab546c5317d40d1a2d54e23c9bb50be6090b3e0
+F ext/rtree/geopoly.c 0dd4775e896cee6067979d67aff7c998e75c2c9d9cd8d62a1a790c09cde7adca
+F ext/rtree/rtree.c da842644466b84391e9fa1b1d5a17f461b475b8e36f1217117d1d98ad5f437e3
F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412
-F ext/rtree/rtree1.test 877d40b8b61b1f88cec9d4dc0ff8334f5b05299fac12a35141532e2881860e9d
+F ext/rtree/rtree1.test ecc881fdd1bc10fc390faa988ad93343739af84384e4cf3619fed7afada66a30
F ext/rtree/rtree2.test 9d9deddbb16fd0c30c36e6b4fdc3ee3132d765567f0f9432ee71e1303d32603d
F ext/rtree/rtree3.test 272594f88c344e973864008bbe4c71fd3a41a264c097d568593ee7886d83d409
F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd73452c4b
@@ -575,7 +579,7 @@ F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b18817
F ext/wasm/api/sqlite3-api-glue.js 26aedfb27915f4f316f6eac84078443e4f0d2dfe5f012310014923ed4b77b2b6
F ext/wasm/api/sqlite3-api-oo1.js 9678dc4d9a5d39632b6ffe6ea94a023119260815bf32f265bf5f6c36c9516db8
F ext/wasm/api/sqlite3-api-prologue.js 9aeba7b45cf41b3a26d34d7fb2525633cd1adfc544888c1ea8dbb077496f4ce9
-F ext/wasm/api/sqlite3-api-worker1.js 9f32af64df1a031071912eea7a201557fe39b1738645c0134562bb84e88e2fec
+F ext/wasm/api/sqlite3-api-worker1.js f941382f21006b4a817754184e2661b0a63ce650201f3419cd60f4758b6fd60e
F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
F ext/wasm/api/sqlite3-opfs-async-proxy.js 8cf8a897726f14071fae6be6648125162b256dfb4f96555b865dbb7a6b65e379
F ext/wasm/api/sqlite3-v-helper.js 7daa0eab0a513a25b05e9abae7b5beaaa39209b3ed12f86aeae9ef8d2719ed25
@@ -583,7 +587,7 @@ F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js f7c965cf9ac0b66a538cd8f6c156f3f2
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 46c4afa6c50d7369252c104f274ad977a97e91ccfafc38b400fe36e90bdda88e
F ext/wasm/api/sqlite3-wasm.c c8c5b81b838cef2053b1eb6e7a79c44a2caedcf0c9e6b0d12a45d73ce0617be0
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js bc06df0d599e625bde6a10a394e326dc68da9ff07fa5404354580f81566e591f
-F ext/wasm/api/sqlite3-worker1.c-pp.js da509469755035e919c015deea41b4514b5e84c12a1332e6cc8d42cb2cc1fb75
+F ext/wasm/api/sqlite3-worker1.c-pp.js a541112aa51e16705f13a99bb943c64efe178aa28c86704a955f8fd9afe4ba37
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
F ext/wasm/batch-runner.js 0dad6a02ad796f1003d3b7048947d275c4d6277f63767b8e685c27df8fdac93e
F ext/wasm/c-pp.c 6d80d8569d85713effe8b0818a3cf51dc779e3f0bf8dc88771b8998552ee25b4
@@ -646,17 +650,17 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
F sqlite3.1 acdff36db796e2d00225b911d3047d580cd136547298435426ce9d40347973cc
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
F sqlite_cfg.h.in baf2e409c63d4e7a765e17769b6ff17c5a82bbd9cbf1e284fd2e4cefaff3fcf2
-F src/alter.c 3ff8c2fca0c0636d43459154bb40d79c882df1b34df77f89c4ec47ab2e2389f5
+F src/alter.c 30c2333b8bb3af71e4eb9adeadee8aa20edb15917ed44b8422e5cd15f3dfcddc
F src/analyze.c d4cc28738c29e009640ec20ebb6936ba6fcefff0d11aa93398d9bb9a5ead6c1f
F src/attach.c cc9d00d30da916ff656038211410ccf04ed784b7564639b9b61d1839ed69fd39
F src/auth.c 19b7ccacae3dfba23fc6f1d0af68134fa216e9040e53b0681b4715445ea030b4
F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523
F src/bitvec.c 9eac5f42c11914d5ef00a75605bb205e934f435c579687f985f1f8b0995c8645
F src/btmutex.c 79a43670447eacc651519a429f6ece9fd638563cf95b469d6891185ddae2b522
-F src/btree.c fbbbfc51d2fed03c29f20960857d97659d9c682523f32911d5a8e7c5be6436be
+F src/btree.c 63fb3269c93924e734e0586c22816effa530cee933df4aeb2b2e045de0339280
F src/btree.h 03e3356f5208bcab8eed4e094240fdac4a7f9f5ddf5e91045ce589f67d47c240
F src/btreeInt.h 91a9e0c41a0e71fa91a742ec285c63dd8dcb38b73d14fae0ed7209174ff0fdc1
-F src/build.c 79a4edcee69df5f20963d7b11faf0820d25e6f8c11ef3a9f868d14be87834711
+F src/build.c 1a9061ab67987cfa9c7f9d52ccc862a31d37ad2b05faaf0d72eeb4b4b5ee37cf
F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c 23331529e654be40ca97d171cbbffe9b3d4c71cc53b78fe5501230675952da8b
@@ -664,20 +668,20 @@ F src/date.c eebc54a00e888d3c56147779e9f361b77d62fd69ff2008c5373946aa1ba1d574
F src/dbpage.c 80e46e1df623ec40486da7a5086cb723b0275a6e2a7b01d9f9b5da0f04ba2782
F src/dbstat.c 3b677254d512fcafd4d0b341bf267b38b235ccfddbef24f9154e19360fa22e43
F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500
-F src/expr.c 8a5045ac7aae5ecebe7236ec05841693b5a0012af70a4d73933333172546c50d
+F src/expr.c 0756a4116a60666e31e77297444e628262cac913eebdac955a17c8cc8177429b
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
F src/fkey.c a7fcbf7e66d14dbb73cf49f31489ebf66d0e6006c62b95246924a3bae9f37b36
-F src/func.c 490341f0ad2d0a937ce03c9fd3d9396fd3be9b5a6b90228011830b3a7bf0dca2
+F src/func.c e8d7b3587a225f4f1116f720b72090511fe9feb936e960bd26a053cea6a17a63
F src/global.c 29f56a330ed9d1b5cd9b79ac0ca36f97ac3afc730ff8bfa987b0db9e559d684d
F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
F src/hwtime.h f9c2dfb84dce7acf95ce6d289e46f5f9d3d1afd328e53da8f8e9008e3b3caae6
F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
F src/insert.c 3f0a94082d978bbdd33c38fefea15346c6c6bffb70bc645a71dc0f1f87dd3276
-F src/json.c fc8783af356d27cfdf14a583e5a7809394269763384cde979c0825a29f13e1d6
+F src/json.c 2c0599c54aef24739015a0b7f7b569adecd760e4d06afd3d9c01c8c53713d3f0
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
-F src/loadext.c 98cfba10989b3da6f1807ad42444017742db7f100a54f1032af7a8b1295912c0
-F src/main.c 618aeb399e993cf561864f4b0cf6a331ee4f355cf663635f8d9da3193a46aa40
+F src/loadext.c 7d56c6f28aaf9b42e2772289e0d0a12a77b57c2baed021dbfd1fcafec69c156a
+F src/main.c 73ae4cab166b0fd36352446de7f7d91f89bde86686ae18f0bb7b245173479831
F src/malloc.c f016922435dc7d1f1f5083a03338a3e91f8c67ce2c5bdcfa4cdef62e612f5fcc
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2
@@ -687,12 +691,12 @@ F src/mem5.c b7da5c10a726aacacc9ad7cdcb0667deec643e117591cc69cf9b4b9e7f3e96ff
F src/memdb.c 559c42e61eb70cd6d4bc692b042497133c6d96c09a3d514d92f3dac72268e223
F src/memjournal.c c283c6c95d940eb9dc70f1863eef3ee40382dbd35e5a1108026e7817c206e8a0
F src/msvc.h 80b35f95d93bf996ccb3e498535255f2ef1118c78764719a7cd15ab4106ccac9
-F src/mutex.c 5e3409715552348732e97b9194abe92fdfcd934cfb681df4ba0ab87ac6c18d25
+F src/mutex.c 1b4c7e5e3621b510e0c18397210be27cd54c8084141144fbbafd003fde948e88
F src/mutex.h a7b2293c48db5f27007c3bdb21d438873637d12658f5a0bf8ad025bb96803c4a
F src/mutex_noop.c 9d4309c075ba9cc7249e19412d3d62f7f94839c4
-F src/mutex_unix.c bd52ec50e44a41fe1e3deb5a6e3fe98edb6f2059da3e46d196363d0fa3192cda
+F src/mutex_unix.c f7ee5a2061a4c11815a2bf4fc0e2bfa6fb8d9dc89390eb613ca0cec32fc9a3d1
F src/mutex_w32.c 38b56d0bc8d54c17c20cbaaad3719b0c36b92fd07a7e34360d0c6a18d5589912
-F src/notify.c 89a97dc854c3aa62ad5f384ef50c5a4a11d70fcc69f86de3e991573421130ed6
+F src/notify.c 57c2d1a2805d6dee32acd5d250d928ab94e02d76369ae057dee7d445fd64e878
F src/os.c 509452169d5ea739723e213b8e2481cf0e587f0e88579a912d200db5269f5f6d
F src/os.h 1ff5ae51d339d0e30d8a9d814f4b8f8e448169304d83a7ed9db66a65732f3e63
F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06
@@ -701,25 +705,25 @@ F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d87210
F src/os_unix.c 2e8b12107f75d1bd16412f312b4c5d5103191807a37836d3b81beb26436ad81b
F src/os_win.c 4a50a154aeebc66a1f8fb79c1ff6dd5fe3d005556533361e0d460d41cb6a45a8
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
-F src/pager.c 4aa388e47138551c83ae265e2efd4e01f0aa5afb6a958f45579658847b3430ff
+F src/pager.c 2188897e1102a776dcb1bbe8b2eb70ac7de8863c9cb95ef09d35e9bad406cf45
F src/pager.h f4d33fec8052603758792045493423b8871a996da2d0973927b7d36cd6070473
-F src/parse.y aeb7760d41cfa86465e3adba506500c021597049fd55f82a30e5b7045862c28c
+F src/parse.y 020d80386eb216ec9520549106353c517d2bbc89be28752ffdca649a9eaf56ec
F src/pcache.c 040b165f30622a21b7a9a77c6f2e4877a32fb7f22d4c7f0d2a6fa6833a156a75
F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
F src/pcache1.c 602acb23c471bb8d557a6f0083cc2be641d6cafcafa19e481eba7ef4c9ca0f00
-F src/pragma.c 48becc9b683e1b4a786b5e01a3133e747acba95d3d7182271d1bb67231251114
+F src/pragma.c 9f9b8828624ee98de22a2a9793a651daa39bc06cd9e701b6eda23c6d75260f1d
F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
F src/prepare.c bde74add20fc0e8ce0c4e937a1f70a36d17413afe4f71d3e103f5cb74b17c8d9
-F src/printf.c e3ba080e2f409f9bfcc8d34724e6fc160e9c718dc92d0548f6b71b8b6f860ce2
+F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
-F src/resolve.c 0c3046b88901336709cd09f474303a16fc54bce13a2befcab66d0fa6b44ca869
+F src/resolve.c 77d07bcec1b3101ce36ebf4aa04dd0340e77cbfc4f31bd1a6e43fcd2db904626
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 7f9155185be78902818b21c2cd3e33f01b4306279a15d6719eb1bbb9779034aa
+F src/select.c f9d8ece7f0742d7b835efa9590ccda4eccee5b9def7581ec94f556e3c52efe51
F src/shell.c.in cf0a3387c5bb05ca2fe6073fa7df21aaa11e749ca5b3846b80b586a447e728aa
-F src/sqlite.h.in 4f39f61c35348f0c56dd2c7a2294d1f0564389a0086dab80ce0960bfd772dc1b
+F src/sqlite.h.in 60e5698417e674f44be17d5ceeb4c2d395ccedba18d6de05435dec0135d9eff1
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac
-F src/sqliteInt.h 3c8a3f1bf889a632dbbaecbd3334e9e8d7fdb63b26ee09d6d384af0cc757d64c
+F src/sqliteInt.h 849004dd6f4315e05a8ec892999b0972484eb5438d122adc9444ed854bd905ce
F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee1fb6
F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -777,20 +781,20 @@ F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
F src/tokenize.c 23d9f4539880b40226254ad9072f4ecf12eb1902e62aea47aac29928afafcfd5
-F src/treeview.c 1d52fbc4e97161e65858d36e3424ea6e3fc045dd8a679c82b4b9593dc30de3bd
-F src/trigger.c ad6ab9452715fa9a8075442e15196022275b414b9141b566af8cdb7a1605f2b0
+F src/treeview.c bd8ec60f37e3c5d133e00dbff6ba44bb7e3a102728bab83ec420b3feb7d04440
+F src/trigger.c 5286019b152f622a38900284109e4aae1e5f566deb7ad9ba7e931f0660771f32
F src/update.c 6904814dd62a7a93bbb86d9f1419c7f134a9119582645854ab02b36b676d9f92
F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242
F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
-F src/util.c e87f66258c37f87724f46e849572c3ece4c74ef5614ba41eb221e98f0dbc95de
+F src/util.c b22cc9f203a8c0b9ee5338a67f8860347d14845864c10248bebe84518a781677
F src/vacuum.c 604fcdaebe76f3497c855afcbf91b8fa5046b32de3045bab89cc008d68e40104
-F src/vdbe.c 03e66cfa55542c3ae089a1926d06459f8d67cdbad9d52ddc8a7559b7505e90f7
+F src/vdbe.c b48fb1882fab0b7ee985d8ffeeba4f90530a3b028286f4652003a272bd85ad8a
F src/vdbe.h 41485521f68e9437fdb7ec4a90f9d86ab294e9bb8281e33b235915e29122cfc0
F src/vdbeInt.h 949669dfd8a41550d27dcb905b494f2ccde9a2e6c1b0b04daa1227e2e74c2b2c
-F src/vdbeapi.c b82f465cfaa77cf88c414bc53cb8515523e6840956283cfc7e8d284f72640735
-F src/vdbeaux.c 5b415e09b5b9d5be6c0f4fcbf18ea9d7d16f6a29ced2f14a3b2041020f63e9c1
-F src/vdbeblob.c 4cf5aa130e96e3b52ba3fb54b7f9606c942ab988dbb32cb19cff4db24e06aeec
-F src/vdbemem.c 317b9f48708139db6239ade40c7980b4bc8233168383690d588dad6d8437f722
+F src/vdbeapi.c 1cb879087bb33db50e524c7c9385ca8f330384136a2880b0c15e39b2ac4b520f
+F src/vdbeaux.c 929a4edecf9845fb063b47b23b9d187473a648470d915521cf72419f5219c4b7
+F src/vdbeblob.c 13f9287b55b6356b4b1845410382d6bede203ceb29ef69388a4a3d007ffacbe5
+F src/vdbemem.c c936e9002af4993b84c4eb7133d6b1190efe46d391cc86117ecd67ba17b1a04b
F src/vdbesort.c 237840ca1947511fa59bd4e18b9eeae93f2af2468c34d2427b059f896230a547
F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
F src/vdbevtab.c 2143db7db0ceed69b21422581f434baffc507a08d831565193a7a02882a1b6a7
@@ -803,22 +807,23 @@ F src/where.c 313ce81270d2a414672370e1ee74e65949ad620519193d4cac2986d073cbc8a0
F src/whereInt.h 4b38c5889514e3aead3f27d0ee9a26e47c3f150efc59e2a8b4e3bc8835e4d7a1
F src/wherecode.c 5d77db30a2a3dd532492ae882de114edba2fae672622056b1c7fd61f5917a8f1
F src/whereexpr.c dc5096eca5ed503999be3bdee8a90c51361289a678d396a220912e9cb73b3c00
-F src/window.c b7ad9cff3ce8ae6f8cc25e18e1a258426cb6bd2999aace6f5248d781b2a74098
+F src/window.c ad21e2b73ec75acc79dde2576c573f54a338b0c49e9de847ce984f9b9595b5e2
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2a510a9
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/aggfault.test 777f269d0da5b0c2524c7ff6d99ae9a93db4f1b1839a914dd2a12e3035c29829
F test/aggnested.test 7269d07ac879fce161cb26c8fabe65cba5715742fac8a1fccac570dcdaf28f00
+F test/aggorderby.test d0011beb1dec691ee18978d2d43e0f4af7043a1726f33e06c9f60e83112a917b
F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
F test/all.test 2ecb8bbd52416642e41c9081182a8df05d42c75637afd4488aace78cc4b69e13
-F test/alter.test 313073774ab5c3f2ef1d3f0d03757c9d3a81284ae7e1b4a6ca34db088f886896
+F test/alter.test 403a7f8842457044a994d0ffb42963d6e84fcfbf5e8f54556063b25d966cd454
F test/alter2.test a966ccfcddf9ce0a4e0e6ff1aca9e6e7948e0e242cd7e43fc091948521807687
F test/alter3.test ffc4ab29ce78a3517a66afd69b2730667e3471622509c283b2bd4c46f680fba3
F test/alter4.test 716caa071dd8a3c6d57225778d15d3c3cbf5e34b2e84ae44199aeb2bbf50a707
F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959
F test/alterauth2.test 48967abae0494d9a300d1c92473d99fcb66edfcc23579c89322f033f49410adc
-F test/altercol.test 8465ca659c2c55a359cf16cc261df4fcb5c45a5f104a50827c337ae66c09dc15
+F test/altercol.test 29fed774747777fbbaacdd865b4413ed2d0844a4c824f8af531b5c7d4a832087
F test/altercorrupt.test 2e1d705342cf9d7de884518ddbb053fd52d7e60d2b8869b7b63b2fda68435c12
F test/alterdropcol.test a653a3945f964d26845ec0cd0a8e74189f46de3119a984c5bc45457da392612e
F test/alterdropcol2.test 527fce683b200d620f560f666c44ae33e22728e990a10a48a543280dfd4b4d41
@@ -1010,7 +1015,7 @@ F test/date3.test a1b77abf05c6772fe5ca2337cac1398892f2a41e62bce7e6be0f4a08a0e64a
F test/date4.test db9e5760cf6f480fcf36bb7ca8e215880ff44354a31be6fb3d7e58f9d2e057e9
F test/dbdata.test 042f49acff3438f940eeba5868d3af080ae64ddf26ae78f80c92bec3ca7d8603
F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e
-F test/dbfuzz001.test 55e1a3504f8dea84155e09912fe3b1c3ad77e0b1a938ec42ca03b8e51b321e30
+F test/dbfuzz001.test 6c9a4622029d69dc38926f115864b055cb2f39badd25ec22cbfb130c8ba8e9c3
F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee
F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23
F test/dbpage.test fce29035c7566fd7835ec0f19422cb4b9c6944ce0e1b936ff8452443f92e887d
@@ -1143,7 +1148,7 @@ F test/fts3f.test 8c438d5e1cab526b0021988fb1dc70cf3597b006a33ffd6c955ee89929077f
F test/fts3fault.test f4e1342acfe6d216a001490e8cd52afac1f9ffe4a11bbcdcb296129a45c5df45
F test/fts3fault2.test 7b2741e5095367238380b0fcdb837f36c24484c7a5f353659b387df63cf039ec
F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
-F test/fts3fuzz001.test e3c7b0ce9b04cc02281dcc96812a277f02df03cd7dc082055d87e11eb18aaf56
+F test/fts3fuzz001.test c78afcd8ad712ea0b8d2ed50851a8aab3bc9dc52c64a536291e07112f519357c
F test/fts3join.test 1a4d786539b2b79a41c28ef2ac22cacd92a8ee830249b68a7dee4a020848e3bb
F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
F test/fts3matchinfo.test aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a
@@ -1217,7 +1222,7 @@ F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc
F test/fuzzinvariants.c b34530e8431f2cf3591eff588fc7684d6fdef466916fb46141c8c5374a3d8099
F test/gcfault.test dd28c228a38976d6336a3fc42d7e5f1ad060cb8c
-F test/gencol1.test aef8b0670abd4b1ae4cae786b15a43758d86f6cd9f12b381d45d96bb51e597c9
+F test/gencol1.test e169bdfa11c7ed5e9f322a98a7db3afe9e66235750b68c923efee8e1876b46ec
F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
F test/having.test a89236dd8d55aa50c4805f82ac9daf64d477a44d712d8209c118978d0ca21ec9
F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751
@@ -1307,7 +1312,7 @@ F test/json/json-generator.tcl dc0dd0f393800c98658fc4c47eaa6af29d4e17527380cd286
F test/json/json-q1-b.txt 606818a5fba6d9e418c9f4ea7d8418af026775042dad81439b72447a147a462c
F test/json/json-q1.txt 65f9d1cdcc4cffa9823fb73ed936aae5658700cd001fde448f68bfb91c807307
F test/json/json-speed-check.sh b060a9a6c696c0a807d8929400fa11bd7113edc58b0d66b9795f424f8d0db326 x
-F test/json101.test 8e7ee64714deff6deb927f417d90068cee38756cfe54375be46351ac5cb0962a
+F test/json101.test 2420fbed1d2dddb9562f8b9d0ac540849b99deba74e869560f94f674ef24171c
F test/json102.test 557a46e16df1aa9bdbc4076a71a45814ea0e7503d6621d87d42a8c04cbc2b0ef
F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe
F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1
@@ -1835,7 +1840,7 @@ F test/tt3_vacuum.c 71b254cde1fc49d6c8c44efd54f4668f3e57d7b3a8f4601ade069f75a999
F test/types.test bf816ce73c7dfcfe26b700c19f97ef4050d194ff
F test/types2.test 1aeb81976841a91eef292723649b5c4fe3bc3cac
F test/types3.test 99e009491a54f4dc02c06bdbc0c5eea56ae3e25a
-F test/unhex.test 47b547f4b35e4f6525ecac7c7839bd3ae4eb4613d4e8932592eff55da83308f1
+F test/unhex.test 777af0bad767e4ab6219e6086ea073f8836d8c34de12f9507bd39c442e89fcf2
F test/unionall.test eb9afa030897af75fd2f0dd28354ef63c8a5897b6c76aa1f15acae61a12eabcf
F test/unionall2.test 71e8fa08d5699d50dc9f9dc0c9799c2e7a6bb7931a330d369307a4df7f157fa1
F test/unionallfault.test 652bfbb630e6c43135965dc1e8f0a9a791da83aec885d626a632fe1909c56f73
@@ -2081,7 +2086,7 @@ F tool/showshm.c a0ab6ec32dd1f11218ca2a4018f8fb875b59414801ab8ceed8b2e69b7b45a80
F tool/showstat4.c 0682ebea7abf4d3657f53c4a243f2e7eab48eab344ed36a94bb75dcd19a5c2a1
F tool/showwal.c 65ecabae3a2dcff4116301d5a8dbb8c4964814da1b2aff6d85c806a88b71fa4e
F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe
-F tool/spaceanal.tcl 1b5be34c6223cb1af06da2a10fb77863eb869b1962d055820b0a11cf2336ab45
+F tool/spaceanal.tcl 70c87c04cfd2e77b3e6f21c33ca768296aa8f67d4ab4874786ac8fbb28433477
F tool/speed-check.sh 72dc85b2c0484af971ee3e7d10775f72b4e771e27e162c2099b3bf25517c25fb
F tool/speedtest.tcl 06c76698485ccf597b9e7dbb1ac70706eb873355
F tool/speedtest16.c ecb6542862151c3e6509bbc00509b234562ae81e
@@ -2129,8 +2134,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P fc5ee9e51ad4556af526a6cefca5ae5a3b1b7affc4edf09832491d6b4f4ba366 29937081a986d88f495ad48748c35ff5829f0ac31dd4ad3e48d180ae2fcb9a0c
-R 34f098f7c4eafcb6644778066535a3a0
+P a760bd7bcc63aac41c989bb5f4fbc927f9a93fe9c0aa18da2f0131483ec3f189 18e7c826f08bce51719ef045daa60200b33790f2fe312c6853f9ef6c7e9d5030
+R 6b8845843070a78bdb74a5c504e67fa7
U drh
-Z dd04631a3fb3a59b7149d92d361ffe54
+Z b574a5662a790fe88c3029243fe11248
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 643a123acb..eb840c7f53 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-a760bd7bcc63aac41c989bb5f4fbc927f9a93fe9c0aa18da2f0131483ec3f189
\ No newline at end of file
+f47a8d0a207a8442a7f621b070ce9dd1d6013ce26bcf68165d20bb379bd478a0
\ No newline at end of file
diff --git a/src/alter.c b/src/alter.c
index d0b1f7f696..ec45e14331 100644
--- a/src/alter.c
+++ b/src/alter.c
@@ -446,14 +446,19 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
/* Verify that constraints are still satisfied */
if( pNew->pCheck!=0
|| (pCol->notNull && (pCol->colFlags & COLFLAG_GENERATED)!=0)
+ || (pTab->tabFlags & TF_Strict)!=0
){
sqlite3NestedParse(pParse,
"SELECT CASE WHEN quick_check GLOB 'CHECK*'"
" THEN raise(ABORT,'CHECK constraint failed')"
+ " WHEN quick_check GLOB 'non-* value in*'"
+ " THEN raise(ABORT,'type mismatch on DEFAULT')"
" ELSE raise(ABORT,'NOT NULL constraint failed')"
" END"
" FROM pragma_quick_check(%Q,%Q)"
- " WHERE quick_check GLOB 'CHECK*' OR quick_check GLOB 'NULL*'",
+ " WHERE quick_check GLOB 'CHECK*'"
+ " OR quick_check GLOB 'NULL*'"
+ " OR quick_check GLOB 'non-* value in*'",
zTab, zDb
);
}
diff --git a/src/btree.c b/src/btree.c
index 1575d7d942..3c4f00d154 100644
--- a/src/btree.c
+++ b/src/btree.c
@@ -10708,6 +10708,7 @@ static int checkTreePage(
if( (rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0 ){
checkAppendMsg(pCheck,
"unable to get the page. error code=%d", rc);
+ if( rc==SQLITE_IOERR_NOMEM ) pCheck->rc = SQLITE_NOMEM;
goto end_of_check;
}
diff --git a/src/build.c b/src/build.c
index 59e3e23f09..24f5d3f96a 100644
--- a/src/build.c
+++ b/src/build.c
@@ -2920,6 +2920,17 @@ void sqlite3EndTable(
/* Reparse everything to update our internal data structures */
sqlite3VdbeAddParseSchemaOp(v, iDb,
sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName),0);
+
+ /* Test for cycles in generated columns and illegal expressions
+ ** in CHECK constraints and in DEFAULT clauses. */
+ if( p->tabFlags & TF_HasGenerated ){
+ sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
+ sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%w\"",
+ db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
+ }
+ sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
+ sqlite3MPrintf(db, "PRAGMA \"%w\".integrity_check(%Q)",
+ db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
}
/* Add the table to the in-memory representation of the database.
diff --git a/src/expr.c b/src/expr.c
index f7290262e5..86b5f5f1e7 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -591,6 +591,7 @@ Expr *sqlite3ExprForVectorField(
*/
pRet = sqlite3PExpr(pParse, TK_SELECT_COLUMN, 0, 0);
if( pRet ){
+ ExprSetProperty(pRet, EP_FullSize);
pRet->iTable = nField;
pRet->iColumn = iField;
pRet->pLeft = pVector;
@@ -1181,6 +1182,67 @@ Expr *sqlite3ExprFunction(
return pNew;
}
+/*
+** Report an error when attempting to use an ORDER BY clause within
+** the arguments of a non-aggregate function.
+*/
+void sqlite3ExprOrderByAggregateError(Parse *pParse, Expr *p){
+ sqlite3ErrorMsg(pParse,
+ "ORDER BY may not be used with non-aggregate %#T()", p
+ );
+}
+
+/*
+** Attach an ORDER BY clause to a function call.
+**
+** functionname( arguments ORDER BY sortlist )
+** \_____________________/ \______/
+** pExpr pOrderBy
+**
+** The ORDER BY clause is inserted into a new Expr node of type TK_ORDER
+** and added to the Expr.pLeft field of the parent TK_FUNCTION node.
+*/
+void sqlite3ExprAddFunctionOrderBy(
+ Parse *pParse, /* Parsing context */
+ Expr *pExpr, /* The function call to which ORDER BY is to be added */
+ ExprList *pOrderBy /* The ORDER BY clause to add */
+){
+ Expr *pOB;
+ sqlite3 *db = pParse->db;
+ if( NEVER(pOrderBy==0) ){
+ assert( db->mallocFailed );
+ return;
+ }
+ if( pExpr==0 ){
+ assert( db->mallocFailed );
+ sqlite3ExprListDelete(db, pOrderBy);
+ return;
+ }
+ assert( pExpr->op==TK_FUNCTION );
+ assert( pExpr->pLeft==0 );
+ assert( ExprUseXList(pExpr) );
+ if( pExpr->x.pList==0 || NEVER(pExpr->x.pList->nExpr==0) ){
+ /* Ignore ORDER BY on zero-argument aggregates */
+ sqlite3ExprListDelete(db, pOrderBy);
+ return;
+ }
+ if( IsWindowFunc(pExpr) ){
+ sqlite3ExprOrderByAggregateError(pParse, pExpr);
+ sqlite3ExprListDelete(db, pOrderBy);
+ return;
+ }
+
+ pOB = sqlite3ExprAlloc(db, TK_ORDER, 0, 0);
+ if( pOB==0 ){
+ sqlite3ExprListDelete(db, pOrderBy);
+ return;
+ }
+ pOB->x.pList = pOrderBy;
+ assert( ExprUseXList(pOB) );
+ pExpr->pLeft = pOB;
+ ExprSetProperty(pOB, EP_FullSize);
+}
+
/*
** Check to see if a function is usable according to current access
** rules:
@@ -1434,11 +1496,7 @@ static int dupedExprStructSize(const Expr *p, int flags){
assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */
assert( EXPR_FULLSIZE<=0xfff );
assert( (0xfff & (EP_Reduced|EP_TokenOnly))==0 );
- if( 0==flags || p->op==TK_SELECT_COLUMN
-#ifndef SQLITE_OMIT_WINDOWFUNC
- || ExprHasProperty(p, EP_WinFunc)
-#endif
- ){
+ if( 0==flags || ExprHasProperty(p, EP_FullSize) ){
nSize = EXPR_FULLSIZE;
}else{
assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
@@ -1515,7 +1573,7 @@ static Expr *exprDup(sqlite3 *db, const Expr *p, int dupFlags, u8 **pzBuffer){
staticFlag = EP_Static;
assert( zAlloc!=0 );
}else{
- zAlloc = sqlite3DbMallocRawNN(db, dupedExprSize(p, dupFlags));
+ zAlloc = sqlite3DbMallocRawNN(db, dupedExprSize(p, dupFlags)*5);
staticFlag = 0;
}
pNew = (Expr *)zAlloc;
@@ -1565,7 +1623,8 @@ static Expr *exprDup(sqlite3 *db, const Expr *p, int dupFlags, u8 **pzBuffer){
if( ExprUseXSelect(p) ){
pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, dupFlags);
}else{
- pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, dupFlags);
+ pNew->x.pList = sqlite3ExprListDup(db, p->x.pList,
+ p->op!=TK_ORDER ? dupFlags : 0);
}
}
@@ -1864,11 +1923,7 @@ Select *sqlite3SelectDup(sqlite3 *db, const Select *p, int flags){
** initially NULL, then create a new expression list.
**
** The pList argument must be either NULL or a pointer to an ExprList
-** obtained from a prior call to sqlite3ExprListAppend(). This routine
-** may not be used with an ExprList obtained from sqlite3ExprListDup().
-** Reason: This routine assumes that the number of slots in pList->a[]
-** is a power of two. That is true for sqlite3ExprListAppend() returns
-** but is not necessarily true from the return value of sqlite3ExprListDup().
+** obtained from a prior call to sqlite3ExprListAppend().
**
** If a memory allocation error occurs, the entire list is freed and
** NULL is returned. If non-NULL is returned, then it is guaranteed
@@ -4323,6 +4378,7 @@ expr_code_doover:
assert( !ExprHasVVAProperty(pExpr,EP_Immutable) );
op = pExpr->op;
}
+ assert( op!=TK_ORDER );
switch( op ){
case TK_AGG_COLUMN: {
AggInfo *pAggInfo = pExpr->pAggInfo;
@@ -4336,7 +4392,7 @@ expr_code_doover:
#ifdef SQLITE_VDBE_COVERAGE
/* Verify that the OP_Null above is exercised by tests
** tag-20230325-2 */
- sqlite3VdbeAddOp2(v, OP_NotNull, target, 1);
+ sqlite3VdbeAddOp3(v, OP_NotNull, target, 1, 20230325);
VdbeCoverageNeverTaken(v);
#endif
break;
@@ -6409,6 +6465,12 @@ int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){
assert( pExpr->op==TK_AGG_FUNCTION );
assert( ExprUseXList(pExpr) );
sqlite3WalkExprList(&w, pExpr->x.pList);
+ if( pExpr->pLeft ){
+ assert( pExpr->pLeft->op==TK_ORDER );
+ assert( ExprUseXList(pExpr->pLeft) );
+ assert( pExpr->pLeft->x.pList!=0 );
+ sqlite3WalkExprList(&w, pExpr->pLeft->x.pList);
+ }
#ifndef SQLITE_OMIT_WINDOWFUNC
if( ExprHasProperty(pExpr, EP_WinFunc) ){
sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
@@ -6673,14 +6735,41 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
u8 enc = ENC(pParse->db);
i = addAggInfoFunc(pParse->db, pAggInfo);
if( i>=0 ){
+ int nArg;
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
pItem = &pAggInfo->aFunc[i];
pItem->pFExpr = pExpr;
assert( ExprUseUToken(pExpr) );
+ nArg = pExpr->x.pList ? pExpr->x.pList->nExpr : 0;
pItem->pFunc = sqlite3FindFunction(pParse->db,
- pExpr->u.zToken,
- pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
- if( pExpr->flags & EP_Distinct ){
+ pExpr->u.zToken, nArg, enc, 0);
+ assert( pItem->bOBUnique==0 );
+ if( pExpr->pLeft
+ && (pItem->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL)==0
+ ){
+ /* The NEEDCOLL test above causes any ORDER BY clause on
+ ** aggregate min() or max() to be ignored. */
+ ExprList *pOBList;
+ assert( nArg>0 );
+ assert( pExpr->pLeft->op==TK_ORDER );
+ assert( ExprUseXList(pExpr->pLeft) );
+ pItem->iOBTab = pParse->nTab++;
+ pOBList = pExpr->pLeft->x.pList;
+ assert( pOBList->nExpr>0 );
+ if( pOBList->nExpr==1
+ && nArg==1
+ && sqlite3ExprCompare(0,pOBList->a[0].pExpr,
+ pExpr->x.pList->a[0].pExpr,0)==0
+ ){
+ pItem->bOBPayload = 0;
+ }else{
+ pItem->bOBPayload = 1;
+ }
+ pItem->bOBUnique = ExprHasProperty(pExpr, EP_Distinct);
+ }else{
+ pItem->iOBTab = -1;
+ }
+ if( ExprHasProperty(pExpr, EP_Distinct) && !pItem->bOBUnique ){
pItem->iDistinct = pParse->nTab++;
}else{
pItem->iDistinct = -1;
diff --git a/src/func.c b/src/func.c
index dcf195f983..eed67941b4 100644
--- a/src/func.c
+++ b/src/func.c
@@ -1256,7 +1256,8 @@ static void hexFunc(
*(z++) = hexdigits[c&0xf];
}
*z = 0;
- sqlite3_result_text(context, zHex, n*2, sqlite3_free);
+ sqlite3_result_text64(context, zHex, (u64)(z-zHex),
+ sqlite3_free, SQLITE_UTF8);
}
}
diff --git a/src/json.c b/src/json.c
index 688ab32fea..48d456e536 100644
--- a/src/json.c
+++ b/src/json.c
@@ -789,7 +789,7 @@ static void jsonReturnString(JsonString *p){
}else if( jsonForceRCStr(p) ){
sqlite3RCStrRef(p->zBuf);
sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed,
- (void(*)(void*))sqlite3RCStrUnref,
+ sqlite3RCStrUnref,
SQLITE_UTF8);
}else{
sqlite3_result_error_nomem(p->pCtx);
@@ -2179,7 +2179,7 @@ static JsonParse *jsonParseCached(
/* The input JSON was not found anywhere in the cache. We will need
** to parse it ourselves and generate a new JsonParse object.
*/
- bJsonRCStr = sqlite3ValueIsOfClass(pJson,(void(*)(void*))sqlite3RCStrUnref);
+ bJsonRCStr = sqlite3ValueIsOfClass(pJson,sqlite3RCStrUnref);
p = sqlite3_malloc64( sizeof(*p) + (bJsonRCStr ? 0 : nJson+1) );
if( p==0 ){
sqlite3_result_error_nomem(pCtx);
@@ -2388,6 +2388,7 @@ static JsonNode *jsonLookupStep(
if( (pRoot[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ) i--;
j += jsonNodeSize(&pRoot[j]);
}
+ if( i==0 && j<=pRoot->n ) break;
if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break;
if( pParse->useMod==0 ) break;
assert( pRoot->eU==2 );
@@ -5067,7 +5068,7 @@ static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){
}else if( isFinal ){
sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed,
pStr->bStatic ? SQLITE_TRANSIENT :
- (void(*)(void*))sqlite3RCStrUnref);
+ sqlite3RCStrUnref);
pStr->bStatic = 1;
}else{
sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT);
@@ -5187,7 +5188,7 @@ static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){
}else if( isFinal ){
sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed,
pStr->bStatic ? SQLITE_TRANSIENT :
- (void(*)(void*))sqlite3RCStrUnref);
+ sqlite3RCStrUnref);
pStr->bStatic = 1;
}else{
sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT);
@@ -5632,7 +5633,7 @@ static int jsonEachFilter(
if( z==0 ) return SQLITE_OK;
memset(&p->sParse, 0, sizeof(p->sParse));
p->sParse.nJPRef = 1;
- if( sqlite3ValueIsOfClass(argv[0], (void(*)(void*))sqlite3RCStrUnref) ){
+ if( sqlite3ValueIsOfClass(argv[0], sqlite3RCStrUnref) ){
p->sParse.zJson = sqlite3RCStrRef((char*)z);
}else{
n = sqlite3_value_bytes(argv[0]);
diff --git a/src/loadext.c b/src/loadext.c
index e792fa5a98..cfa8ba4ca8 100644
--- a/src/loadext.c
+++ b/src/loadext.c
@@ -730,6 +730,9 @@ void sqlite3CloseExtensions(sqlite3 *db){
** default so as not to open security holes in older applications.
*/
int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
+#endif
sqlite3_mutex_enter(db->mutex);
if( onoff ){
db->flags |= SQLITE_LoadExtension|SQLITE_LoadExtFunc;
@@ -751,7 +754,7 @@ int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
*/
typedef struct sqlite3AutoExtList sqlite3AutoExtList;
static SQLITE_WSD struct sqlite3AutoExtList {
- u32 nExt; /* Number of entries in aExt[] */
+ u32 nExt; /* Number of entries in aExt[] */
void (**aExt)(void); /* Pointers to the extension init functions */
} sqlite3Autoext = { 0, 0 };
@@ -779,6 +782,9 @@ int sqlite3_auto_extension(
void (*xInit)(void)
){
int rc = SQLITE_OK;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( xInit==0 ) return SQLITE_MISUSE_BKPT;
+#endif
#ifndef SQLITE_OMIT_AUTOINIT
rc = sqlite3_initialize();
if( rc ){
@@ -831,6 +837,9 @@ int sqlite3_cancel_auto_extension(
int i;
int n = 0;
wsdAutoextInit;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( xInit==0 ) return 0;
+#endif
sqlite3_mutex_enter(mutex);
for(i=(int)wsdAutoext.nExt-1; i>=0; i--){
if( wsdAutoext.aExt[i]==xInit ){
diff --git a/src/main.c b/src/main.c
index a43afab168..893326c2b5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -954,6 +954,10 @@ int sqlite3_db_cacheflush(sqlite3 *db){
int sqlite3_db_config(sqlite3 *db, int op, ...){
va_list ap;
int rc;
+
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
+#endif
sqlite3_mutex_enter(db->mutex);
va_start(ap, op);
switch( op ){
@@ -2365,6 +2369,12 @@ void *sqlite3_preupdate_hook(
void *pArg /* First callback argument */
){
void *pRet;
+
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( db==0 || xCallback==0 ){
+ return 0;
+ }
+#endif
sqlite3_mutex_enter(db->mutex);
pRet = db->pPreUpdateArg;
db->xPreUpdateCallback = xCallback;
@@ -5002,7 +5012,7 @@ int sqlite3_compileoption_used(const char *zOptName){
int nOpt;
const char **azCompileOpt;
-#if SQLITE_ENABLE_API_ARMOR
+#ifdef SQLITE_ENABLE_API_ARMOR
if( zOptName==0 ){
(void)SQLITE_MISUSE_BKPT;
return 0;
diff --git a/src/mutex.c b/src/mutex.c
index 13a9fca15b..381ffbdfd5 100644
--- a/src/mutex.c
+++ b/src/mutex.c
@@ -133,7 +133,7 @@ static void checkMutexFree(sqlite3_mutex *p){
assert( SQLITE_MUTEX_FAST<2 );
assert( SQLITE_MUTEX_WARNONCONTENTION<2 );
-#if SQLITE_ENABLE_API_ARMOR
+#ifdef SQLITE_ENABLE_API_ARMOR
if( ((CheckMutex*)p)->iType<2 )
#endif
{
diff --git a/src/mutex_unix.c b/src/mutex_unix.c
index ac4331a67b..beae877f98 100644
--- a/src/mutex_unix.c
+++ b/src/mutex_unix.c
@@ -223,7 +223,7 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){
*/
static void pthreadMutexFree(sqlite3_mutex *p){
assert( p->nRef==0 );
-#if SQLITE_ENABLE_API_ARMOR
+#ifdef SQLITE_ENABLE_API_ARMOR
if( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE )
#endif
{
diff --git a/src/notify.c b/src/notify.c
index 4960ab76b1..6a4cab8755 100644
--- a/src/notify.c
+++ b/src/notify.c
@@ -152,6 +152,9 @@ int sqlite3_unlock_notify(
){
int rc = SQLITE_OK;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
+#endif
sqlite3_mutex_enter(db->mutex);
enterMutex();
diff --git a/src/pager.c b/src/pager.c
index 1423b66541..5c2d556b3e 100644
--- a/src/pager.c
+++ b/src/pager.c
@@ -2161,6 +2161,9 @@ static int pager_end_transaction(Pager *pPager, int hasSuper, int bCommit){
return (rc==SQLITE_OK?rc2:rc);
}
+/* Forward reference */
+static int pager_playback(Pager *pPager, int isHot);
+
/*
** Execute a rollback if a transaction is active and unlock the
** database file.
@@ -2189,6 +2192,21 @@ static void pagerUnlockAndRollback(Pager *pPager){
assert( pPager->eState==PAGER_READER );
pager_end_transaction(pPager, 0, 0);
}
+ }else if( pPager->eState==PAGER_ERROR
+ && pPager->journalMode==PAGER_JOURNALMODE_MEMORY
+ && isOpen(pPager->jfd)
+ ){
+ /* Special case for a ROLLBACK due to I/O error with an in-memory
+ ** journal: We have to rollback immediately, before the journal is
+ ** closed, because once it is closed, all content is forgotten. */
+ int errCode = pPager->errCode;
+ u8 eLock = pPager->eLock;
+ pPager->eState = PAGER_OPEN;
+ pPager->errCode = SQLITE_OK;
+ pPager->eLock = EXCLUSIVE_LOCK;
+ pager_playback(pPager, 1);
+ pPager->errCode = errCode;
+ pPager->eLock = eLock;
}
pager_unlock(pPager);
}
@@ -5681,8 +5699,20 @@ int sqlite3PagerGet(
DbPage **ppPage, /* Write a pointer to the page here */
int flags /* PAGER_GET_XXX flags */
){
- /* printf("PAGE %u\n", pgno); fflush(stdout); */
+#if 0 /* Trace page fetch by setting to 1 */
+ int rc;
+ printf("PAGE %u\n", pgno);
+ fflush(stdout);
+ rc = pPager->xGet(pPager, pgno, ppPage, flags);
+ if( rc ){
+ printf("PAGE %u failed with 0x%02x\n", pgno, rc);
+ fflush(stdout);
+ }
+ return rc;
+#else
+ /* Normal, high-speed version of sqlite3PagerGet() */
return pPager->xGet(pPager, pgno, ppPage, flags);
+#endif
}
/*
diff --git a/src/parse.y b/src/parse.y
index 867b62aa7a..19491192e3 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -1144,6 +1144,10 @@ expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP. {
A = sqlite3ExprFunction(pParse, Y, &X, D);
}
+expr(A) ::= idj(X) LP distinct(D) exprlist(Y) ORDER BY sortlist(O) RP. {
+ A = sqlite3ExprFunction(pParse, Y, &X, D);
+ sqlite3ExprAddFunctionOrderBy(pParse, A, O);
+}
expr(A) ::= idj(X) LP STAR RP. {
A = sqlite3ExprFunction(pParse, 0, &X, 0);
}
@@ -1153,6 +1157,11 @@ expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP filter_over(Z). {
A = sqlite3ExprFunction(pParse, Y, &X, D);
sqlite3WindowAttach(pParse, A, Z);
}
+expr(A) ::= idj(X) LP distinct(D) exprlist(Y) ORDER BY sortlist(O) RP filter_over(Z). {
+ A = sqlite3ExprFunction(pParse, Y, &X, D);
+ sqlite3WindowAttach(pParse, A, Z);
+ sqlite3ExprAddFunctionOrderBy(pParse, A, O);
+}
expr(A) ::= idj(X) LP STAR RP filter_over(Z). {
A = sqlite3ExprFunction(pParse, 0, &X, 0);
sqlite3WindowAttach(pParse, A, Z);
diff --git a/src/pragma.c b/src/pragma.c
index 7c8911b2ca..576080e10a 100644
--- a/src/pragma.c
+++ b/src/pragma.c
@@ -1124,7 +1124,11 @@ void sqlite3Pragma(
#endif
if( sqlite3GetBoolean(zRight, 0) ){
- db->flags |= mask;
+ if( (mask & SQLITE_WriteSchema)==0
+ || (db->flags & SQLITE_Defensive)==0
+ ){
+ db->flags |= mask;
+ }
}else{
db->flags &= ~mask;
if( mask==SQLITE_DeferFKs ) db->nDeferredImmCons = 0;
@@ -1762,6 +1766,7 @@ void sqlite3Pragma(
sqlite3_vtab *pVTab;
int a1;
if( !IsVirtual(pTab) ) continue;
+ sqlite3ViewGetColumnNames(pParse, pTab);
if( pTab->u.vtab.p==0 ) continue;
pVTab = pTab->u.vtab.p->pVtab;
if( NEVER(pVTab==0) ) continue;
diff --git a/src/printf.c b/src/printf.c
index 87ad91f795..3c0b182d39 100644
--- a/src/printf.c
+++ b/src/printf.c
@@ -1389,7 +1389,7 @@ char *sqlite3RCStrRef(char *z){
** Decrease the reference count by one. Free the string when the
** reference count reaches zero.
*/
-void sqlite3RCStrUnref(char *z){
+void sqlite3RCStrUnref(void *z){
RCStr *p = (RCStr*)z;
assert( p!=0 );
p--;
diff --git a/src/resolve.c b/src/resolve.c
index bd890c9f8d..7eba26938a 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -1052,6 +1052,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
Window *pWin = (IsWindowFunc(pExpr) ? pExpr->y.pWin : 0);
#endif
assert( !ExprHasProperty(pExpr, EP_xIsSelect|EP_IntValue) );
+ assert( pExpr->pLeft==0 || pExpr->pLeft->op==TK_ORDER );
zId = pExpr->u.zToken;
pDef = sqlite3FindFunction(pParse->db, zId, n, enc, 0);
if( pDef==0 ){
@@ -1193,6 +1194,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pNC->nNcErr++;
}
#endif
+ else if( is_agg==0 && pExpr->pLeft ){
+ sqlite3ExprOrderByAggregateError(pParse, pExpr);
+ pNC->nNcErr++;
+ }
if( is_agg ){
/* Window functions may not be arguments of aggregate functions.
** Or arguments of other window functions. But aggregate functions
@@ -1211,6 +1216,11 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
#endif
sqlite3WalkExprList(pWalker, pList);
if( is_agg ){
+ if( pExpr->pLeft ){
+ assert( pExpr->pLeft->op==TK_ORDER );
+ assert( ExprUseXList(pExpr->pLeft) );
+ sqlite3WalkExprList(pWalker, pExpr->pLeft->x.pList);
+ }
#ifndef SQLITE_OMIT_WINDOWFUNC
if( pWin ){
Select *pSel = pNC->pWinSelect;
diff --git a/src/select.c b/src/select.c
index a55545d513..29df3325f3 100644
--- a/src/select.c
+++ b/src/select.c
@@ -454,6 +454,7 @@ static void unsetJoinExpr(Expr *p, int iTable, int nullable){
}
if( p->op==TK_FUNCTION ){
assert( ExprUseXList(p) );
+ assert( p->pLeft==0 );
if( p->x.pList ){
int i;
for(i=0; ix.pList->nExpr; i++){
@@ -6490,8 +6491,14 @@ static void analyzeAggFuncArgs(
pNC->ncFlags |= NC_InAggFunc;
for(i=0; inFunc; i++){
Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
+ assert( pExpr->op==TK_FUNCTION || pExpr->op==TK_AGG_FUNCTION );
assert( ExprUseXList(pExpr) );
sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList);
+ if( pExpr->pLeft ){
+ assert( pExpr->pLeft->op==TK_ORDER );
+ assert( ExprUseXList(pExpr->pLeft) );
+ sqlite3ExprAnalyzeAggList(pNC, pExpr->pLeft->x.pList);
+ }
#ifndef SQLITE_OMIT_WINDOWFUNC
assert( !IsWindowFunc(pExpr) );
if( ExprHasProperty(pExpr, EP_WinFunc) ){
@@ -6646,6 +6653,32 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
pFunc->pFunc->zName));
}
}
+ if( pFunc->iOBTab>=0 ){
+ ExprList *pOBList;
+ KeyInfo *pKeyInfo;
+ int nExtra = 0;
+ assert( pFunc->pFExpr->pLeft!=0 );
+ assert( pFunc->pFExpr->pLeft->op==TK_ORDER );
+ assert( ExprUseXList(pFunc->pFExpr->pLeft) );
+ pOBList = pFunc->pFExpr->pLeft->x.pList;
+ if( !pFunc->bOBUnique ){
+ nExtra++; /* One extra column for the OP_Sequence */
+ }
+ if( pFunc->bOBPayload ){
+ /* extra columns for the function arguments */
+ assert( ExprUseXList(pFunc->pFExpr) );
+ nExtra += pFunc->pFExpr->x.pList->nExpr;
+ }
+ pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOBList, 0, nExtra);
+ if( !pFunc->bOBUnique && pParse->nErr==0 ){
+ pKeyInfo->nKeyField++;
+ }
+ sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
+ pFunc->iOBTab, pOBList->nExpr+nExtra, 0,
+ (char*)pKeyInfo, P4_KEYINFO);
+ ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(ORDER BY)",
+ pFunc->pFunc->zName));
+ }
}
}
@@ -6661,13 +6694,46 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
ExprList *pList;
assert( ExprUseXList(pF->pFExpr) );
pList = pF->pFExpr->x.pList;
+ if( pF->iOBTab>=0 ){
+ /* For an ORDER BY aggregate, calls to OP_AggStep where deferred and
+ ** all content was stored in emphermal table pF->iOBTab. Extract that
+ ** content now (in ORDER BY order) and make all calls to OP_AggStep
+ ** before doing the OP_AggFinal call. */
+ int iTop; /* Start of loop for extracting columns */
+ int nArg; /* Number of columns to extract */
+ int nKey; /* Key columns to be skipped */
+ int regAgg; /* Extract into this array */
+ int j; /* Loop counter */
+
+ nArg = pList->nExpr;
+ regAgg = sqlite3GetTempRange(pParse, nArg);
+
+ if( pF->bOBPayload==0 ){
+ nKey = 0;
+ }else{
+ assert( pF->pFExpr->pLeft!=0 );
+ assert( ExprUseXList(pF->pFExpr->pLeft) );
+ assert( pF->pFExpr->pLeft->x.pList!=0 );
+ nKey = pF->pFExpr->pLeft->x.pList->nExpr;
+ if( !pF->bOBUnique ) nKey++;
+ }
+ iTop = sqlite3VdbeAddOp1(v, OP_Rewind, pF->iOBTab); VdbeCoverage(v);
+ for(j=nArg-1; j>=0; j--){
+ sqlite3VdbeAddOp3(v, OP_Column, pF->iOBTab, nKey+j, regAgg+j);
+ }
+ sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
+ sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
+ sqlite3VdbeChangeP5(v, (u8)nArg);
+ sqlite3VdbeAddOp2(v, OP_Next, pF->iOBTab, iTop+1); VdbeCoverage(v);
+ sqlite3VdbeJumpHere(v, iTop);
+ sqlite3ReleaseTempRange(pParse, regAgg, nArg);
+ }
sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i),
pList ? pList->nExpr : 0);
sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
}
}
-
/*
** Generate code that will update the accumulator memory cells for an
** aggregate based on the current cursor position.
@@ -6676,6 +6742,13 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator
** registers if register regAcc contains 0. The caller will take care
** of setting and clearing regAcc.
+**
+** For an ORDER BY aggregate, the actually accumulator memory cell update
+** is deferred until after all input rows have been received, so that they
+** can be run in the requested order. In that case, instead of invoking
+** OP_AggStep to update accumulator, just add the arguments that would
+** have been passed into OP_AggStep into the sorting ephemeral table
+** (along with the appropriate sort key).
*/
static void updateAccumulator(
Parse *pParse,
@@ -6697,6 +6770,7 @@ static void updateAccumulator(
int nArg;
int addrNext = 0;
int regAgg;
+ int regAggSz = 0;
ExprList *pList;
assert( ExprUseXList(pF->pFExpr) );
assert( !IsWindowFunc(pF->pFExpr) );
@@ -6723,7 +6797,39 @@ static void updateAccumulator(
addrNext = sqlite3VdbeMakeLabel(pParse);
sqlite3ExprIfFalse(pParse, pFilter, addrNext, SQLITE_JUMPIFNULL);
}
- if( pList ){
+ if( pF->iOBTab>=0 ){
+ /* Instead of invoking AggStep, we must push the arguments that would
+ ** have been passed to AggStep onto the sorting table. */
+ int jj; /* Registered used so far in building the record */
+ ExprList *pOBList; /* The ORDER BY clause */
+ assert( pList!=0 );
+ nArg = pList->nExpr;
+ assert( nArg>0 );
+ assert( pF->pFExpr->pLeft!=0 );
+ assert( pF->pFExpr->pLeft->op==TK_ORDER );
+ assert( ExprUseXList(pF->pFExpr->pLeft) );
+ pOBList = pF->pFExpr->pLeft->x.pList;
+ assert( pOBList!=0 );
+ assert( pOBList->nExpr>0 );
+ regAggSz = pOBList->nExpr;
+ if( !pF->bOBUnique ){
+ regAggSz++; /* One register for OP_Sequence */
+ }
+ if( pF->bOBPayload ){
+ regAggSz += nArg;
+ }
+ regAggSz++; /* One extra register to hold result of MakeRecord */
+ regAgg = sqlite3GetTempRange(pParse, regAggSz);
+ sqlite3ExprCodeExprList(pParse, pOBList, regAgg, 0, SQLITE_ECEL_DUP);
+ jj = pOBList->nExpr;
+ if( !pF->bOBUnique ){
+ sqlite3VdbeAddOp2(v, OP_Sequence, pF->iOBTab, regAgg+jj);
+ jj++;
+ }
+ if( pF->bOBPayload ){
+ sqlite3ExprCodeExprList(pParse, pList, regAgg+jj, 0, SQLITE_ECEL_DUP);
+ }
+ }else if( pList ){
nArg = pList->nExpr;
regAgg = sqlite3GetTempRange(pParse, nArg);
sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP);
@@ -6738,24 +6844,35 @@ static void updateAccumulator(
pF->iDistinct = codeDistinct(pParse, eDistinctType,
pF->iDistinct, addrNext, pList, regAgg);
}
- if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
- CollSeq *pColl = 0;
- struct ExprList_item *pItem;
- int j;
- assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */
- for(j=0, pItem=pList->a; !pColl && jpExpr);
+ if( pF->iOBTab>=0 ){
+ /* Insert a new record into the ORDER BY table */
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regAgg, regAggSz-1,
+ regAgg+regAggSz-1);
+ sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pF->iOBTab, regAgg+regAggSz-1,
+ regAgg, regAggSz-1);
+ sqlite3ReleaseTempRange(pParse, regAgg, regAggSz);
+ }else{
+ /* Invoke the AggStep function */
+ if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
+ CollSeq *pColl = 0;
+ struct ExprList_item *pItem;
+ int j;
+ assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */
+ for(j=0, pItem=pList->a; !pColl && jpExpr);
+ }
+ if( !pColl ){
+ pColl = pParse->db->pDfltColl;
+ }
+ if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
+ sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0,
+ (char *)pColl, P4_COLLSEQ);
}
- if( !pColl ){
- pColl = pParse->db->pDfltColl;
- }
- if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
- sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ);
+ sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
+ sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
+ sqlite3VdbeChangeP5(v, (u8)nArg);
+ sqlite3ReleaseTempRange(pParse, regAgg, nArg);
}
- sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
- sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
- sqlite3VdbeChangeP5(v, (u8)nArg);
- sqlite3ReleaseTempRange(pParse, regAgg, nArg);
if( addrNext ){
sqlite3VdbeResolveLabel(v, addrNext);
}
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index 54192422d6..af648829d6 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -10676,6 +10676,13 @@ unsigned char *sqlite3_serialize(
** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the
** function returns SQLITE_ERROR.
**
+** The deserialized database should not be in [WAL mode]. If the database
+** is in WAL mode, then any attempt to use the database file will result
+** in an [SQLITE_CANTOPEN] error. The application can set the
+** [file format version numbers] (bytes 18 and 19) of the input database P
+** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the
+** database file into rollback mode and work around this limitation.
+**
** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the
** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then
** [sqlite3_free()] is invoked on argument P prior to returning.
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 54f8db50a5..85492fbec6 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -2860,6 +2860,9 @@ struct AggInfo {
FuncDef *pFunc; /* The aggregate function implementation */
int iDistinct; /* Ephemeral table used to enforce DISTINCT */
int iDistAddr; /* Address of OP_OpenEphemeral */
+ int iOBTab; /* Ephemeral table to implement ORDER BY */
+ u8 bOBPayload; /* iOBTab has payload columns separate from key */
+ u8 bOBUnique; /* Enforce uniqueness on iOBTab keys */
} *aFunc;
int nFunc; /* Number of entries in aFunc[] */
u32 selId; /* Select to which this AggInfo belongs */
@@ -3044,7 +3047,7 @@ struct Expr {
#define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */
#define EP_Win 0x008000 /* Contains window functions */
#define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */
- /* 0x020000 // Available for reuse */
+#define EP_FullSize 0x020000 /* Expr structure must remain full sized */
#define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */
#define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */
#define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */
@@ -3074,6 +3077,7 @@ struct Expr {
#define ExprClearProperty(E,P) (E)->flags&=~(P)
#define ExprAlwaysTrue(E) (((E)->flags&(EP_OuterON|EP_IsTrue))==EP_IsTrue)
#define ExprAlwaysFalse(E) (((E)->flags&(EP_OuterON|EP_IsFalse))==EP_IsFalse)
+#define ExprIsFullSize(E) (((E)->flags&(EP_Reduced|EP_TokenOnly))==0)
/* Macros used to ensure that the correct members of unions are accessed
** in Expr.
@@ -4786,6 +4790,8 @@ void sqlite3PExprAddSelect(Parse*, Expr*, Select*);
Expr *sqlite3ExprAnd(Parse*,Expr*, Expr*);
Expr *sqlite3ExprSimplifiedAndOr(Expr*);
Expr *sqlite3ExprFunction(Parse*,ExprList*, const Token*, int);
+void sqlite3ExprAddFunctionOrderBy(Parse*,Expr*,ExprList*);
+void sqlite3ExprOrderByAggregateError(Parse*,Expr*);
void sqlite3ExprFunctionUsable(Parse*,const Expr*,const FuncDef*);
void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32);
void sqlite3ExprDelete(sqlite3*, Expr*);
@@ -5352,7 +5358,7 @@ int sqlite3ApiExit(sqlite3 *db, int);
int sqlite3OpenTempDatabase(Parse *);
char *sqlite3RCStrRef(char*);
-void sqlite3RCStrUnref(char*);
+void sqlite3RCStrUnref(void*);
char *sqlite3RCStrNew(u64);
char *sqlite3RCStrResize(char*,u64);
diff --git a/src/treeview.c b/src/treeview.c
index d55adab384..a3f128cab2 100644
--- a/src/treeview.c
+++ b/src/treeview.c
@@ -412,6 +412,7 @@ void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
sqlite3TreeViewItem(pView, "FILTER", 1);
sqlite3TreeViewExpr(pView, pWin->pFilter, 0);
sqlite3TreeViewPop(&pView);
+ if( pWin->eFrmType==TK_FILTER ) return;
}
sqlite3TreeViewPush(&pView, more);
if( pWin->zName ){
@@ -421,7 +422,7 @@ void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
}
if( pWin->zBase ) nElement++;
if( pWin->pOrderBy ) nElement++;
- if( pWin->eFrmType ) nElement++;
+ if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ) nElement++;
if( pWin->eExclude ) nElement++;
if( pWin->zBase ){
sqlite3TreeViewPush(&pView, (--nElement)>0);
@@ -434,7 +435,7 @@ void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
if( pWin->pOrderBy ){
sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY");
}
- if( pWin->eFrmType ){
+ if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ){
char zBuf[30];
const char *zFrmType = "ROWS";
if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE";
@@ -682,7 +683,7 @@ void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 moreToFollow){
assert( ExprUseXList(pExpr) );
pFarg = pExpr->x.pList;
#ifndef SQLITE_OMIT_WINDOWFUNC
- pWin = ExprHasProperty(pExpr, EP_WinFunc) ? pExpr->y.pWin : 0;
+ pWin = IsWindowFunc(pExpr) ? pExpr->y.pWin : 0;
#else
pWin = 0;
#endif
@@ -708,7 +709,13 @@ void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 moreToFollow){
sqlite3TreeViewLine(pView, "FUNCTION %Q%s", pExpr->u.zToken, zFlgs);
}
if( pFarg ){
- sqlite3TreeViewExprList(pView, pFarg, pWin!=0, 0);
+ sqlite3TreeViewExprList(pView, pFarg, pWin!=0 || pExpr->pLeft, 0);
+ if( pExpr->pLeft ){
+ Expr *pOB = pExpr->pLeft;
+ assert( pOB->op==TK_ORDER );
+ assert( ExprUseXList(pOB) );
+ sqlite3TreeViewExprList(pView, pOB->x.pList, pWin!=0, "ORDERBY");
+ }
}
#ifndef SQLITE_OMIT_WINDOWFUNC
if( pWin ){
diff --git a/src/trigger.c b/src/trigger.c
index bcb2132f0b..2decea8206 100644
--- a/src/trigger.c
+++ b/src/trigger.c
@@ -183,6 +183,10 @@ void sqlite3BeginTrigger(
sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");
goto trigger_orphan_error;
}
+ if( (pTab->tabFlags & TF_Shadow)!=0 && sqlite3ReadOnlyShadowTables(db) ){
+ sqlite3ErrorMsg(pParse, "cannot create triggers on shadow tables");
+ goto trigger_orphan_error;
+ }
/* Check that the trigger name is not reserved and that no trigger of the
** specified name exists */
diff --git a/src/util.c b/src/util.c
index 58591590dc..e9c7cccb03 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1367,121 +1367,32 @@ u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
** this function assumes the single-byte case has already been handled.
*/
u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
- u32 a,b;
+ u64 v64;
+ u8 n;
- /* The 1-byte case. Overwhelmingly the most common. Handled inline
- ** by the getVarin32() macro */
- a = *p;
- /* a: p0 (unmasked) */
-#ifndef getVarint32
- if (!(a&0x80))
- {
- /* Values between 0 and 127 */
- *v = a;
- return 1;
- }
-#endif
+ /* Assume that the single-byte case has already been handled by
+ ** the getVarint32() macro */
+ assert( (p[0] & 0x80)!=0 );
- /* The 2-byte case */
- p++;
- b = *p;
- /* b: p1 (unmasked) */
- if (!(b&0x80))
- {
- /* Values between 128 and 16383 */
- a &= 0x7f;
- a = a<<7;
- *v = a | b;
+ if( (p[1] & 0x80)==0 ){
+ /* This is the two-byte case */
+ *v = ((p[0]&0x7f)<<7) | p[1];
return 2;
}
-
- /* The 3-byte case */
- p++;
- a = a<<14;
- a |= *p;
- /* a: p0<<14 | p2 (unmasked) */
- if (!(a&0x80))
- {
- /* Values between 16384 and 2097151 */
- a &= (0x7f<<14)|(0x7f);
- b &= 0x7f;
- b = b<<7;
- *v = a | b;
+ if( (p[2] & 0x80)==0 ){
+ /* This is the three-byte case */
+ *v = ((p[0]&0x7f)<<14) | ((p[1]&0x7f)<<7) | p[2];
return 3;
}
-
- /* A 32-bit varint is used to store size information in btrees.
- ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
- ** A 3-byte varint is sufficient, for example, to record the size
- ** of a 1048569-byte BLOB or string.
- **
- ** We only unroll the first 1-, 2-, and 3- byte cases. The very
- ** rare larger cases can be handled by the slower 64-bit varint
- ** routine.
- */
-#if 1
- {
- u64 v64;
- u8 n;
-
- n = sqlite3GetVarint(p-2, &v64);
- assert( n>3 && n<=9 );
- if( (v64 & SQLITE_MAX_U32)!=v64 ){
- *v = 0xffffffff;
- }else{
- *v = (u32)v64;
- }
- return n;
- }
-
-#else
- /* For following code (kept for historical record only) shows an
- ** unrolling for the 3- and 4-byte varint cases. This code is
- ** slightly faster, but it is also larger and much harder to test.
- */
- p++;
- b = b<<14;
- b |= *p;
- /* b: p1<<14 | p3 (unmasked) */
- if (!(b&0x80))
- {
- /* Values between 2097152 and 268435455 */
- b &= (0x7f<<14)|(0x7f);
- a &= (0x7f<<14)|(0x7f);
- a = a<<7;
- *v = a | b;
- return 4;
- }
-
- p++;
- a = a<<14;
- a |= *p;
- /* a: p0<<28 | p2<<14 | p4 (unmasked) */
- if (!(a&0x80))
- {
- /* Values between 268435456 and 34359738367 */
- a &= SLOT_4_2_0;
- b &= SLOT_4_2_0;
- b = b<<7;
- *v = a | b;
- return 5;
- }
-
- /* We can only reach this point when reading a corrupt database
- ** file. In that case we are not in any hurry. Use the (relatively
- ** slow) general-purpose sqlite3GetVarint() routine to extract the
- ** value. */
- {
- u64 v64;
- u8 n;
-
- p -= 4;
- n = sqlite3GetVarint(p, &v64);
- assert( n>5 && n<=9 );
+ /* four or more bytes */
+ n = sqlite3GetVarint(p, &v64);
+ assert( n>3 && n<=9 );
+ if( (v64 & SQLITE_MAX_U32)!=v64 ){
+ *v = 0xffffffff;
+ }else{
*v = (u32)v64;
- return n;
}
-#endif
+ return n;
}
/*
diff --git a/src/vdbe.c b/src/vdbe.c
index f2d94237a8..66383811b9 100644
--- a/src/vdbe.c
+++ b/src/vdbe.c
@@ -762,11 +762,11 @@ static SQLITE_NOINLINE int vdbeColumnFromOverflow(
sqlite3RCStrRef(pBuf);
if( t&1 ){
rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, encoding,
- (void(*)(void*))sqlite3RCStrUnref);
+ sqlite3RCStrUnref);
pDest->flags |= MEM_Term;
}else{
rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, 0,
- (void(*)(void*))sqlite3RCStrUnref);
+ sqlite3RCStrUnref);
}
}else{
rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, iOffset, len, pDest);
@@ -6906,13 +6906,33 @@ case OP_CreateBtree: { /* out2 */
/* Opcode: SqlExec * * * P4 *
**
** Run the SQL statement or statements specified in the P4 string.
+** Disable Auth and Trace callbacks while those statements are running if
+** P1 is true.
*/
case OP_SqlExec: {
+ char *zErr;
+ sqlite3_xauth xAuth;
+ u8 mTrace;
+
sqlite3VdbeIncrWriteCounter(p, 0);
db->nSqlExec++;
- rc = sqlite3_exec(db, pOp->p4.z, 0, 0, 0);
+ zErr = 0;
+ xAuth = db->xAuth;
+ mTrace = db->mTrace;
+ if( pOp->p1 ){
+ db->xAuth = 0;
+ db->mTrace = 0;
+ }
+ rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr);
db->nSqlExec--;
- if( rc ) goto abort_due_to_error;
+ db->xAuth = xAuth;
+ db->mTrace = mTrace;
+ if( zErr || rc ){
+ sqlite3VdbeError(p, "%s", zErr);
+ sqlite3_free(zErr);
+ if( rc==SQLITE_NOMEM ) goto no_mem;
+ goto abort_due_to_error;
+ }
break;
}
diff --git a/src/vdbeapi.c b/src/vdbeapi.c
index 91843f5636..22952ba1a9 100644
--- a/src/vdbeapi.c
+++ b/src/vdbeapi.c
@@ -375,7 +375,7 @@ void sqlite3_value_free(sqlite3_value *pOld){
** is too big or if an OOM occurs.
**
** The invokeValueDestructor(P,X) routine invokes destructor function X()
-** on value P is not going to be used and need to be destroyed.
+** on value P if P is not going to be used and need to be destroyed.
*/
static void setResultStrOrError(
sqlite3_context *pCtx, /* Function context */
@@ -405,7 +405,7 @@ static void setResultStrOrError(
static int invokeValueDestructor(
const void *p, /* Value to destroy */
void (*xDel)(void*), /* The destructor */
- sqlite3_context *pCtx /* Set a SQLITE_TOOBIG error if no NULL */
+ sqlite3_context *pCtx /* Set a SQLITE_TOOBIG error if not NULL */
){
assert( xDel!=SQLITE_DYNAMIC );
if( xDel==0 ){
@@ -415,7 +415,14 @@ static int invokeValueDestructor(
}else{
xDel((void*)p);
}
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx!=0 ){
+ sqlite3_result_error_toobig(pCtx);
+ }
+#else
+ assert( pCtx!=0 );
sqlite3_result_error_toobig(pCtx);
+#endif
return SQLITE_TOOBIG;
}
void sqlite3_result_blob(
@@ -424,6 +431,12 @@ void sqlite3_result_blob(
int n,
void (*xDel)(void *)
){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 || n<0 ){
+ invokeValueDestructor(z, xDel, pCtx);
+ return;
+ }
+#endif
assert( n>=0 );
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, 0, xDel);
@@ -434,8 +447,14 @@ void sqlite3_result_blob64(
sqlite3_uint64 n,
void (*xDel)(void *)
){
- assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
assert( xDel!=SQLITE_DYNAMIC );
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ){
+ invokeValueDestructor(z, xDel, 0);
+ return;
+ }
+#endif
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
if( n>0x7fffffff ){
(void)invokeValueDestructor(z, xDel, pCtx);
}else{
@@ -443,30 +462,48 @@ void sqlite3_result_blob64(
}
}
void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemSetDouble(pCtx->pOut, rVal);
}
void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
pCtx->isError = SQLITE_ERROR;
sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
}
#ifndef SQLITE_OMIT_UTF16
void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
pCtx->isError = SQLITE_ERROR;
sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
}
#endif
void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal);
}
void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemSetInt64(pCtx->pOut, iVal);
}
void sqlite3_result_null(sqlite3_context *pCtx){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemSetNull(pCtx->pOut);
}
@@ -476,14 +513,25 @@ void sqlite3_result_pointer(
const char *zPType,
void (*xDestructor)(void*)
){
- Mem *pOut = pCtx->pOut;
+ Mem *pOut;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ){
+ invokeValueDestructor(pPtr, xDestructor, 0);
+ return;
+ }
+#endif
+ pOut = pCtx->pOut;
assert( sqlite3_mutex_held(pOut->db->mutex) );
sqlite3VdbeMemRelease(pOut);
pOut->flags = MEM_Null;
sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor);
}
void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){
- Mem *pOut = pCtx->pOut;
+ Mem *pOut;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
+ pOut = pCtx->pOut;
assert( sqlite3_mutex_held(pOut->db->mutex) );
pOut->eSubtype = eSubtype & 0xff;
pOut->flags |= MEM_Subtype;
@@ -494,6 +542,12 @@ void sqlite3_result_text(
int n,
void (*xDel)(void *)
){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ){
+ invokeValueDestructor(z, xDel, 0);
+ return;
+ }
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
}
@@ -504,6 +558,12 @@ void sqlite3_result_text64(
void (*xDel)(void *),
unsigned char enc
){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ){
+ invokeValueDestructor(z, xDel, 0);
+ return;
+ }
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
assert( xDel!=SQLITE_DYNAMIC );
if( enc!=SQLITE_UTF8 ){
@@ -547,7 +607,16 @@ void sqlite3_result_text16le(
}
#endif /* SQLITE_OMIT_UTF16 */
void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
- Mem *pOut = pCtx->pOut;
+ Mem *pOut;
+
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+ if( pValue==0 ){
+ sqlite3_result_null(pCtx);
+ return;
+ }
+#endif
+ pOut = pCtx->pOut;
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemCopy(pOut, pValue);
sqlite3VdbeChangeEncoding(pOut, pCtx->enc);
@@ -559,7 +628,12 @@ void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
sqlite3_result_zeroblob64(pCtx, n>0 ? n : 0);
}
int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){
- Mem *pOut = pCtx->pOut;
+ Mem *pOut;
+
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return SQLITE_MISUSE_BKPT;
+#endif
+ pOut = pCtx->pOut;
assert( sqlite3_mutex_held(pOut->db->mutex) );
if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){
sqlite3_result_error_toobig(pCtx);
@@ -573,6 +647,9 @@ int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){
#endif
}
void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
pCtx->isError = errCode ? errCode : -1;
#ifdef SQLITE_DEBUG
if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode;
@@ -585,6 +662,9 @@ void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
/* Force an SQLITE_TOOBIG error. */
void sqlite3_result_error_toobig(sqlite3_context *pCtx){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
pCtx->isError = SQLITE_TOOBIG;
sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1,
@@ -593,6 +673,9 @@ void sqlite3_result_error_toobig(sqlite3_context *pCtx){
/* An SQLITE_NOMEM error. */
void sqlite3_result_error_nomem(sqlite3_context *pCtx){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemSetNull(pCtx->pOut);
pCtx->isError = SQLITE_NOMEM_BKPT;
@@ -845,6 +928,10 @@ int sqlite3_step(sqlite3_stmt *pStmt){
** pointer to it.
*/
void *sqlite3_user_data(sqlite3_context *p){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( p==0 ) return 0;
+#endif
+ assert( p && p->pFunc );
return p->pFunc->pUserData;
}
@@ -859,7 +946,11 @@ void *sqlite3_user_data(sqlite3_context *p){
** application defined function.
*/
sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( p==0 ) return 0;
+#else
assert( p && p->pOut );
+#endif
return p->pOut->db;
}
@@ -878,7 +969,11 @@ sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
** value, as a signal to the xUpdate routine that the column is unchanged.
*/
int sqlite3_vtab_nochange(sqlite3_context *p){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( p==0 ) return 0;
+#else
assert( p );
+#endif
return sqlite3_value_nochange(p->pOut);
}
@@ -1037,6 +1132,9 @@ void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
AuxData *pAuxData;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return 0;
+#endif
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
#if SQLITE_ENABLE_STAT4
if( pCtx->pVdbe==0 ) return 0;
@@ -1069,8 +1167,12 @@ void sqlite3_set_auxdata(
void (*xDelete)(void*)
){
AuxData *pAuxData;
- Vdbe *pVdbe = pCtx->pVdbe;
+ Vdbe *pVdbe;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pCtx==0 ) return;
+#endif
+ pVdbe= pCtx->pVdbe;
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
#ifdef SQLITE_ENABLE_STAT4
if( pVdbe==0 ) goto failed;
@@ -1736,6 +1838,9 @@ int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
int sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){
int rc;
Vdbe *p = (Vdbe *)pStmt;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( p==0 ) return SQLITE_MISUSE_BKPT;
+#endif
sqlite3_mutex_enter(p->db->mutex);
if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){
rc = SQLITE_TOOBIG;
@@ -1862,6 +1967,9 @@ int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){
int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode){
Vdbe *v = (Vdbe*)pStmt;
int rc;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( pStmt==0 ) return SQLITE_MISUSE_BKPT;
+#endif
sqlite3_mutex_enter(v->db->mutex);
if( ((int)v->explain)==eMode ){
rc = SQLITE_OK;
@@ -2028,10 +2136,16 @@ static UnpackedRecord *vdbeUnpackRecord(
** a field of the row currently being updated or deleted.
*/
int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
- PreUpdate *p = db->pPreUpdate;
+ PreUpdate *p;
Mem *pMem;
int rc = SQLITE_OK;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( db==0 || ppValue==0 ){
+ return SQLITE_MISUSE_BKPT;
+ }
+#endif
+ p = db->pPreUpdate;
/* Test that this call is being made from within an SQLITE_DELETE or
** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */
if( !p || p->op==SQLITE_INSERT ){
@@ -2092,7 +2206,12 @@ int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
** the number of columns in the row being updated, deleted or inserted.
*/
int sqlite3_preupdate_count(sqlite3 *db){
- PreUpdate *p = db->pPreUpdate;
+ PreUpdate *p;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ p = db!=0 ? db->pPreUpdate : 0;
+#else
+ p = db->pPreUpdate;
+#endif
return (p ? p->keyinfo.nKeyField : 0);
}
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
@@ -2110,7 +2229,12 @@ int sqlite3_preupdate_count(sqlite3 *db){
** or SET DEFAULT action is considered a trigger.
*/
int sqlite3_preupdate_depth(sqlite3 *db){
- PreUpdate *p = db->pPreUpdate;
+ PreUpdate *p;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ p = db!=0 ? db->pPreUpdate : 0;
+#else
+ p = db->pPreUpdate;
+#endif
return (p ? p->v->nFrame : 0);
}
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
@@ -2121,7 +2245,12 @@ int sqlite3_preupdate_depth(sqlite3 *db){
** only.
*/
int sqlite3_preupdate_blobwrite(sqlite3 *db){
- PreUpdate *p = db->pPreUpdate;
+ PreUpdate *p;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ p = db!=0 ? db->pPreUpdate : 0;
+#else
+ p = db->pPreUpdate;
+#endif
return (p ? p->iBlobWrite : -1);
}
#endif
@@ -2132,10 +2261,16 @@ int sqlite3_preupdate_blobwrite(sqlite3 *db){
** a field of the row currently being updated or inserted.
*/
int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
- PreUpdate *p = db->pPreUpdate;
+ PreUpdate *p;
int rc = SQLITE_OK;
Mem *pMem;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( db==0 || ppValue==0 ){
+ return SQLITE_MISUSE_BKPT;
+ }
+#endif
+ p = db->pPreUpdate;
if( !p || p->op==SQLITE_DELETE ){
rc = SQLITE_MISUSE_BKPT;
goto preupdate_new_out;
@@ -2214,11 +2349,20 @@ int sqlite3_stmt_scanstatus_v2(
void *pOut /* OUT: Write the answer here */
){
Vdbe *p = (Vdbe*)pStmt;
- VdbeOp *aOp = p->aOp;
- int nOp = p->nOp;
+ VdbeOp *aOp;
+ int nOp;
ScanStatus *pScan = 0;
int idx;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( p==0 || pOut==0
+ || iScanStatusOpSQLITE_SCANSTAT_NCYCLE ){
+ return 1;
+ }
+#endif
+ aOp = p->aOp;
+ nOp = p->nOp;
if( p->pFrame ){
VdbeFrame *pFrame;
for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
@@ -2365,7 +2509,7 @@ int sqlite3_stmt_scanstatus(
void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
Vdbe *p = (Vdbe*)pStmt;
int ii;
- for(ii=0; iinOp; ii++){
+ for(ii=0; p!=0 && iinOp; ii++){
Op *pOp = &p->aOp[ii];
pOp->nExec = 0;
pOp->nCycle = 0;
diff --git a/src/vdbeaux.c b/src/vdbeaux.c
index eafc038562..27be95a6b5 100644
--- a/src/vdbeaux.c
+++ b/src/vdbeaux.c
@@ -1002,6 +1002,10 @@ void sqlite3VdbeNoJumpsOutsideSubrtn(
int iDest = pOp->p2; /* Jump destination */
if( iDest==0 ) continue;
if( pOp->opcode==OP_Gosub ) continue;
+ if( pOp->p3==20230325 && pOp->opcode==OP_NotNull ){
+ /* This is a deliberately taken illegal branch. tag-20230325-2 */
+ continue;
+ }
if( iDest<0 ){
int j = ADDR(iDest);
assert( j>=0 );
@@ -4461,6 +4465,16 @@ SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){
return n1 - n2;
}
+/* The following two functions are used only within testcase() to prove
+** test coverage. These functions do no exist for production builds.
+** We must use separate SQLITE_NOINLINE functions here, since otherwise
+** optimizer code movement causes gcov to become very confused.
+*/
+#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_DEBUG)
+static int SQLITE_NOINLINE doubleLt(double a, double b){ return ar );
testcase( x==r );
- if( xr; /*NO_TEST*/ /* work around bug in gcov */
+ return (xr);
}else{
i64 y;
double s;
@@ -4482,12 +4495,11 @@ int sqlite3IntFloatCompare(i64 i, double r){
y = (i64)r;
if( iy ) return +1;
- testcase( r<(double)i );
- testcase( r>(double)i );
- testcase( r==(double)i );
s = (double)i;
- if( sr; /*NO_TEST*/ /* work around bug in gcov */
+ testcase( doubleLt(s,r) );
+ testcase( doubleLt(r,s) );
+ testcase( doubleEq(r,s) );
+ return (sr);
}
}
diff --git a/src/vdbeblob.c b/src/vdbeblob.c
index ea6f016e3e..522447dbc1 100644
--- a/src/vdbeblob.c
+++ b/src/vdbeblob.c
@@ -142,7 +142,7 @@ int sqlite3_blob_open(
#endif
*ppBlob = 0;
#ifdef SQLITE_ENABLE_API_ARMOR
- if( !sqlite3SafetyCheckOk(db) || zTable==0 ){
+ if( !sqlite3SafetyCheckOk(db) || zTable==0 || zColumn==0 ){
return SQLITE_MISUSE_BKPT;
}
#endif
diff --git a/src/vdbemem.c b/src/vdbemem.c
index e25efc9771..eee828143a 100644
--- a/src/vdbemem.c
+++ b/src/vdbemem.c
@@ -336,7 +336,7 @@ void sqlite3VdbeMemZeroTerminateIfAble(Mem *pMem){
pMem->flags |= MEM_Term;
return;
}
- if( pMem->xDel==(void(*)(void*))sqlite3RCStrUnref ){
+ if( pMem->xDel==sqlite3RCStrUnref ){
/* Blindly assume that all RCStr objects are zero-terminated */
pMem->flags |= MEM_Term;
return;
@@ -1716,6 +1716,7 @@ static int valueFromExpr(
if( pVal ){
pVal->flags = MEM_Int;
pVal->u.i = pExpr->u.zToken[4]==0;
+ sqlite3ValueApplyAffinity(pVal, affinity, enc);
}
}
diff --git a/src/window.c b/src/window.c
index d46eabc3b4..2c449592d7 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1312,8 +1312,9 @@ void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
if( p ){
assert( p->op==TK_FUNCTION );
assert( pWin );
+ assert( ExprIsFullSize(p) );
p->y.pWin = pWin;
- ExprSetProperty(p, EP_WinFunc);
+ ExprSetProperty(p, EP_WinFunc|EP_FullSize);
pWin->pOwner = p;
if( (p->flags & EP_Distinct) && pWin->eFrmType!=TK_FILTER ){
sqlite3ErrorMsg(pParse,
diff --git a/test/aggorderby.test b/test/aggorderby.test
new file mode 100644
index 0000000000..7d7d86a09f
--- /dev/null
+++ b/test/aggorderby.test
@@ -0,0 +1,79 @@
+# 2023-10-18
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements tests for ORDER BY on aggregate functions.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_execsql_test aggorderby-1.1 {
+ CREATE TABLE t1(a TEXT,b INT,c INT,d INT);
+ WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<9)
+ INSERT INTO t1(a,b,c,d) SELECT printf('%d',(x*7)%10),1,x,10-x FROM c;
+ INSERT INTO t1(a,b,c,d) SELECT a, 2, c, 10-d FROM t1;
+ CREATE INDEX t1b ON t1(b);
+}
+do_catchsql_test aggorderby-1.2 {
+ SELECT b, group_concat(a ORDER BY max(d)) FROM t1 GROUP BY b;
+} {1 {misuse of aggregate function max()}}
+do_catchsql_test aggorderby-1.3 {
+ SELECT abs(a ORDER BY max(d)) FROM t1;
+} {1 {ORDER BY may not be used with non-aggregate abs()}}
+
+do_execsql_test aggorderby-2.0 {
+ SELECT group_concat(a ORDER BY a) FROM t1 WHERE b=1;
+} {0,1,2,3,4,5,6,7,8,9}
+do_execsql_test aggorderby-2.1 {
+ SELECT group_concat(a ORDER BY c) FROM t1 WHERE b=1;
+} {0,7,4,1,8,5,2,9,6,3}
+do_execsql_test aggorderby-2.2 {
+ SELECT group_concat(a ORDER BY b, d) FROM t1;
+} {3,6,9,2,5,8,1,4,7,0,0,7,4,1,8,5,2,9,6,3}
+do_execsql_test aggorderby-2.3 {
+ SELECT group_concat(a ORDER BY b DESC, d) FROM t1;
+} {0,7,4,1,8,5,2,9,6,3,3,6,9,2,5,8,1,4,7,0}
+do_execsql_test aggorderby-2.4 {
+ SELECT b, group_concat(a ORDER BY d) FROM t1 GROUP BY b ORDER BY b;
+} {1 3,6,9,2,5,8,1,4,7,0 2 0,7,4,1,8,5,2,9,6,3}
+
+do_execsql_test aggorderby-3.0 {
+ SELECT group_concat(DISTINCT a ORDER BY a) FROM t1;
+} {0,1,2,3,4,5,6,7,8,9}
+do_execsql_test aggorderby-3.1 {
+ SELECT group_concat(DISTINCT a ORDER BY c) FROM t1;
+} {0,7,4,1,8,5,2,9,6,3}
+
+do_execsql_test aggorderby-4.0 {
+ SELECT count(ORDER BY a) FROM t1;
+} 20
+do_execsql_test aggorderby-4.1 {
+ SELECT c, max(a ORDER BY a) FROM t1;
+} {7 9}
+
+
+do_execsql_test aggorderby-5.0 {
+ DROP TABLE IF EXISTS t1;
+ DROP TABLE IF EXISTS t3;
+ CREATE TABLE t1(a TEXT); INSERT INTO t1 VALUES('aaa'),('bbb');
+ CREATE TABLE t3(d TEXT); INSERT INTO t3 VALUES('/'),('-');
+ SELECT (SELECT group_concat(a,d) FROM t3) FROM t1;
+} {aaa-aaa bbb-bbb}
+do_execsql_test aggorderby-5.1 {
+ SELECT (SELECT group_concat(a,d ORDER BY d) FROM t3) FROM t1;
+} {aaa/aaa bbb/bbb}
+do_execsql_test aggorderby-5.2 {
+ SELECT (SELECT group_concat(a,d ORDER BY d DESC) FROM t3) FROM t1;
+} {aaa-aaa bbb-bbb}
+do_execsql_test aggorderby-5.3 {
+ SELECT (SELECT group_concat(a,'#' ORDER BY d) FROM t3) FROM t1;
+} {aaa#aaa bbb#bbb}
+
+finish_test
diff --git a/test/alter.test b/test/alter.test
index 0088858a15..ee8e6c0b90 100644
--- a/test/alter.test
+++ b/test/alter.test
@@ -934,5 +934,24 @@ do_execsql_test alter-19.3 {
SELECT name FROM sqlite_schema WHERE sql LIKE '%t3%' ORDER BY name;
} {r1 t3}
+# 2023-10-14
+# On an ALTER TABLE ADD COLUMN with a DEFAULT clause on a STRICT table
+# make sure that the DEFAULT has a compatible type.
+#
+reset_db
+do_execsql_test alter-20.1 {
+ CREATE TABLE t1(a INT) STRICT;
+ INSERT INTO t1(a) VALUES(45);
+} {}
+do_catchsql_test alter-20.2 {
+ ALTER TABLE t1 ADD COLUMN b TEXT DEFAULT x'313233';
+} {1 {type mismatch on DEFAULT}}
+do_execsql_test alter-20.2 {
+ DELETE FROM t1;
+ ALTER TABLE t1 ADD COLUMN b TEXT DEFAULT x'313233';
+} {}
+do_catchsql_test alter-20.3 {
+ INSERT INTO t1(a) VALUES(45);
+} {1 {cannot store BLOB value in TEXT column t1.b}}
finish_test
diff --git a/test/altercol.test b/test/altercol.test
index e39793aa9f..f44aa2e065 100644
--- a/test/altercol.test
+++ b/test/altercol.test
@@ -343,6 +343,21 @@ do_catchsql_test 8.4.5 {
ALTER TABLE b1 RENAME a TO aaa;
} {1 {error in view zzz: no such column: george}}
+do_execsql_test 8.5 {
+ DROP VIEW zzz;
+ CREATE TABLE t5(a TEXT, b INT);
+ INSERT INTO t5(a,b) VALUES('aaa',7),('bbb',3),('ccc',4);
+ CREATE VIEW vt5(x) AS SELECT group_concat(a ORDER BY b) FROM t5;
+ SELECT x FROM vt5;
+} {bbb,ccc,aaa}
+do_execsql_test 8.5.1 {
+ ALTER TABLE t5 RENAME COLUMN b TO bbb;
+ SELECT sql FROM sqlite_schema WHERE name='vt5';
+} {{CREATE VIEW vt5(x) AS SELECT group_concat(a ORDER BY bbb) FROM t5}}
+do_execsql_test 8.5.2 {
+ SELECT x FROM vt5;
+} {bbb,ccc,aaa}
+
#-------------------------------------------------------------------------
# More triggers.
#
diff --git a/test/dbfuzz001.test b/test/dbfuzz001.test
index 2a430de12e..228dd16db6 100644
--- a/test/dbfuzz001.test
+++ b/test/dbfuzz001.test
@@ -371,4 +371,27 @@ do_catchsql_test dbfuzz001-330 {
} {1 {database disk image is malformed}}
extra_schema_checks 1
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test dbfuzz001-430 {
+ CREATE TABLE t1(a INTEGER, b INT, c DEFAULT 0);
+}
+
+do_execsql_test dbfuzz001-420 {
+ PRAGMA locking_mode=EXCLUSIVE;
+ PRAGMA journal_mode = memory;
+ INSERT INTO t1 VALUES(1,2,3);
+ PRAGMA journal_mode=PERSIST;
+} {exclusive memory persist}
+
+do_execsql_test dbfuzz001-430 {
+ INSERT INTO t1 VALUES(4, 5, 6);
+}
+
+do_execsql_test dbfuzz001-440 {
+ PRAGMA journal_mode=MEMORY;
+ INSERT INTO t1 VALUES(7, 8, 9);
+} {memory}
+
finish_test
diff --git a/test/fts3fuzz001.test b/test/fts3fuzz001.test
index 41b22d33da..6b1ae90ee4 100644
--- a/test/fts3fuzz001.test
+++ b/test/fts3fuzz001.test
@@ -13,6 +13,7 @@
set testdir [file dirname $argv0]
source $testdir/tester.tcl
+set testprefix fts3fuzz001
ifcapable !deserialize||!fts3 {
finish_test
@@ -110,5 +111,31 @@ do_test fts3fuzz001-121 {
}
} {1 {database disk image is malformed}}
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 200 {
+ CREATE VIRTUAL TABLE x1 USING fts3(x);
+
+ INSERT INTO x1 VALUES('braes brag bragged bragger bragging');
+ INSERT INTO x1 VALUES('brags braid braided braiding braids');
+ INSERT INTO x1 VALUES('brain brainchild brained braining brains');
+ INSERT INTO x1 VALUES('brainstem brainstems brainstorm brainstorms');
+ INSERT INTO x1(x1) VALUES('nodesize=24');
+}
+
+do_execsql_test 210 {
+ PRAGMA integrity_check;
+} {ok}
+
+do_execsql_test 220 {
+ INSERT INTO x1(x1) VALUES('merge=10,2')
+}
+
+do_execsql_test 220 {
+ PRAGMA integrity_check;
+} {ok}
+
+
+
finish_test
diff --git a/test/gencol1.test b/test/gencol1.test
index f3fbb0dfba..ed7ea567d4 100644
--- a/test/gencol1.test
+++ b/test/gencol1.test
@@ -662,11 +662,8 @@ do_execsql_test gencol1-23.4 {
# 2023-03-07 https://sqlite.org/forum/forumpost/b312e075b5
#
-do_execsql_test gencol1-23.5 {
+do_catchsql_test gencol1-23.5 {
CREATE TABLE v0(c1 INT, c2 AS (RAISE(IGNORE)));
-}
-do_catchsql_test gencol1-23.6 {
- SELECT * FROM v0;
} {1 {RAISE() may only be used within a trigger-program}}
finish_test
diff --git a/test/json101.test b/test/json101.test
index b8c2a58d34..426746377c 100644
--- a/test/json101.test
+++ b/test/json101.test
@@ -1127,4 +1127,16 @@ do_execsql_test json101-22.2 {
);
} {{{"a":2,"b":4,"c":6}}}
+# 2023-10-17 https://sqlite.org/forum/forumpost/fc0e3f1e2a
+# Incorrect accesss to '$[0]' in parsed + edited JSON.
+#
+do_execsql_test json101-23.1 {
+ SELECT j, j->>0, j->>1
+ FROM (SELECT json_set(json_set('[]','$[#]',0), '$[#]',1) AS j);
+} {{[0,1]} 0 1}
+do_execsql_test json101-23.2 {
+ SELECT j, j->>0, j->>1
+ FROM (SELECT json_set('[]','$[#]',0,'$[#]',1) AS j);
+} {{[0,1]} 0 1}
+
finish_test
diff --git a/test/unhex.test b/test/unhex.test
index f41e906a8f..d97438f0d6 100644
--- a/test/unhex.test
+++ b/test/unhex.test
@@ -55,6 +55,8 @@ do_catchsql_test 3.1 {
#--------------------------------------------------------------------------
# Test the 2-argument version.
#
+# Zap global x array set in some previous test.
+if {[array exists x]} {array unset x}
foreach {tn hex} {
1 "FFFF ABCD"
2 "FFFF ABCD"
diff --git a/tool/spaceanal.tcl b/tool/spaceanal.tcl
index d0c5e65e38..8fe72b99b1 100644
--- a/tool/spaceanal.tcl
+++ b/tool/spaceanal.tcl
@@ -581,6 +581,7 @@ set inuse_pgcnt [expr wide([mem eval $sql])]
set inuse_percent [percent $inuse_pgcnt $file_pgcnt]
set free_pgcnt [expr {$file_pgcnt-$inuse_pgcnt-$av_pgcnt}]
+if {$file_bytes>1073741824 && $free_pgcnt>0} {incr free_pgcnt -1}
set free_percent [percent $free_pgcnt $file_pgcnt]
set free_pgcnt2 [db one {PRAGMA freelist_count}]
set free_percent2 [percent $free_pgcnt2 $file_pgcnt]