1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Merge in and close jni-ptr-passing branch. The remaining pointer-passing adaptation can be done incrementally without affecting the interface.

FossilOrigin-Name: 7927c42410ba0d5fc8e6e08caaa5cbaaeb359869f17d1afaa082f1aa47fdb2fc
This commit is contained in:
stephan
2023-09-30 10:37:36 +00:00
19 changed files with 1328 additions and 826 deletions

View File

@ -26,8 +26,8 @@ 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.jni.tester := $(dir.src.jni)/tester
dir.src.fts5 := $(dir.src.jni)/fts5
dir.tests := $(dir.src)/tests
mkdir ?= mkdir -p
$(dir.bld.c):
$(mkdir) $@
@ -46,7 +46,7 @@ DISTCLEAN_FILES := $(dir.jni)/*~ $(dir.src.c)/*~ $(dir.src.jni)/*~
sqlite3-jni.h := $(dir.src.c)/sqlite3-jni.h
.NOTPARALLEL: $(sqlite3-jni.h)
SQLite3Jni.java := src/org/sqlite/jni/SQLite3Jni.java
SQLTester.java := src/org/sqlite/jni/tester/SQLTester.java
SQLTester.java := src/org/sqlite/jni/SQLTester.java
SQLite3Jni.class := $(SQLite3Jni.java:.java=.class)
SQLTester.class := $(SQLTester.java:.java=.class)
@ -61,8 +61,12 @@ SQLTester.class := $(SQLTester.java:.java=.class)
# which the fts5 APIs have been stripped unless that feature is
# intended to be stripped for good.
enable.fts5 ?= 1
# If enable.tester is 0, the org/sqlite/jni/tester/* bits are elided.
enable.tester ?= $(if $(wildcard $(dir.src.jni.tester)/SQLTester.java),1,0)
ifeq (,$(wildcard $(dir.tests)/*))
enable.tester := 0
else
enable.tester := 1
endif
# bin.version-info = binary to output various sqlite3 version info
# building the distribution zip file.
@ -112,6 +116,9 @@ JAVA_FILES.unittest := $(patsubst %,$(dir.src.jni)/%,\
Tester1.java \
)
ifeq (1,$(enable.fts5))
JAVA_FILES.unittest += $(patsubst %,$(dir.src.jni)/%,\
TesterFts5.java \
)
JAVA_FILES.main += $(patsubst %,$(dir.src.fts5)/%,\
fts5_api.java \
fts5_extension_function.java \
@ -121,11 +128,10 @@ ifeq (1,$(enable.fts5))
Fts5ExtensionApi.java \
Fts5PhraseIter.java \
Fts5Tokenizer.java \
TesterFts5.java \
XTokenizeCallback.java \
)
endif
JAVA_FILES.tester := $(dir.src.jni.tester)/SQLTester.java
JAVA_FILES.tester := $(SQLTester.java)
JAVA_FILES.package.info := \
$(dir.src.jni)/package-info.java \
$(dir.src.jni)/annotation/package-info.java
@ -233,14 +239,12 @@ endef
# Invoke ADD_JNI_H once for each Java file which includes JNI
# declarations:
$(eval $(call ADD_JNI_H,$(dir.src.jni),SQLite3Jni,))
$(eval $(call ADD_JNI_H,$(dir.src.jni),SQLTester,))
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))
$(eval $(call ADD_JNI_H,$(dir.src.fts5),fts5_tokenizer,_fts5))
endif
ifeq (1,$(enable.tester))
$(eval $(call ADD_JNI_H,$(dir.src.jni.tester),SQLTester,_tester))
endif
$(sqlite3-jni.h.in): $(dir.bld.c)
#package.dll.cfiles :=
@ -252,17 +256,18 @@ package.dll.cflags = \
-I$(JDK_HOME)/include \
$(patsubst %,-I%,$(patsubst %.h,,$(wildcard $(JDK_HOME)/include/*))) \
-Wall
# Using (-Wall -Wextra) triggers an untennable number of
# gcc warnings from sqlite3.c for mundane things like
# unused parameters.
#
# The gross $(patsubst...) above is to include the platform-specific
# subdir which lives under $(JDK_HOME)/include and is a required
# include path for client-level code.
#
# Using (-Wall -Wextra) triggers an untennable number of
# gcc warnings from sqlite3.c for mundane things like
# unused parameters.
########################################################################
ifeq (1,$(enable.tester))
package.dll.cflags += -DSQLITE_JNI_ENABLE_SQLTester
endif
$(sqlite3-jni.h): $(sqlite3-jni.h.in) $(MAKEFILE)
@cat $(sqlite3-jni.h.in) > $@.tmp
@if cmp $@ $@.tmp >/dev/null; then \
@ -308,21 +313,21 @@ 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.tester.SQLTester $(tester.flags) $(tester.scripts)
org.sqlite.jni.SQLTester $(tester.flags) $(tester.scripts)
tester: tester-local
else
tester:
@echo "SQLTester support is disabled. Build with enable.tester=1 to enable it."
@echo "SQLTester support is disabled."
endif
tester.extdir.default := src/tests/ext
tester.extdir.default := $(dir.tests)/ext
tester.extdir ?= $(tester.extdir.default)
tester.extern-scripts := $(wildcard $(tester.extdir)/*.test)
ifneq (,$(tester.extern-scripts))
tester-ext:
$(bin.java) -ea -Djava.library.path=$(dir.bld.c) \
$(java.flags) -cp $(classpath) \
org.sqlite.jni.tester.SQLTester $(tester.flags) $(tester.extern-scripts)
org.sqlite.jni.SQLTester $(tester.flags) $(tester.extern-scripts)
else
tester-ext:
@echo "******************************************************"; \
@ -381,8 +386,7 @@ run-jar: $(package.jar) $(package.dll)
# javadoc...
dir.doc := $(dir.jni)/javadoc
doc.index := $(dir.doc)/index.html
javadoc.exclude := -exclude org.sqlite.jni.tester \
-exclude org.sqlite.jni.fts5
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.

View File

@ -811,13 +811,13 @@ static void s3jni_incr( volatile unsigned int * const p ){
#endif
/* Helpers for jstring and jbyteArray. */
static const char * s3jni__jstring_to_mutf8_bytes(JNIEnv * const env, jstring v ){
static const char * s3jni__jstring_to_mutf8(JNIEnv * const env, jstring v ){
const char *z = v ? (*env)->GetStringUTFChars(env, v, NULL) : 0;
s3jni_oom_check( v ? !!z : !z );
return z;
}
#define s3jni_jstring_to_mutf8(ARG) s3jni__jstring_to_mutf8_bytes(env, (ARG))
#define s3jni_jstring_to_mutf8(ARG) s3jni__jstring_to_mutf8(env, (ARG))
#define s3jni_mutf8_release(ARG,VAR) if( VAR ) (*env)->ReleaseStringUTFChars(env, ARG, VAR)
static jbyte * s3jni__jbyteArray_bytes(JNIEnv * const env, jbyteArray jBA ){
@ -1176,6 +1176,8 @@ static void S3JniHook__unref(JNIEnv * const env, S3JniHook * const s){
}
S3JniUnrefGlobal(s->jObj);
S3JniUnrefGlobal(s->jExtra);
}else{
assert( !s->jExtra );
}
*s = S3JniHook_empty;
}
@ -1183,8 +1185,8 @@ static void S3JniHook__unref(JNIEnv * const env, S3JniHook * const s){
/*
** Allocates one blank S3JniHook object from the recycling bin, if
** available, else from the heap. Returns NULL or dies on OOM. Locks
** the global mutex.
** available, else from the heap. Returns NULL or dies on OOM,
** depending on build options. Locks on SJG.hooks.mutex.
*/
static S3JniHook *S3JniHook__alloc(JNIEnv * const env){
S3JniHook * p = 0;
@ -1211,7 +1213,7 @@ static S3JniHook *S3JniHook__alloc(JNIEnv * const env){
/*
** The rightful fate of all results from S3JniHook_alloc(). Locks on
** SJG>hooks.mutex.
** SJG.hook.mutex.
*/
static void S3JniHook__free(JNIEnv * const env, S3JniHook * const p){
if(p){
@ -1290,10 +1292,11 @@ static void S3JniDb__set_aside(JNIEnv * const env, S3JniDb * const s){
/*
** Uncache any state for the given JNIEnv, clearing all Java
** references the cache owns. Returns true if env was cached and false
** if it was not found in the cache. Ownership of the given object is
** passed over to this function, which makes it free for re-use.
** if it was not found in the cache. Ownership of the S3JniEnv object
** associated with the given argument is transferred to this function,
** which makes it free for re-use.
**
** Requires that the Env mutex be locked.
** Requires that the env mutex be locked.
*/
static int S3JniEnv_uncache(JNIEnv * const env){
struct S3JniEnv * row;
@ -1440,29 +1443,27 @@ static void * NativePointerHolder__get(JNIEnv * env, jobject jNph,
#define PtrGet_sqlite3_context(OBJ) PtrGet_T(sqlite3_context, OBJ)
#define PtrGet_sqlite3_stmt(OBJ) PtrGet_T(sqlite3_stmt, OBJ)
#define PtrGet_sqlite3_value(OBJ) PtrGet_T(sqlite3_value, OBJ)
#if 0
/*
** Enters the S3JniDb mutex and PtrGet_sqlite3()'s jObj. If that's
** NULL then it leaves the mutex, else the mutex is still entered
** when this returns and the caller is obligated to leave it.
** 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.
*/
static sqlite3* PtrGet__sqlite3_lock(JNIEnv * const env, jobject jObj){
sqlite3 *rv;
S3JniDb_mutex_enter;
rv = PtrGet_sqlite3(jObj);
if( !rv ){ S3JniDb_mutex_leave; }
return rv;
}
#undef PtrGet_sqlite3
#define PtrGet_sqlite3(JOBJ) PtrGet__sqlite3_lock(env, (JOBJ))
#endif
#define S3JniLongPtr_T(T,JLongPtr) (T*)(JLongPtr)
#define S3JniLongPtr_sqlite3(JLongPtr) S3JniLongPtr_T(sqlite3,JLongPtr)
#define S3JniLongPtr_sqlite3_backup(JLongPtr) S3JniLongPtr_T(sqlite3_backup,JLongPtr)
#define S3JniLongPtr_sqlite3_blob(JLongPtr) S3JniLongPtr_T(sqlite3_blob,JLongPtr)
#define S3JniLongPtr_sqlite3_stmt(JLongPtr) S3JniLongPtr_T(sqlite3_stmt,JLongPtr)
#define S3JniLongPtr_sqlite3_value(JLongPtr) S3JniLongPtr_T(sqlite3_value,JLongPtr)
/*
** Extracts the new S3JniDb instance from the free-list, or allocates
** one if needed, associats it with pDb, and returns. Returns NULL on
** OOM. pDb MUST, on success of the calling operation, subsequently be
** associated with jDb via NativePointerHolder_set().
** one if needed, associates it with pDb, and returns. Returns NULL
** on OOM. The returned object MUST, on success of the calling
** operation, subsequently be associated with jDb via
** NativePointerHolder_set() or freed using S3JniDb_set_aside().
*/
static S3JniDb * S3JniDb_alloc(JNIEnv * const env, jobject jDb){
S3JniDb * rv = 0;
@ -1514,6 +1515,8 @@ static void S3JniDb_xDestroy(void *p){
*/
#define S3JniDb_from_c(sqlite3Ptr) \
((sqlite3Ptr) ? S3JniDb_from_clientdata(sqlite3Ptr) : 0)
#define S3JniDb_from_jlong(sqlite3PtrAsLong) \
S3JniDb_from_c(S3JniLongPtr_T(sqlite3,sqlite3PtrAsLong))
/*
** Unref any Java-side state in (S3JniAutoExtension*) AX and zero out
@ -1993,50 +1996,47 @@ static void udf_xInverse(sqlite3_context* cx, int argc,
}
/** Create a trivial JNI wrapper for (int CName(sqlite3_stmt*)). */
#define WRAP_INT_STMT(JniNameSuffix,CName) \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jobject jpStmt){ \
jint const rc = (jint)CName(PtrGet_sqlite3_stmt(jpStmt)); \
S3JniExceptionIgnore /* squelch -Xcheck:jni */; \
return rc; \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jlong jpStmt){ \
return (jint)CName(S3JniLongPtr_sqlite3_stmt(jpStmt)); \
}
/** Create a trivial JNI wrapper for (int CName(sqlite3_stmt*,int)). */
#define WRAP_INT_STMT_INT(JniNameSuffix,CName) \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jobject pStmt, jint n){ \
return (jint)CName(PtrGet_sqlite3_stmt(pStmt), (int)n); \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jlong jpStmt, jint n){ \
return (jint)CName(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)n); \
}
/** Create a trivial JNI wrapper for (boolish-int CName(sqlite3_stmt*)). */
#define WRAP_BOOL_STMT(JniNameSuffix,CName) \
JniDecl(jboolean,JniNameSuffix)(JniArgsEnvClass, jobject pStmt){ \
return CName(PtrGet_sqlite3_stmt(pStmt)) ? JNI_TRUE : JNI_FALSE; \
JniDecl(jboolean,JniNameSuffix)(JniArgsEnvClass, jlong jpStmt){ \
return CName(S3JniLongPtr_sqlite3_stmt(jpStmt)) ? JNI_TRUE : JNI_FALSE; \
}
/** Create a trivial JNI wrapper for (jstring CName(sqlite3_stmt*,int)). */
#define WRAP_STR_STMT_INT(JniNameSuffix,CName) \
JniDecl(jstring,JniNameSuffix)(JniArgsEnvClass, jobject pStmt, jint ndx){ \
JniDecl(jstring,JniNameSuffix)(JniArgsEnvClass, jlong jpStmt, jint ndx){ \
return s3jni_utf8_to_jstring( \
CName(PtrGet_sqlite3_stmt(pStmt), (int)ndx), \
CName(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx), \
-1); \
}
/** Create a trivial JNI wrapper for (int CName(sqlite3*)). */
#define WRAP_INT_DB(JniNameSuffix,CName) \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jobject pDb){ \
return (jint)CName(PtrGet_sqlite3(pDb)); \
}
/** Create a trivial JNI wrapper for (boolean CName(sqlite3*)). */
#define WRAP_BOOL_DB(JniNameSuffix,CName) \
JniDecl(jboolean,JniNameSuffix)(JniArgsEnvClass, jobject pDb){ \
return CName(PtrGet_sqlite3(pDb)) ? JNI_TRUE : JNI_FALSE; \
JniDecl(jboolean,JniNameSuffix)(JniArgsEnvClass, jlong jpDb){ \
return CName(S3JniLongPtr_sqlite3(jpDb)) ? JNI_TRUE : JNI_FALSE; \
}
/** Create a trivial JNI wrapper for (int CName(sqlite3*)). */
#define WRAP_INT_DB(JniNameSuffix,CName) \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jlong jpDb){ \
return (jint)CName(S3JniLongPtr_sqlite3(jpDb)); \
}
/** Create a trivial JNI wrapper for (int64 CName(sqlite3*)). */
#define WRAP_INT64_DB(JniNameSuffix,CName) \
JniDecl(jlong,JniNameSuffix)(JniArgsEnvClass, jobject pDb){ \
return (jlong)CName(PtrGet_sqlite3(pDb)); \
JniDecl(jlong,JniNameSuffix)(JniArgsEnvClass, jlong jpDb){ \
return (jlong)CName(S3JniLongPtr_sqlite3(jpDb)); \
}
/** Create a trivial JNI wrapper for (int CName(sqlite3_value*)). */
#define WRAP_INT_SVALUE(JniNameSuffix,CName) \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jobject jpSValue){ \
return (jint)CName(PtrGet_sqlite3_value(jpSValue)); \
JniDecl(jint,JniNameSuffix)(JniArgsEnvClass, jlong jpSValue){ \
return (jint)CName(S3JniLongPtr_sqlite3_value(jpSValue)); \
}
WRAP_INT_STMT(1bind_1parameter_1count, sqlite3_bind_parameter_count)
WRAP_INT_DB(1changes, sqlite3_changes)
WRAP_INT64_DB(1changes64, sqlite3_changes64)
WRAP_INT_STMT(1clear_1bindings, sqlite3_clear_bindings)
@ -2236,19 +2236,21 @@ S3JniApi(sqlite3_auto_extension(),jint,1auto_1extension)(
}
S3JniApi(sqlite3_backup_finish(),jint,1backup_1finish)(
JniArgsEnvClass, jobject jBack
JniArgsEnvClass, jlong jpBack
){
sqlite3_backup * const pB = PtrGet_sqlite3_backup(jBack);
NativePointerHolder_set(S3JniNph(sqlite3_backup), jBack, 0);
return sqlite3_backup_finish(pB);
int rc = 0;
if( jpBack!=0 ){
rc = sqlite3_backup_finish( S3JniLongPtr_sqlite3_backup(jpBack) );
}
return rc;
}
S3JniApi(sqlite3_backup_init(),jobject,1backup_1init)(
JniArgsEnvClass, jobject jDbDest, jstring jTDest,
jobject jDbSrc, jstring jTSrc
JniArgsEnvClass, jlong jpDbDest, jstring jTDest,
jlong jpDbSrc, jstring jTSrc
){
sqlite3 * const pDest = PtrGet_sqlite3(jDbDest);
sqlite3 * const pSrc = PtrGet_sqlite3(jDbSrc);
sqlite3 * const pDest = S3JniLongPtr_sqlite3(jpDbDest);
sqlite3 * const pSrc = S3JniLongPtr_sqlite3(jpDbSrc);
char * const zDest = s3jni_jstring_to_utf8(jTDest, 0);
char * const zSrc = s3jni_jstring_to_utf8(jTSrc, 0);
jobject rv = 0;
@ -2269,66 +2271,67 @@ S3JniApi(sqlite3_backup_init(),jobject,1backup_1init)(
}
S3JniApi(sqlite3_backup_pagecount(),jint,1backup_1pagecount)(
JniArgsEnvClass, jobject jBack
JniArgsEnvClass, jlong jpBack
){
return sqlite3_backup_pagecount(PtrGet_sqlite3_backup(jBack));
return sqlite3_backup_pagecount(S3JniLongPtr_sqlite3_backup(jpBack));
}
S3JniApi(sqlite3_backup_remaining(),jint,1backup_1remaining)(
JniArgsEnvClass, jobject jBack
JniArgsEnvClass, jlong jpBack
){
return sqlite3_backup_remaining(PtrGet_sqlite3_backup(jBack));
return sqlite3_backup_remaining(S3JniLongPtr_sqlite3_backup(jpBack));
}
S3JniApi(sqlite3_backup_step(),jint,1backup_1step)(
JniArgsEnvClass, jobject jBack, jint nPage
JniArgsEnvClass, jlong jpBack, jint nPage
){
return sqlite3_backup_step(PtrGet_sqlite3_backup(jBack), (int)nPage);
return sqlite3_backup_step(S3JniLongPtr_sqlite3_backup(jpBack), (int)nPage);
}
S3JniApi(sqlite3_bind_blob(),jint,1bind_1blob)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jbyteArray baData, jint nMax
JniArgsEnvClass, jlong jpStmt, jint ndx, jbyteArray baData, jint nMax
){
jbyte * const pBuf = baData ? s3jni_jbyteArray_bytes(baData) : 0;
int rc;
if( pBuf ){
rc = sqlite3_bind_blob(PtrGet_sqlite3_stmt(jpStmt), (int)ndx,
rc = sqlite3_bind_blob(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx,
pBuf, (int)nMax, SQLITE_TRANSIENT);
s3jni_jbyteArray_release(baData, pBuf);
}else{
rc = baData
? SQLITE_NOMEM
: sqlite3_bind_null( PtrGet_sqlite3_stmt(jpStmt), ndx );
: sqlite3_bind_null( S3JniLongPtr_sqlite3_stmt(jpStmt), ndx );
}
return (jint)rc;
}
S3JniApi(sqlite3_bind_double(),jint,1bind_1double)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jdouble val
JniArgsEnvClass, jlong jpStmt, jint ndx, jdouble val
){
return (jint)sqlite3_bind_double(PtrGet_sqlite3_stmt(jpStmt), (int)ndx, (double)val);
return (jint)sqlite3_bind_double(S3JniLongPtr_sqlite3_stmt(jpStmt),
(int)ndx, (double)val);
}
S3JniApi(sqlite3_bind_int(),jint,1bind_1int)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jint val
JniArgsEnvClass, jlong jpStmt, jint ndx, jint val
){
return (jint)sqlite3_bind_int(PtrGet_sqlite3_stmt(jpStmt), (int)ndx, (int)val);
return (jint)sqlite3_bind_int(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx, (int)val);
}
S3JniApi(sqlite3_bind_int64(),jint,1bind_1int64)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jlong val
JniArgsEnvClass, jlong jpStmt, jint ndx, jlong val
){
return (jint)sqlite3_bind_int64(PtrGet_sqlite3_stmt(jpStmt), (int)ndx, (sqlite3_int64)val);
return (jint)sqlite3_bind_int64(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx, (sqlite3_int64)val);
}
/*
** Bind a new global ref to Object `val` using sqlite3_bind_pointer().
*/
S3JniApi(sqlite3_bind_java_object(),jint,1bind_1java_1object)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jobject val
JniArgsEnvClass, jlong jpStmt, jint ndx, jobject val
){
sqlite3_stmt * const pStmt = PtrGet_sqlite3_stmt(jpStmt);
int rc = 0;
sqlite3_stmt * const pStmt = S3JniLongPtr_sqlite3_stmt(jpStmt);
int rc = SQLITE_MISUSE;
if(pStmt){
jobject const rv = val ? S3JniRefGlobal(val) : 0;
@ -2337,26 +2340,32 @@ S3JniApi(sqlite3_bind_java_object(),jint,1bind_1java_1object)(
S3Jni_jobject_finalizer);
}else if(val){
rc = SQLITE_NOMEM;
}
}else{
rc = SQLITE_MISUSE;
rc = sqlite3_bind_null(pStmt, ndx);
}
}
return rc;
}
S3JniApi(sqlite3_bind_null(),jint,1bind_1null)(
JniArgsEnvClass, jobject jpStmt, jint ndx
JniArgsEnvClass, jlong jpStmt, jint ndx
){
return (jint)sqlite3_bind_null(PtrGet_sqlite3_stmt(jpStmt), (int)ndx);
return (jint)sqlite3_bind_null(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx);
}
S3JniApi(sqlite3_bind_parameter_count(),jint,1bind_1parameter_1count)(
JniArgsEnvClass, jlong jpStmt
){
return (jint)sqlite3_bind_parameter_count(S3JniLongPtr_sqlite3_stmt(jpStmt));
}
S3JniApi(sqlite3_bind_parameter_index(),jint,1bind_1parameter_1index)(
JniArgsEnvClass, jobject jpStmt, jbyteArray jName
JniArgsEnvClass, jlong jpStmt, jbyteArray jName
){
int rc = 0;
jbyte * const pBuf = s3jni_jbyteArray_bytes(jName);
if( pBuf ){
rc = sqlite3_bind_parameter_index(PtrGet_sqlite3_stmt(jpStmt),
rc = sqlite3_bind_parameter_index(S3JniLongPtr_sqlite3_stmt(jpStmt),
(const char *)pBuf);
s3jni_jbyteArray_release(jName, pBuf);
}
@ -2364,23 +2373,18 @@ S3JniApi(sqlite3_bind_parameter_index(),jint,1bind_1parameter_1index)(
}
S3JniApi(sqlite3_bind_parameter_name(),jstring,1bind_1parameter_1name)(
JniArgsEnvClass, jobject jpStmt, jint ndx
JniArgsEnvClass, jlong jpStmt, jint ndx
){
jstring rv = 0;
const char *z =
sqlite3_bind_parameter_name(PtrGet_sqlite3_stmt(jpStmt), (int)ndx);
if( z ){
rv = s3jni_utf8_to_jstring(z, -1);
}
return rv;
sqlite3_bind_parameter_name(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx);
return z ? s3jni_utf8_to_jstring(z, -1) : 0;
}
S3JniApi(sqlite3_bind_text(),jint,1bind_1text)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jbyteArray baData, jint nMax
JniArgsEnvClass, jlong jpStmt, jint ndx, jbyteArray baData, jint nMax
){
jbyte * const pBuf = baData ? s3jni_jbyteArray_bytes(baData) : 0;
int const rc = sqlite3_bind_text(PtrGet_sqlite3_stmt(jpStmt), (int)ndx,
int const rc = sqlite3_bind_text(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx,
(const char *)pBuf,
(int)nMax, SQLITE_TRANSIENT);
s3jni_jbyteArray_release(baData, pBuf);
@ -2388,49 +2392,47 @@ S3JniApi(sqlite3_bind_text(),jint,1bind_1text)(
}
S3JniApi(sqlite3_bind_text16(),jint,1bind_1text16)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jbyteArray baData, jint nMax
JniArgsEnvClass, jlong jpStmt, jint ndx, jbyteArray baData, jint nMax
){
jbyte * const pBuf = baData ? s3jni_jbyteArray_bytes(baData) : 0;
int const rc = sqlite3_bind_text16(PtrGet_sqlite3_stmt(jpStmt), (int)ndx,
int const rc = sqlite3_bind_text16(S3JniLongPtr_sqlite3_stmt(jpStmt), (int)ndx,
pBuf, (int)nMax, SQLITE_TRANSIENT);
s3jni_jbyteArray_release(baData, pBuf);
return (jint)rc;
}
S3JniApi(sqlite3_bind_zeroblob(),jint,1bind_1zeroblob)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jint n
JniArgsEnvClass, jlong jpStmt, jint ndx, jint n
){
return (jint)sqlite3_bind_zeroblob(PtrGet_sqlite3_stmt(jpStmt), (int)ndx, (int)n);
return (jint)sqlite3_bind_zeroblob(S3JniLongPtr_sqlite3_stmt(jpStmt),
(int)ndx, (int)n);
}
S3JniApi(sqlite3_bind_zeroblob(),jint,1bind_1zeroblob64)(
JniArgsEnvClass, jobject jpStmt, jint ndx, jlong n
S3JniApi(sqlite3_bind_zeroblob64(),jint,1bind_1zeroblob64)(
JniArgsEnvClass, jlong jpStmt, jint ndx, jlong n
){
return (jint)sqlite3_bind_zeroblob(PtrGet_sqlite3_stmt(jpStmt), (int)ndx, (sqlite3_uint64)n);
return (jint)sqlite3_bind_zeroblob64(S3JniLongPtr_sqlite3_stmt(jpStmt),
(int)ndx, (sqlite3_uint64)n);
}
S3JniApi(sqlite3_blob_bytes(),jint,1blob_1bytes)(
JniArgsEnvClass, jobject jBlob
JniArgsEnvClass, jlong jpBlob
){
return sqlite3_blob_bytes(PtrGet_sqlite3_blob(jBlob));
return sqlite3_blob_bytes(S3JniLongPtr_sqlite3_blob(jpBlob));
}
S3JniApi(sqlite3_blob_close(),jint,1blob_1close)(
JniArgsEnvClass, jobject jBlob
JniArgsEnvClass, jlong jpBlob
){
sqlite3_blob * const b = PtrGet_sqlite3_blob(jBlob);
jint const rc = b ? (jint)sqlite3_blob_close(b) : SQLITE_MISUSE;
if( b ){
NativePointerHolder_set(S3JniNph(sqlite3_blob), jBlob, 0);
}
return rc;
sqlite3_blob * const b = S3JniLongPtr_sqlite3_blob(jpBlob);
return b ? (jint)sqlite3_blob_close(b) : SQLITE_MISUSE;
}
S3JniApi(sqlite3_blob_open(),jint,1blob_1open)(
JniArgsEnvClass, jobject jDb, jstring jDbName, jstring jTbl, jstring jCol,
JniArgsEnvClass, jlong jpDb, jstring jDbName, jstring jTbl, jstring jCol,
jlong jRowId, jint flags, jobject jOut
){
sqlite3 * const db = PtrGet_sqlite3(jDb);
sqlite3 * const db = S3JniLongPtr_sqlite3(jpDb);
sqlite3_blob * pBlob = 0;
char * zDbName = 0, * zTableName = 0, * zColumnName = 0;
int rc;
@ -2458,13 +2460,13 @@ S3JniApi(sqlite3_blob_open(),jint,1blob_1open)(
}
S3JniApi(sqlite3_blob_read(),jint,1blob_1read)(
JniArgsEnvClass, jobject jBlob, jbyteArray jTgt, jint iOffset
JniArgsEnvClass, jlong jpBlob, jbyteArray jTgt, jint iOffset
){
jbyte * const pBa = s3jni_jbyteArray_bytes(jTgt);
int rc = jTgt ? (pBa ? SQLITE_MISUSE : SQLITE_NOMEM) : SQLITE_MISUSE;
if( pBa ){
jsize const nTgt = (*env)->GetArrayLength(env, jTgt);
rc = sqlite3_blob_read(PtrGet_sqlite3_blob(jBlob), pBa,
rc = sqlite3_blob_read(S3JniLongPtr_sqlite3_blob(jpBlob), pBa,
(int)nTgt, (int)iOffset);
if( 0==rc ){
s3jni_jbyteArray_commit(jTgt, pBa);
@ -2476,16 +2478,16 @@ S3JniApi(sqlite3_blob_read(),jint,1blob_1read)(
}
S3JniApi(sqlite3_blob_reopen(),jint,1blob_1reopen)(
JniArgsEnvClass, jobject jBlob, jlong iNewRowId
JniArgsEnvClass, jlong jpBlob, jlong iNewRowId
){
return (jint)sqlite3_blob_reopen(PtrGet_sqlite3_blob(jBlob),
return (jint)sqlite3_blob_reopen(S3JniLongPtr_sqlite3_blob(jpBlob),
(sqlite3_int64)iNewRowId);
}
S3JniApi(sqlite3_blob_write(),jint,1blob_1write)(
JniArgsEnvClass, jobject jBlob, jbyteArray jBa, jint iOffset
JniArgsEnvClass, jlong jpBlob, jbyteArray jBa, jint iOffset
){
sqlite3_blob * const b = PtrGet_sqlite3_blob(jBlob);
sqlite3_blob * const b = S3JniLongPtr_sqlite3_blob(jpBlob);
jbyte * const pBuf = b ? s3jni_jbyteArray_bytes(jBa) : 0;
const jsize nBa = pBuf ? (*env)->GetArrayLength(env, jBa) : 0;
int rc = SQLITE_MISUSE;
@ -2518,9 +2520,9 @@ static int s3jni_busy_handler(void* pState, int n){
}
S3JniApi(sqlite3_busy_handler(),jint,1busy_1handler)(
JniArgsEnvClass, jobject jDb, jobject jBusy
JniArgsEnvClass, jlong jpDb, jobject jBusy
){
S3JniDb * const ps = S3JniDb_from_java(jDb);
S3JniDb * const ps = S3JniDb_from_jlong(jpDb);
S3JniHook * const pHook = ps ? &ps->hooks.busyHandler : 0;
S3JniHook hook = S3JniHook_empty;
int rc = 0;
@ -2563,9 +2565,9 @@ S3JniApi(sqlite3_busy_handler(),jint,1busy_1handler)(
}
S3JniApi(sqlite3_busy_timeout(),jint,1busy_1timeout)(
JniArgsEnvClass, jobject jDb, jint ms
JniArgsEnvClass, jlong jpDb, jint ms
){
S3JniDb * const ps = S3JniDb_from_java(jDb);
S3JniDb * const ps = S3JniDb_from_jlong(jpDb);
int rc = SQLITE_MISUSE;
if( ps ){
S3JniDb_mutex_enter;
@ -2602,32 +2604,25 @@ S3JniApi(sqlite3_cancel_auto_extension(),jboolean,1cancel_1auto_1extension)(
}
/* Wrapper for sqlite3_close(_v2)(). */
static jint s3jni_close_db(JNIEnv * const env, jobject jDb, int version){
static jint s3jni_close_db(JNIEnv * const env, jlong jpDb, int version){
int rc = 0;
S3JniDb * const ps = S3JniDb_from_java(jDb);
S3JniDb * const ps = S3JniDb_from_jlong(jpDb);
assert(version == 1 || version == 2);
if( ps ){
rc = 1==version
? (jint)sqlite3_close(ps->pDb)
: (jint)sqlite3_close_v2(ps->pDb);
if( 0==rc ){
NativePointerHolder_set(S3JniNph(sqlite3), jDb, 0);
}
}
return (jint)rc;
}
S3JniApi(sqlite3_close_v2(),jint,1close_1v2)(
JniArgsEnvClass, jobject pDb
){
return s3jni_close_db(env, pDb, 2);
S3JniApi(sqlite3_close(),jint,1close)(JniArgsEnvClass, jlong pDb){
return s3jni_close_db(env, pDb, 1);
}
S3JniApi(sqlite3_close(),jint,1close)(
JniArgsEnvClass, jobject pDb
){
return s3jni_close_db(env, pDb, 1);
S3JniApi(sqlite3_close_v2(),jint,1close_1v2)(JniArgsEnvClass, jlong pDb){
return s3jni_close_db(env, pDb, 2);
}
/*
@ -2673,14 +2668,14 @@ static void s3jni_collation_needed_impl16(void *pState, sqlite3 *pDb,
}
S3JniApi(sqlite3_collation_needed(),jint,1collation_1needed)(
JniArgsEnvClass, jobject jDb, jobject jHook
JniArgsEnvClass, jlong jpDb, jobject jHook
){
S3JniDb * ps;
S3JniCollationNeeded * pHook;
int rc = 0;
S3JniDb_mutex_enter;
ps = S3JniDb_from_java(jDb);
ps = S3JniDb_from_jlong(jpDb);
if( !ps ){
S3JniDb_mutex_leave;
return SQLITE_MISUSE;
@ -2823,13 +2818,13 @@ static void s3jni_rollback_hook_impl(void *pP){
** sqlite3_rollback_hook().
*/
static jobject s3jni_commit_rollback_hook(int isCommit, JNIEnv * const env,
jobject jDb, jobject jHook){
jlong jpDb, jobject jHook){
S3JniDb * ps;
jobject pOld = 0; /* previous hoook */
S3JniHook * pHook; /* ps->hooks.commit|rollback */
S3JniDb_mutex_enter;
ps = S3JniDb_from_java(jDb);
ps = S3JniDb_from_jlong(jpDb);
if( !ps ){
s3jni_db_error(ps->pDb, SQLITE_NOMEM, 0);
S3JniDb_mutex_leave;
@ -2877,9 +2872,9 @@ static jobject s3jni_commit_rollback_hook(int isCommit, JNIEnv * const env,
}
S3JniApi(sqlite3_commit_hook(),jobject,1commit_1hook)(
JniArgsEnvClass,jobject jDb, jobject jHook
JniArgsEnvClass, jlong jpDb, jobject jHook
){
return s3jni_commit_rollback_hook(1, env, jDb, jHook);
return s3jni_commit_rollback_hook(1, env, jpDb, jHook);
}
S3JniApi(sqlite3_compileoption_get(),jstring,1compileoption_1get)(
@ -2912,7 +2907,8 @@ 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. */;
/* 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);
@ -3125,7 +3121,7 @@ S3JniApi(sqlite3_create_collation() sqlite3_create_collation_v2(),
S3JniDb_mutex_enter;
ps = S3JniDb_from_java(jDb);
if( !ps ){
if( !ps || !name ){
rc = SQLITE_MISUSE;
}else{
jclass const klazz = (*env)->GetObjectClass(env, oCollation);
@ -3171,7 +3167,9 @@ S3JniApi(sqlite3_create_function() sqlite3_create_function_v2()
sqlite3 * const pDb = PtrGet_sqlite3(jDb);
char * zFuncName = 0;
if( !encodingTypeIsValid(eTextRep) ){
if( !pDb || !jFuncName ){
return SQLITE_MISUSE;
}else if( !encodingTypeIsValid(eTextRep) ){
return s3jni_db_error(pDb, SQLITE_FORMAT,
"Invalid function encoding option.");
}
@ -3408,15 +3406,11 @@ S3JniApi(sqlite3_extended_result_codes(),jboolean,1extended_1result_1codes)(
}
S3JniApi(sqlite3_finalize(),jint,1finalize)(
JniArgsEnvClass, jobject jpStmt
JniArgsEnvClass, jlong jpStmt
){
int rc = 0;
sqlite3_stmt * const pStmt = PtrGet_sqlite3_stmt(jpStmt);
if( pStmt ){
rc = sqlite3_finalize(pStmt);
NativePointerHolder_set(S3JniNph(sqlite3_stmt), jpStmt, 0);
}
return rc;
return jpStmt
? sqlite3_finalize(S3JniLongPtr_sqlite3_stmt(jpStmt))
: 0;
}
S3JniApi(sqlite3_get_auxdata(),jobject,1get_1auxdata)(
@ -3637,7 +3631,7 @@ S3JniApi(sqlite3_open_v2(),jint,1open_1v2)(
/* Proxy for the sqlite3_prepare[_v2/3]() family. */
jint sqlite3_jni_prepare_v123( int prepVersion, JNIEnv * const env, jclass self,
jobject jDb, jbyteArray baSql,
jlong jpDb, jbyteArray baSql,
jint nMax, jint prepFlags,
jobject jOutStmt, jobject outTail){
sqlite3_stmt * pStmt = 0;
@ -3656,18 +3650,18 @@ jint sqlite3_jni_prepare_v123( int prepVersion, JNIEnv * const env, jclass self,
goto end;
}
switch( prepVersion ){
case 1: rc = sqlite3_prepare(PtrGet_sqlite3(jDb), (const char *)pBuf,
case 1: rc = sqlite3_prepare(S3JniLongPtr_sqlite3(jpDb), (const char *)pBuf,
(int)nMax, &pStmt, &zTail);
break;
case 2: rc = sqlite3_prepare_v2(PtrGet_sqlite3(jDb), (const char *)pBuf,
case 2: rc = sqlite3_prepare_v2(S3JniLongPtr_sqlite3(jpDb), (const char *)pBuf,
(int)nMax, &pStmt, &zTail);
break;
case 3: rc = sqlite3_prepare_v3(PtrGet_sqlite3(jDb), (const char *)pBuf,
case 3: rc = sqlite3_prepare_v3(S3JniLongPtr_sqlite3(jpDb), (const char *)pBuf,
(int)nMax, (unsigned int)prepFlags,
&pStmt, &zTail);
break;
default:
assert(0 && "Invalid prepare() version");
assert(!"Invalid prepare() version");
}
end:
s3jni_jbyteArray_release(baSql,pBuf);
@ -3697,24 +3691,24 @@ end:
return (jint)rc;
}
S3JniApi(sqlite3_prepare(),jint,1prepare)(
JNIEnv * const env, jclass self, jobject jDb, jbyteArray baSql,
JNIEnv * const env, jclass self, jlong jpDb, jbyteArray baSql,
jint nMax, jobject jOutStmt, jobject outTail
){
return sqlite3_jni_prepare_v123(1, env, self, jDb, baSql, nMax, 0,
return sqlite3_jni_prepare_v123(1, env, self, jpDb, baSql, nMax, 0,
jOutStmt, outTail);
}
S3JniApi(sqlite3_prepare_v2(),jint,1prepare_1v2)(
JNIEnv * const env, jclass self, jobject jDb, jbyteArray baSql,
JNIEnv * const env, jclass self, jlong jpDb, jbyteArray baSql,
jint nMax, jobject jOutStmt, jobject outTail
){
return sqlite3_jni_prepare_v123(2, env, self, jDb, baSql, nMax, 0,
return sqlite3_jni_prepare_v123(2, env, self, jpDb, baSql, nMax, 0,
jOutStmt, outTail);
}
S3JniApi(sqlite3_prepare_v3(),jint,1prepare_1v3)(
JNIEnv * const env, jclass self, jobject jDb, jbyteArray baSql,
JNIEnv * const env, jclass self, jlong jpDb, jbyteArray baSql,
jint nMax, jint prepFlags, jobject jOutStmt, jobject outTail
){
return sqlite3_jni_prepare_v123(3, env, self, jDb, baSql, nMax,
return sqlite3_jni_prepare_v123(3, env, self, jpDb, baSql, nMax,
prepFlags, jOutStmt, outTail);
}
@ -3803,8 +3797,8 @@ S3JniApi(sqlite3_preupdate_depth(),int,1preupdate_1depth)(
** JNI wrapper for both sqlite3_update_hook() and
** sqlite3_preupdate_hook() (if isPre is true).
*/
static jobject s3jni_updatepre_hook(JNIEnv * env, int isPre, jobject jDb, jobject jHook){
S3JniDb * const ps = S3JniDb_from_java(jDb);
static jobject s3jni_updatepre_hook(JNIEnv * env, int isPre, jlong jpDb, jobject jHook){
S3JniDb * const ps = S3JniDb_from_jlong(jpDb);
jclass klazz;
jobject pOld = 0;
jmethodID xCallback;
@ -3877,20 +3871,20 @@ end:
S3JniApi(sqlite3_preupdate_hook(),jobject,1preupdate_1hook)(
JniArgsEnvClass, jobject jDb, jobject jHook
JniArgsEnvClass, jlong jpDb, jobject jHook
){
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
return s3jni_updatepre_hook(env, 1, jDb, jHook);
return s3jni_updatepre_hook(env, 1, jpDb, jHook);
#else
return NULL;
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
}
/* Impl for sqlite3_preupdate_{new,old}(). */
static int s3jni_preupdate_newold(JNIEnv * const env, int isNew, jobject jDb,
static int s3jni_preupdate_newold(JNIEnv * const env, int isNew, jlong jpDb,
jint iCol, jobject jOut){
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
sqlite3 * const pDb = PtrGet_sqlite3(jDb);
sqlite3 * const pDb = S3JniLongPtr_sqlite3(jpDb);
int rc = SQLITE_MISUSE;
if( pDb ){
sqlite3_value * pOut = 0;
@ -3914,15 +3908,15 @@ static int s3jni_preupdate_newold(JNIEnv * const env, int isNew, jobject jDb,
}
S3JniApi(sqlite3_preupdate_new(),jint,1preupdate_1new)(
JniArgsEnvClass, jobject jDb, jint iCol, jobject jOut
JniArgsEnvClass, jlong jpDb, jint iCol, jobject jOut
){
return s3jni_preupdate_newold(env, 1, jDb, iCol, jOut);
return s3jni_preupdate_newold(env, 1, jpDb, iCol, jOut);
}
S3JniApi(sqlite3_preupdate_old(),jint,1preupdate_1old)(
JniArgsEnvClass, jobject jDb, jint iCol, jobject jOut
JniArgsEnvClass, jlong jpDb, jint iCol, jobject jOut
){
return s3jni_preupdate_newold(env, 0, jDb, iCol, jOut);
return s3jni_preupdate_newold(env, 0, jpDb, iCol, jOut);
}
@ -4222,9 +4216,9 @@ S3JniApi(sqlite3_result_zeroblob64(),jint,1result_1zeroblob64)(
}
S3JniApi(sqlite3_rollback_hook(),jobject,1rollback_1hook)(
JniArgsEnvClass, jobject jDb, jobject jHook
JniArgsEnvClass, jlong jpDb, jobject jHook
){
return s3jni_commit_rollback_hook(0, env, jDb, jHook);
return s3jni_commit_rollback_hook(0, env, jpDb, jHook);
}
/* Callback for sqlite3_set_authorizer(). */
@ -4630,16 +4624,16 @@ S3JniApi(sqlite3_txn_state(),jint,1txn_1state)(
}
S3JniApi(sqlite3_update_hook(),jobject,1update_1hook)(
JniArgsEnvClass, jobject jDb, jobject jHook
JniArgsEnvClass, jlong jpDb, jobject jHook
){
return s3jni_updatepre_hook(env, 0, jDb, jHook);
return s3jni_updatepre_hook(env, 0, jpDb, jHook);
}
S3JniApi(sqlite3_value_blob(),jbyteArray,1value_1blob)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = PtrGet_sqlite3_value(jpSVal);
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
int const nLen = sqlite3_value_bytes(sv);
const jbyte * pBytes = sqlite3_value_blob(sv);
@ -4651,48 +4645,48 @@ S3JniApi(sqlite3_value_blob(),jbyteArray,1value_1blob)(
S3JniApi(sqlite3_value_double(),jdouble,1value_1double)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
return (jdouble) sqlite3_value_double(PtrGet_sqlite3_value(jpSVal));
return (jdouble) sqlite3_value_double(S3JniLongPtr_sqlite3_value(jpSVal));
}
S3JniApi(sqlite3_value_dup(),jobject,1value_1dup)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = sqlite3_value_dup(PtrGet_sqlite3_value(jpSVal));
sqlite3_value * const sv = sqlite3_value_dup(S3JniLongPtr_sqlite3_value(jpSVal));
return sv ? new_java_sqlite3_value(env, sv) : 0;
}
S3JniApi(sqlite3_value_free(),void,1value_1free)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value_free(PtrGet_sqlite3_value(jpSVal));
sqlite3_value_free(S3JniLongPtr_sqlite3_value(jpSVal));
}
S3JniApi(sqlite3_value_int(),jint,1value_1int)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
return (jint) sqlite3_value_int(PtrGet_sqlite3_value(jpSVal));
return (jint) sqlite3_value_int(S3JniLongPtr_sqlite3_value(jpSVal));
}
S3JniApi(sqlite3_value_int64(),jlong,1value_1int64)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
return (jlong) sqlite3_value_int64(PtrGet_sqlite3_value(jpSVal));
return (jlong) sqlite3_value_int64(S3JniLongPtr_sqlite3_value(jpSVal));
}
S3JniApi(sqlite3_value_java_object(),jobject,1value_1java_1object)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
return sqlite3_value_pointer(PtrGet_sqlite3_value(jpSVal),
return sqlite3_value_pointer(S3JniLongPtr_sqlite3_value(jpSVal),
ResultJavaValuePtrStr);
}
S3JniApi(sqlite3_value_text(),jbyteArray,1value_1text)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = PtrGet_sqlite3_value(jpSVal);
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
int const n = sqlite3_value_bytes(sv);
const unsigned char * const p = sqlite3_value_text(sv);
return p ? s3jni_new_jbyteArray(p, n) : 0;
@ -4701,9 +4695,9 @@ S3JniApi(sqlite3_value_text(),jbyteArray,1value_1text)(
#if 0
// this impl might prove useful.
S3JniApi(sqlite3_value_text(),jstring,1value_1text)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = PtrGet_sqlite3_value(jpSVal);
sqlite3_value * const sv = S3JniLongPtr_sqlite3_value(jpSVal);
int const n = sqlite3_value_bytes(sv);
const unsigned char * const p = sqlite3_value_text(sv);
return p ? s3jni_utf8_to_jstring( (const char *)p, n) : 0;
@ -4711,9 +4705,9 @@ S3JniApi(sqlite3_value_text(),jstring,1value_1text)(
#endif
S3JniApi(sqlite3_value_text16(),jstring,1value_1text16)(
JniArgsEnvClass, jobject jpSVal
JniArgsEnvClass, jlong jpSVal
){
sqlite3_value * const sv = PtrGet_sqlite3_value(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);
@ -5575,7 +5569,7 @@ static int SQLTester_strnotglob(const char *zGlob, const char *z){
}
JNIEXPORT jint JNICALL
Java_org_sqlite_jni_tester_SQLTester_strglob(
Java_org_sqlite_jni_SQLTester_strglob(
JniArgsEnvClass, jbyteArray baG, jbyteArray baT
){
int rc = 0;
@ -5602,7 +5596,7 @@ static int SQLTester_auto_extension(sqlite3 *pDb, const char **pzErr,
}
JNIEXPORT void JNICALL
Java_org_sqlite_jni_tester_SQLTester_installCustomExtensions(JniArgsEnvClass){
Java_org_sqlite_jni_SQLTester_installCustomExtensions(JniArgsEnvClass){
sqlite3_auto_extension( (void(*)(void))SQLTester_auto_extension );
}

View File

@ -814,210 +814,210 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1auto_1extension
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_backup_finish
* Signature: (Lorg/sqlite/jni/sqlite3_backup;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1backup_1finish
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_backup_init
* Signature: (Lorg/sqlite/jni/sqlite3;Ljava/lang/String;Lorg/sqlite/jni/sqlite3;Ljava/lang/String;)Lorg/sqlite/jni/sqlite3_backup;
* Signature: (JLjava/lang/String;JLjava/lang/String;)Lorg/sqlite/jni/sqlite3_backup;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1backup_1init
(JNIEnv *, jclass, jobject, jstring, jobject, jstring);
(JNIEnv *, jclass, jlong, jstring, jlong, jstring);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_backup_pagecount
* Signature: (Lorg/sqlite/jni/sqlite3_backup;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1backup_1pagecount
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_backup_remaining
* Signature: (Lorg/sqlite/jni/sqlite3_backup;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1backup_1remaining
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_backup_step
* Signature: (Lorg/sqlite/jni/sqlite3_backup;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1backup_1step
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_blob
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I[BI)I
* Signature: (JI[BI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1blob
(JNIEnv *, jclass, jobject, jint, jbyteArray, jint);
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_double
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;ID)I
* Signature: (JID)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1double
(JNIEnv *, jclass, jobject, jint, jdouble);
(JNIEnv *, jclass, jlong, jint, jdouble);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_int
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;II)I
* Signature: (JII)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1int
(JNIEnv *, jclass, jobject, jint, jint);
(JNIEnv *, jclass, jlong, jint, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_int64
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;IJ)I
* Signature: (JIJ)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1int64
(JNIEnv *, jclass, jobject, jint, jlong);
(JNIEnv *, jclass, jlong, jint, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_java_object
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;ILjava/lang/Object;)I
* Signature: (JILjava/lang/Object;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1java_1object
(JNIEnv *, jclass, jobject, jint, jobject);
(JNIEnv *, jclass, jlong, jint, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_null
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1null
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_parameter_count
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1parameter_1count
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_parameter_index
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;[B)I
* Signature: (J[B)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1parameter_1index
(JNIEnv *, jclass, jobject, jbyteArray);
(JNIEnv *, jclass, jlong, jbyteArray);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_parameter_name
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Ljava/lang/String;
* Signature: (JI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1parameter_1name
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_text
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I[BI)I
* Signature: (JI[BI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1text
(JNIEnv *, jclass, jobject, jint, jbyteArray, jint);
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_text16
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I[BI)I
* Signature: (JI[BI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1text16
(JNIEnv *, jclass, jobject, jint, jbyteArray, jint);
(JNIEnv *, jclass, jlong, jint, jbyteArray, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_zeroblob
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;II)I
* Signature: (JII)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1zeroblob
(JNIEnv *, jclass, jobject, jint, jint);
(JNIEnv *, jclass, jlong, jint, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_bind_zeroblob64
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;IJ)I
* Signature: (JIJ)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1bind_1zeroblob64
(JNIEnv *, jclass, jobject, jint, jlong);
(JNIEnv *, jclass, jlong, jint, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_blob_bytes
* Signature: (Lorg/sqlite/jni/sqlite3_blob;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1blob_1bytes
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_blob_close
* Signature: (Lorg/sqlite/jni/sqlite3_blob;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1blob_1close
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_blob_open
* Signature: (Lorg/sqlite/jni/sqlite3;Ljava/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/OutputPointer/sqlite3_blob;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1blob_1open
(JNIEnv *, jclass, jobject, jstring, jstring, jstring, jlong, jint, jobject);
(JNIEnv *, jclass, jlong, jstring, jstring, jstring, jlong, jint, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_blob_read
* Signature: (Lorg/sqlite/jni/sqlite3_blob;[BI)I
* Signature: (J[BI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1blob_1read
(JNIEnv *, jclass, jobject, jbyteArray, jint);
(JNIEnv *, jclass, jlong, jbyteArray, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_blob_reopen
* Signature: (Lorg/sqlite/jni/sqlite3_blob;J)I
* Signature: (JJ)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1blob_1reopen
(JNIEnv *, jclass, jobject, jlong);
(JNIEnv *, jclass, jlong, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_blob_write
* Signature: (Lorg/sqlite/jni/sqlite3_blob;[BI)I
* Signature: (J[BI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1blob_1write
(JNIEnv *, jclass, jobject, jbyteArray, jint);
(JNIEnv *, jclass, jlong, jbyteArray, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_busy_handler
* Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/BusyHandlerCallback;)I
* Signature: (JLorg/sqlite/jni/BusyHandlerCallback;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1busy_1handler
(JNIEnv *, jclass, jobject, jobject);
(JNIEnv *, jclass, jlong, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_busy_timeout
* Signature: (Lorg/sqlite/jni/sqlite3;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1busy_1timeout
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1030,42 +1030,42 @@ JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1cancel_1auto_
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_changes
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1changes
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_changes64
* Signature: (Lorg/sqlite/jni/sqlite3;)J
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1changes64
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_clear_bindings
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1clear_1bindings
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_close
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1close
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_close_v2
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1close_1v2
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1078,26 +1078,34 @@ JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1blo
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_bytes
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1bytes
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_bytes16
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1bytes16
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_count
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1count
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_decltype
* Signature: (JI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1decltype
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1126,34 +1134,34 @@ JNIEXPORT jlong JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1int64
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_name
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Ljava/lang/String;
* Signature: (JI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1name
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_database_name
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Ljava/lang/String;
* Signature: (JI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1database_1name
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_origin_name
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Ljava/lang/String;
* Signature: (JI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1origin_1name
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_table_name
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)Ljava/lang/String;
* Signature: (JI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1table_1name
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1174,10 +1182,10 @@ JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1text16
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_column_type
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1type
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1190,18 +1198,18 @@ JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1column_1value
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_collation_needed
* Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/CollationNeededCallback;)I
* Signature: (JLorg/sqlite/jni/CollationNeededCallback;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1collation_1needed
(JNIEnv *, jclass, jobject, jobject);
(JNIEnv *, jclass, jlong, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_commit_hook
* Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/CommitHookCallback;)Lorg/sqlite/jni/CommitHookCallback;
* Signature: (JLorg/sqlite/jni/CommitHookCallback;)Lorg/sqlite/jni/CommitHookCallback;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1commit_1hook
(JNIEnv *, jclass, jobject, jobject);
(JNIEnv *, jclass, jlong, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1278,10 +1286,10 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1create_1function
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_data_count
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1data_1count
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1347,6 +1355,14 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1errcode
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1errmsg16
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_error_offset
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1error_1offset
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_errstr
@ -1366,10 +1382,10 @@ JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1expanded_1sql
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_extended_errcode
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1extended_1errcode
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1382,10 +1398,10 @@ JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1extended_1res
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_get_autocommit
* Signature: (Lorg/sqlite/jni/sqlite3;)Z
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1get_1autocommit
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1395,21 +1411,13 @@ JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1get_1autocomm
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1get_1auxdata
(JNIEnv *, jclass, jobject, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_error_offset
* Signature: (Lorg/sqlite/jni/sqlite3;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1error_1offset
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_finalize
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1finalize
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1510,74 +1518,74 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1open_1v2
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_prepare
* Signature: (Lorg/sqlite/jni/sqlite3;[BILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
* Signature: (J[BILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1prepare
(JNIEnv *, jclass, jobject, jbyteArray, jint, jobject, jobject);
(JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_prepare_v2
* Signature: (Lorg/sqlite/jni/sqlite3;[BILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
* Signature: (J[BILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1prepare_1v2
(JNIEnv *, jclass, jobject, jbyteArray, jint, jobject, jobject);
(JNIEnv *, jclass, jlong, jbyteArray, jint, jobject, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_prepare_v3
* Signature: (Lorg/sqlite/jni/sqlite3;[BIILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
* Signature: (J[BIILorg/sqlite/jni/OutputPointer/sqlite3_stmt;Lorg/sqlite/jni/OutputPointer/Int32;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1prepare_1v3
(JNIEnv *, jclass, jobject, jbyteArray, jint, jint, jobject, jobject);
(JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jobject, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_preupdate_blobwrite
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1blobwrite
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_preupdate_count
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1count
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_preupdate_depth
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1depth
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_preupdate_hook
* Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/PreupdateHookCallback;)Lorg/sqlite/jni/PreupdateHookCallback;
* Signature: (JLorg/sqlite/jni/PreupdateHookCallback;)Lorg/sqlite/jni/PreupdateHookCallback;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1hook
(JNIEnv *, jclass, jobject, jobject);
(JNIEnv *, jclass, jlong, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_preupdate_new
* Signature: (Lorg/sqlite/jni/sqlite3;ILorg/sqlite/jni/OutputPointer/sqlite3_value;)I
* Signature: (JILorg/sqlite/jni/OutputPointer/sqlite3_value;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1new
(JNIEnv *, jclass, jobject, jint, jobject);
(JNIEnv *, jclass, jlong, jint, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_preupdate_old
* Signature: (Lorg/sqlite/jni/sqlite3;ILorg/sqlite/jni/OutputPointer/sqlite3_value;)I
* Signature: (JILorg/sqlite/jni/OutputPointer/sqlite3_value;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1old
(JNIEnv *, jclass, jobject, jint, jobject);
(JNIEnv *, jclass, jlong, jint, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1750,10 +1758,10 @@ JNIEXPORT void JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1result_1text64
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_rollback_hook
* Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/RollbackHookCallback;)Lorg/sqlite/jni/RollbackHookCallback;
* Signature: (JLorg/sqlite/jni/RollbackHookCallback;)Lorg/sqlite/jni/RollbackHookCallback;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1rollback_1hook
(JNIEnv *, jclass, jobject, jobject);
(JNIEnv *, jclass, jlong, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1838,26 +1846,26 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1step
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_stmt_explain
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;I)I
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1stmt_1explain
(JNIEnv *, jclass, jobject, jint);
(JNIEnv *, jclass, jlong, jint);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_stmt_isexplain
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1stmt_1isexplain
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_stmt_readonly
* Signature: (Lorg/sqlite/jni/sqlite3_stmt;)Z
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1stmt_1readonly
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1886,10 +1894,10 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1strlike
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_system_errno
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1system_1errno
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1910,18 +1918,18 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1threadsafe
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_total_changes
* Signature: (Lorg/sqlite/jni/sqlite3;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1total_1changes
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_total_changes64
* Signature: (Lorg/sqlite/jni/sqlite3;)J
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1total_1changes64
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -1942,146 +1950,146 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1txn_1state
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_update_hook
* Signature: (Lorg/sqlite/jni/sqlite3;Lorg/sqlite/jni/UpdateHookCallback;)Lorg/sqlite/jni/UpdateHookCallback;
* Signature: (JLorg/sqlite/jni/UpdateHookCallback;)Lorg/sqlite/jni/UpdateHookCallback;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1update_1hook
(JNIEnv *, jclass, jobject, jobject);
(JNIEnv *, jclass, jlong, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_blob
* Signature: (Lorg/sqlite/jni/sqlite3_value;)[B
* Signature: (J)[B
*/
JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1blob
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_bytes
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1bytes
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_bytes16
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1bytes16
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_double
* Signature: (Lorg/sqlite/jni/sqlite3_value;)D
* Signature: (J)D
*/
JNIEXPORT jdouble JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1double
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_dup
* Signature: (Lorg/sqlite/jni/sqlite3_value;)Lorg/sqlite/jni/sqlite3_value;
* Signature: (J)Lorg/sqlite/jni/sqlite3_value;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1dup
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_encoding
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1encoding
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_free
* Signature: (Lorg/sqlite/jni/sqlite3_value;)V
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1free
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_int
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1int
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_int64
* Signature: (Lorg/sqlite/jni/sqlite3_value;)J
*/
JNIEXPORT jlong JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1int64
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_java_object
* Signature: (Lorg/sqlite/jni/sqlite3_value;)Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1java_1object
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_text
* Signature: (Lorg/sqlite/jni/sqlite3_value;)[B
*/
JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1text
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_text16
* Signature: (Lorg/sqlite/jni/sqlite3_value;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1text16
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_type
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1type
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_numeric_type
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1numeric_1type
(JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_nochange
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1nochange
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_frombind
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1frombind
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_int
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1int
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_int64
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1int64
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_java_object
* Signature: (J)Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1java_1object
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_nochange
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1nochange
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_numeric_type
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1numeric_1type
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_subtype
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1subtype
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_text
* Signature: (J)[B
*/
JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1text
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_text16
* Signature: (J)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1text16
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_type
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1type
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -2091,6 +2099,35 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1subtype
JNIEXPORT void JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1jni_1internal_1details
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_sqlite_jni_SQLTester */
#ifndef _Included_org_sqlite_jni_SQLTester
#define _Included_org_sqlite_jni_SQLTester
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_sqlite_jni_SQLTester
* Method: strglob
* Signature: ([B[B)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLTester_strglob
(JNIEnv *, jclass, jbyteArray, jbyteArray);
/*
* Class: org_sqlite_jni_SQLTester
* Method: installCustomExtensions
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_sqlite_jni_SQLTester_installCustomExtensions
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
@ -2320,32 +2357,3 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_fts5_fts5_1tokenizer_xTokenize
}
#endif
#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_sqlite_jni_tester_SQLTester */
#ifndef _Included_org_sqlite_jni_tester_SQLTester
#define _Included_org_sqlite_jni_tester_SQLTester
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_sqlite_jni_tester_SQLTester
* Method: strglob
* Signature: ([B[B)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_tester_SQLTester_strglob
(JNIEnv *, jclass, jbyteArray, jbyteArray);
/*
* Class: org_sqlite_jni_tester_SQLTester
* Method: installCustomExtensions
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_sqlite_jni_tester_SQLTester_installCustomExtensions
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -29,5 +29,18 @@ package org.sqlite.jni;
public class NativePointerHolder<ContextType> {
//! Only set from JNI, where access permissions don't matter.
private volatile long nativePointer = 0;
/**
For use ONLY by package-level APIs which act as proxies for
close/finalize operations. Such ops must call this to zero out
the pointer so that this object is not carrying a stale
pointer. This function returns the prior value of the pointer and
sets it to 0.
*/
final long clearNativePointer() {
final long rv = nativePointer;
nativePointer= 0;
return rv;
}
public final long getNativePointer(){ return nativePointer; }
}

View File

@ -12,16 +12,13 @@
** This file contains the main application entry pointer for the
** SQLTester framework.
*/
package org.sqlite.jni.tester;
package org.sqlite.jni;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.nio.charset.StandardCharsets;
import java.util.regex.*;
import org.sqlite.jni.*;
import static org.sqlite.jni.SQLite3Jni.*;
import org.sqlite.jni.sqlite3;
/**
Modes for how to escape (or not) column values and names from
@ -150,12 +147,15 @@ class Outer {
}
/**
This class provides an application which aims to implement the
<p>This class provides an application which aims to implement the
rudimentary SQL-driven test tool described in the accompanying
{@code test-script-interpreter.md}.
<p>This is a work in progress.
<p>This class is an internal testing tool, not part of the public
interface but is (A) in the same package as the library because
access permissions require it to be so and (B) the JDK8 javadoc
offers no way to filter individual classes out of the doc
generation process (it can only exclude packages, but see (A)).
<p>An instance of this application provides a core set of services
which TestScript instances use for processing testing logic.

File diff suppressed because it is too large Load Diff

View File

@ -1283,7 +1283,7 @@ public class Tester1 implements Runnable {
}
Exception err = null;
try {
Class t = Class.forName("org.sqlite.jni.fts5.TesterFts5");
Class t = Class.forName("org.sqlite.jni.TesterFts5");
java.lang.reflect.Constructor ctor = t.getConstructor();
ctor.setAccessible(true);
final long timeStart = System.currentTimeMillis();
@ -1515,16 +1515,16 @@ public class Tester1 implements Runnable {
}
private void testBackup(){
final sqlite3 db1 = createNewDb();
final sqlite3 db2 = createNewDb();
final sqlite3 dbDest = createNewDb();
execSql(db1, new String[]{
try (sqlite3 dbSrc = createNewDb()) {
execSql(dbSrc, new String[]{
"pragma page_size=512; VACUUM;",
"create table t(a);",
"insert into t(a) values(1),(2),(3);"
});
affirm( null==sqlite3_backup_init(db1,"main",db1,"main") );
final sqlite3_backup b = sqlite3_backup_init(db2,"main",db1,"main");
affirm( null==sqlite3_backup_init(dbSrc,"main",dbSrc,"main") );
try (sqlite3_backup b = sqlite3_backup_init(dbDest,"main",dbSrc,"main")) {
affirm( null!=b );
affirm( b.getNativePointer()!=0 );
int rc;
@ -1535,15 +1535,14 @@ public class Tester1 implements Runnable {
rc = sqlite3_backup_finish(b);
affirm( 0==rc );
affirm( b.getNativePointer()==0 );
}
}
sqlite3_close_v2(db1);
final sqlite3_stmt stmt = prepare(db2,"SELECT sum(a) from t");
try (sqlite3_stmt stmt = prepare(dbDest,"SELECT sum(a) from t")) {
sqlite3_step(stmt);
affirm( sqlite3_column_int(stmt,0) == 6 );
sqlite3_finalize(stmt);
sqlite3_close_v2(db2);
}
sqlite3_close_v2(dbDest);
}
private void testRandomness(){

View File

@ -11,10 +11,11 @@
*************************************************************************
** This file contains a set of tests for the sqlite3 JNI bindings.
*/
package org.sqlite.jni.fts5;
package org.sqlite.jni;
import static org.sqlite.jni.SQLite3Jni.*;
import static org.sqlite.jni.Tester1.*;
import org.sqlite.jni.*;
import org.sqlite.jni.fts5.*;
import java.util.*;

View File

@ -1,3 +1,16 @@
/*
** 2023-09-27
**
** 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 houses the Canonical annotaion for the sqlite3 C API.
*/
package org.sqlite.jni.annotation;
/**

View File

@ -1,3 +1,16 @@
/*
** 2023-09-27
**
** 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 houses the NotNull annotaion for the sqlite3 C API.
*/
package org.sqlite.jni.annotation;
/**
@ -20,6 +33,11 @@ package org.sqlite.jni.annotation;
any parameter marked with this annoation specifically invokes
undefined behavior.</p>
<p>Passing 0 (i.e. C NULL) or a negative value for any long-type
parameter marked with this annoation specifically invokes undefined
behavior. Such values are treated as C pointers in the JNI
layer.</p>
<p>Note that the C-style API does not throw any exceptions on its
own because it has a no-throw policy in order to retain its C-style
semantics, but it may trigger NullPointerExceptions (or similar) if
@ -29,10 +47,11 @@ package org.sqlite.jni.annotation;
programmatically ensure that NotNull is conformed to in client
code.</p>
<p>This annotation is solely for the use by the classes in this
package but is made public so that javadoc will link to it from the
annotated functions. It is not part of the public API and
client-level code must not rely on it.</p>
<p>This annotation is solely for the use by the classes in the
org.sqlite package and subpackages, but is made public so that
javadoc will link to it from the annotated functions. It is not
part of the public API and client-level code must not rely on
it.</p>
*/
@java.lang.annotation.Documented
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE)

View File

@ -1,3 +1,16 @@
/*
** 2023-09-27
**
** 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 houses the Nullable annotaion for the sqlite3 C API.
*/
package org.sqlite.jni.annotation;
/**

View File

@ -1,4 +1,17 @@
/*
** 2023-09-27
**
** 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 package houses annotations specific a JNI binding to the SQLite3 C API.
This package houses annotations specific to the JNI bindings of the
SQLite3 C API.
*/
package org.sqlite.jni.annotation;

View File

@ -39,10 +39,10 @@ public final class sqlite3 extends NativePointerHolder<sqlite3>
@Override protected void finalize(){
//System.out.println(this+".finalize()");
SQLite3Jni.sqlite3_close_v2(this);
SQLite3Jni.sqlite3_close_v2(this.clearNativePointer());
}
@Override public void close(){
SQLite3Jni.sqlite3_close_v2(this);
SQLite3Jni.sqlite3_close_v2(this.clearNativePointer());
}
}

View File

@ -19,7 +19,13 @@ package org.sqlite.jni;
simply provide a type-safe way to communicate it between Java and C
via JNI.
*/
public final class sqlite3_backup extends NativePointerHolder<sqlite3_backup> {
public final class sqlite3_backup extends NativePointerHolder<sqlite3_backup>
implements AutoCloseable {
// Only invoked from JNI.
private sqlite3_backup(){}
@Override public void close(){
SQLite3Jni.sqlite3_backup_finish(this);
}
}

View File

@ -19,7 +19,13 @@ package org.sqlite.jni;
simply provide a type-safe way to communicate it between Java and C
via JNI.
*/
public final class sqlite3_blob extends NativePointerHolder<sqlite3_blob> {
public final class sqlite3_blob extends NativePointerHolder<sqlite3_blob>
implements AutoCloseable {
// Only invoked from JNI.
private sqlite3_blob(){}
@Override public void close(){
SQLite3Jni.sqlite3_blob_close(this.clearNativePointer());
}
}

View File

@ -26,10 +26,10 @@ public final class sqlite3_stmt extends NativePointerHolder<sqlite3_stmt>
//For as-yet-unknown reasons, this triggers a JVM crash.
//@Override protected void finalize(){
// SQLite3Jni.sqlite3_finalize(this);
// SQLite3Jni.sqlite3_finalize(this.clearNativePointer());
//}
@Override public void close(){
SQLite3Jni.sqlite3_finalize(this);
SQLite3Jni.sqlite3_finalize(this.clearNativePointer());
}
}

View File

@ -1,5 +1,5 @@
C Add\stest\scase\sto\sensure\sthe\sassert()\sremoved\sby\s[f090af77]\sno\slonger\sfails.
D 2023-09-29T15:56:40.552
C Merge\sin\sand\sclose\sjni-ptr-passing\sbranch.\sThe\sremaining\spointer-passing\sadaptation\scan\sbe\sdone\sincrementally\swithout\saffecting\sthe\sinterface.
D 2023-09-30T10:37:36.161
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -235,11 +235,11 @@ 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 42e00052401b6dd41c0cdd53b31450606ea37486283abdb038dff9be74bff71e
F ext/jni/GNUmakefile af9aec8c540167ba8f9da23f86f74df0ad96e72431fd216b24e722b465e86c12
F ext/jni/README.md 9fceaeb17cecdc5d699dfc83c0cbc3a03fdb3b86bf676381894166c73375ee75
F ext/jni/jar-dist.make 030aaa4ae71dd86e4ec5e7c1e6cd86f9dfa47c4592c070d2e35157e42498e1fa
F ext/jni/src/c/sqlite3-jni.c 2932d4cae2b70a469a73f4a2cefa2701291e420155044d2c9e79137b65e237a1
F ext/jni/src/c/sqlite3-jni.h 5e093f65c01050e6fe0988f559145f3b61a15c734aa3100a2b98d2a4b9d4c57a
F ext/jni/src/c/sqlite3-jni.c d1fa417c9ee7db061f86e928834e1086172ef7199d2324b823136879b4c1a187
F ext/jni/src/c/sqlite3-jni.h f5bdb7bb7799b89277ac84d4b6e37719398a9b9c6b3ab62cc0583699625e71ea
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 e6135be32f12bf140bffa39be7fd1a45ad83b2661ed49c08dbde04c8485feb38
@ -251,7 +251,7 @@ F ext/jni/src/org/sqlite/jni/CollationNeededCallback.java 07df5fa161a0b811542952
F ext/jni/src/org/sqlite/jni/CommitHookCallback.java 77cf8bb4f5548113e9792978f3f8a454614f420fa0ad73939421cbff4e7776f2
F ext/jni/src/org/sqlite/jni/ConfigLogCallback.java 636ed6b89ed03f15bc2a6f6f47bf7853b8328e5a8269e52e80630708efa703a6
F ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java e3656909eab7ed0f7e457c5b82df160ca22dd5e954c0a306ec1fca61b0d266b4
F ext/jni/src/org/sqlite/jni/NativePointerHolder.java 564087036449a16df148dcf0a067408bd251170bf23286c655f46b5f973e8b2d
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 878ed9cc8000def1a4e6d7113d52bba6fce0aa6733b4eb216d68dfbe096776ac
F ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java eccaed8dc9c6289f07ef3fc109891c6be1e7cc6c88723d90174b68706fc21cda
@ -259,37 +259,37 @@ F ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java 7b9ff2218129ece98ba60c
F ext/jni/src/org/sqlite/jni/ResultCode.java ba701f20213a5f259e94cfbfdd36eb7ac7ce7797f2c6c7fca2004ff12ce20f86
F ext/jni/src/org/sqlite/jni/RollbackHookCallback.java d12352c0e22840de484ffa9b11ed5058bb0daca2e9f218055d3c54c947a273c4
F ext/jni/src/org/sqlite/jni/SQLFunction.java 544a875d33fd160467d82e2397ac33157b29971d715a821a4fad3c899113ee8c
F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 73571d69420a72fa656097925acfbc3f670bb72685882094565303dcdfed71b5
F ext/jni/src/org/sqlite/jni/SQLTester.java e7ba02a72be4205c479d08cbc48cd8f3ac5b924eb6b36a3f5a676a67dcdb8af3 w ext/jni/src/org/sqlite/jni/tester/SQLTester.java
F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 65ff9e2426c35763139042ffb59ca565802ca668fe0c5c69334bbdf32a130d59
F ext/jni/src/org/sqlite/jni/ScalarFunction.java 6d387bb499fbe3bc13c53315335233dbf6a0c711e8fa7c521683219b041c614c
F ext/jni/src/org/sqlite/jni/TableColumnMetadata.java 54511b4297fa28dcb3f49b24035e34ced10e3fd44fd0e458e784f4d6b0096dab
F ext/jni/src/org/sqlite/jni/Tester1.java 25be176398cf08cb9c0879ba33fd866cb8f579729dd4d44a4065421e1b899af4
F ext/jni/src/org/sqlite/jni/Tester1.java ef0a6ee3b4e08ebd99010ca8196214bac902de0ea66f753a5cf581888f9a4211
F ext/jni/src/org/sqlite/jni/TesterFts5.java 0995c5ca1da36b3b703c1c04132b2ee8edd16483be5c422ae378220a4817adbf w ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java
F ext/jni/src/org/sqlite/jni/TraceV2Callback.java beb0b064c1a5f8bfe585a324ed39a4e33edbe379a3fc60f1401661620d3ca7c0
F ext/jni/src/org/sqlite/jni/UpdateHookCallback.java 8376f4a931f2d5612b295c003c9515ba933ee76d8f95610e89c339727376e36c
F ext/jni/src/org/sqlite/jni/WindowFunction.java 488980f4dbb6bdd7067d6cb9c43e4075475e51c54d9b74a5834422654b126246
F ext/jni/src/org/sqlite/jni/XDestroyCallback.java 50c5ca124ef6c6b735a7e136e7a23a557be367e61b56d4aab5777a614ab46cc2
F ext/jni/src/org/sqlite/jni/annotation/Canonical.java 2767daa5b3893b96729db80a0f8234d379d266d1b2c21400a057864b538a0ea5
F ext/jni/src/org/sqlite/jni/annotation/NotNull.java d9b32956cb9fb11d1f8a562e5df70d0599820265285120c63858294dbe2b7711
F ext/jni/src/org/sqlite/jni/annotation/Nullable.java 6f962a98c9a5c6e9d21c50ae8716b16bdfdc934a191608cbb7e12ea588ddb6af
F ext/jni/src/org/sqlite/jni/annotation/package-info.java f66bfb621c6494e67c03ed38a9e26a3bd6af99b9f9f6ef79556bcec30a025a22
F ext/jni/src/org/sqlite/jni/annotation/Canonical.java 44ea75a3c6c39513be9052eaa845b258a953f6af59e61002d715363fa52a7175
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/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 e2680721bd83129d0d650ba845b44d7634a9489a90a56c5ce3c54508bf470743
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/TesterFts5.java 81ec50bb4c5a285177ea8bebe906792886fc733676d0eade76b18fac56057623
F ext/jni/src/org/sqlite/jni/fts5/XTokenizeCallback.java 1efd1220ea328a32f2d2a1b16c735864159e929480f71daad4de9d5944839167
F ext/jni/src/org/sqlite/jni/fts5/fts5_api.java e2ad9bc06a9d307e0a6221c11645783898906455a92b1f7d5ec9b9ff1af1b8ea
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 a3946db2504de747a1993c4f6e8ce604bec5a8e5a134b292c3b07527bc321a99
F ext/jni/src/org/sqlite/jni/sqlite3.java 5e56a799ced58ea69e8bcad20c29a61fce32f21a7f4fb3e2702337cf8aa1a06e
F ext/jni/src/org/sqlite/jni/sqlite3_backup.java d0bb06dd6225e76999ff6b7ab20f2643b1c4d4167431b3a93ea41943e41f094b
F ext/jni/src/org/sqlite/jni/sqlite3_blob.java f28a30134f2e524eb7d5ab87f57f86c90140341a6e8369ee54509ac8bb96fa82
F ext/jni/src/org/sqlite/jni/sqlite3.java 5cd95c182a38b874ad973b3c16a70a69786fe82a6793abf147639803dec7ecac
F ext/jni/src/org/sqlite/jni/sqlite3_backup.java 12182124c4d4928d78db5a07ea285f1d7af04c7a148f0759a1972d5bfa87311e
F ext/jni/src/org/sqlite/jni/sqlite3_blob.java fc631ad52feea6e3d1d62b0d0e769ac107c01bc0ddd20eb512aff07b428cda6d
F ext/jni/src/org/sqlite/jni/sqlite3_context.java 66ca95ce904044263a4aff684abe262d56f73e6b06bca6cf650761d79d7779ad
F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java 36ecee9bdde2e70c7276d1c22b48fd9c40a77412e8e0694e9c09910997d6fb4f
F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java cf7f076d8b0f2a23faebbd64e12e8b3dd1977378ca828245d186f1b98458127d
F ext/jni/src/org/sqlite/jni/sqlite3_value.java 3d1d4903e267bc0bc81d57d21f5e85978eff389a1a6ed46726dbe75f85e6914a
F ext/jni/src/org/sqlite/jni/tester/SQLTester.java 9892797db57c6e01f0c1601b5866474b6c046f0fd6c5b64f411e5815c941040e
F ext/jni/src/org/sqlite/jni/tester/test-script-interpreter.md f9f25126127045d051e918fe59004a1485311c50a13edbf18c79a6ff9160030e
F ext/jni/src/org/sqlite/jni/test-script-interpreter.md f9f25126127045d051e918fe59004a1485311c50a13edbf18c79a6ff9160030e w ext/jni/src/org/sqlite/jni/tester/test-script-interpreter.md
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
@ -2122,8 +2122,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 f090af775f6d2ce8b50850f5c9e33546bcb9cff5467d99ca210530cb7ca83d5b
R f51ac3149d0d82cdeb16ecb943c18226
U dan
Z 47eb0b07d7471e6df082d31971a82a19
P 615ab71761754b072439f92e73fdb98c916b820937bcca8904f4be34936d5f9c ec82f7251acab7df40755ef5f456f36fe49b59e63a20be59bd610fc4280ba8cd
R 847945c3f257f5fdca3b6859cd8a460f
U stephan
Z f5f86ba28a644ae448899dff21eb5c68
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
615ab71761754b072439f92e73fdb98c916b820937bcca8904f4be34936d5f9c
7927c42410ba0d5fc8e6e08caaa5cbaaeb359869f17d1afaa082f1aa47fdb2fc