1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Adapted the JNI bindings for the sqlite3_value_...() and (pre)update hook APIs to the new pointer-passing mechanism.

FossilOrigin-Name: 4182f0275d5d65e04a130eeef4d44642a5ffeeb4b84430d240ea2605345f1404
This commit is contained in:
stephan
2023-09-28 11:19:37 +00:00
parent 5d1448d08a
commit 0dabcd139d
5 changed files with 156 additions and 90 deletions

View File

@ -3792,8 +3792,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_c(S3JniLongPtr_sqlite3(jpDb));
jclass klazz;
jobject pOld = 0;
jmethodID xCallback;
@ -3866,20 +3866,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;
@ -3903,15 +3903,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);
}
@ -4619,16 +4619,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);
@ -4640,48 +4640,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;
@ -4690,9 +4690,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;
@ -4700,9 +4700,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);

View File

@ -1566,26 +1566,26 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1preupdate_1depth
/*
* 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
@ -1950,18 +1950,18 @@ 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
@ -1982,18 +1982,18 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1bytes16
/*
* 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
@ -2006,10 +2006,10 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1encoding
/*
* 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);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -2022,26 +2022,26 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1frombind
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_int
* Signature: (Lorg/sqlite/jni/sqlite3_value;)I
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1int
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_int64
* Signature: (Lorg/sqlite/jni/sqlite3_value;)J
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1int64
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_java_object
* Signature: (Lorg/sqlite/jni/sqlite3_value;)Ljava/lang/Object;
* Signature: (J)Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1java_1object
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
@ -2070,18 +2070,18 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1subtype
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_text
* Signature: (Lorg/sqlite/jni/sqlite3_value;)[B
* Signature: (J)[B
*/
JNIEXPORT jbyteArray JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1text
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_value_text16
* Signature: (Lorg/sqlite/jni/sqlite3_value;)Ljava/lang/String;
* Signature: (J)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1value_1text16
(JNIEnv *, jclass, jobject);
(JNIEnv *, jclass, jlong);
/*
* Class: org_sqlite_jni_SQLite3Jni

View File

@ -1372,15 +1372,26 @@ public final class SQLite3Jni {
return sqlite3_preupdate_depth(db.getNativePointer());
}
@Canonical
private static native PreupdateHookCallback sqlite3_preupdate_hook(
@NotNull long ptrToDb, @Nullable PreupdateHookCallback hook
);
/**
If the C API was built with SQLITE_ENABLE_PREUPDATE_HOOK defined, this
acts as a proxy for C's sqlite3_preupdate_hook(), else it returns null
with no side effects.
*/
@Canonical
public static native PreupdateHookCallback sqlite3_preupdate_hook(
public static PreupdateHookCallback sqlite3_preupdate_hook(
@NotNull sqlite3 db, @Nullable PreupdateHookCallback hook
);
){
return sqlite3_preupdate_hook(db.getNativePointer(), hook);
}
@Canonical
private static native int sqlite3_preupdate_new(@NotNull long ptrToDb, int col,
@NotNull OutputPointer.sqlite3_value out);
/**
If the C API was built with SQLITE_ENABLE_PREUPDATE_HOOK defined,
@ -1388,8 +1399,10 @@ public final class SQLite3Jni {
returns SQLITE_MISUSE with no side effects.
*/
@Canonical
public static native int sqlite3_preupdate_new(@NotNull sqlite3 db, int col,
@NotNull OutputPointer.sqlite3_value out);
public static int sqlite3_preupdate_new(@NotNull sqlite3 db, int col,
@NotNull OutputPointer.sqlite3_value out){
return sqlite3_preupdate_new(db.getNativePointer(), col, out);
}
/**
Convenience wrapper for the 3-arg sqlite3_preupdate_new() which returns
@ -1397,18 +1410,24 @@ public final class SQLite3Jni {
*/
public static sqlite3_value sqlite3_preupdate_new(@NotNull sqlite3 db, int col){
final OutputPointer.sqlite3_value out = new OutputPointer.sqlite3_value();
sqlite3_preupdate_new(db, col, out);
sqlite3_preupdate_new(db.getNativePointer(), col, out);
return out.take();
}
@Canonical
private static native int sqlite3_preupdate_old(@NotNull long ptrToDb, int col,
@NotNull OutputPointer.sqlite3_value out);
/**
If the C API was built with SQLITE_ENABLE_PREUPDATE_HOOK defined,
this acts as a proxy for C's sqlite3_preupdate_old(), else it
returns SQLITE_MISUSE with no side effects.
*/
@Canonical
public static native int sqlite3_preupdate_old(@NotNull sqlite3 db, int col,
@NotNull OutputPointer.sqlite3_value out);
public static int sqlite3_preupdate_old(@NotNull sqlite3 db, int col,
@NotNull OutputPointer.sqlite3_value out){
return sqlite3_preupdate_old(db.getNativePointer(), col, out);
}
/**
Convenience wrapper for the 3-arg sqlite3_preupdate_old() which returns
@ -1416,7 +1435,7 @@ public final class SQLite3Jni {
*/
public static sqlite3_value sqlite3_preupdate_old(@NotNull sqlite3 db, int col){
final OutputPointer.sqlite3_value out = new OutputPointer.sqlite3_value();
sqlite3_preupdate_old(db, col, out);
sqlite3_preupdate_old(db.getNativePointer(), col, out);
return out.take();
}
@ -1966,10 +1985,17 @@ public final class SQLite3Jni {
);
@Canonical
public static native UpdateHookCallback sqlite3_update_hook(
@NotNull sqlite3 db, @Nullable UpdateHookCallback hook
private static native UpdateHookCallback sqlite3_update_hook(
@NotNull long ptrToDb, @Nullable UpdateHookCallback hook
);
@Canonical
public static UpdateHookCallback sqlite3_update_hook(
@NotNull sqlite3 db, @Nullable UpdateHookCallback hook
){
return sqlite3_update_hook(db.getNativePointer(), hook);
}
/*
Note that:
@ -1981,7 +2007,12 @@ public final class SQLite3Jni {
*/
@Canonical
public static native byte[] sqlite3_value_blob(@NotNull sqlite3_value v);
private static native byte[] sqlite3_value_blob(@NotNull long ptrToValue);
@Canonical
public static byte[] sqlite3_value_blob(@NotNull sqlite3_value v){
return sqlite3_value_blob(v.getNativePointer());
}
@Canonical
private static native int sqlite3_value_bytes(@NotNull long ptrToValue);
@ -2000,12 +2031,20 @@ public final class SQLite3Jni {
}
@Canonical
public static native double sqlite3_value_double(@NotNull sqlite3_value v);
private static native double sqlite3_value_double(@NotNull long ptrToValue);
@Canonical
public static native sqlite3_value sqlite3_value_dup(
@NotNull sqlite3_value v
);
public static double sqlite3_value_double(@NotNull sqlite3_value v){
return sqlite3_value_double(v.getNativePointer());
}
@Canonical
private static native sqlite3_value sqlite3_value_dup(@NotNull long ptrToValue);
@Canonical
public static sqlite3_value sqlite3_value_dup(@NotNull sqlite3_value v){
return sqlite3_value_dup(v.getNativePointer());
}
@Canonical
private static native int sqlite3_value_encoding(@NotNull long ptrToValue);
@ -2016,7 +2055,12 @@ public final class SQLite3Jni {
}
@Canonical
public static native void sqlite3_value_free(@Nullable sqlite3_value v);
private static native void sqlite3_value_free(@Nullable long ptrToValue);
@Canonical
public static void sqlite3_value_free(@Nullable sqlite3_value v){
sqlite3_value_free(v.getNativePointer());
}
@Canonical
private static native int sqlite3_value_frombind(@NotNull long ptrToValue);
@ -2027,10 +2071,22 @@ public final class SQLite3Jni {
}
@Canonical
public static native int sqlite3_value_int(@NotNull sqlite3_value v);
private static native int sqlite3_value_int(@NotNull long ptrToValue);
@Canonical
public static native long sqlite3_value_int64(@NotNull sqlite3_value v);
public static int sqlite3_value_int(@NotNull sqlite3_value v){
return sqlite3_value_int(v.getNativePointer());
}
@Canonical
private static native long sqlite3_value_int64(@NotNull long ptrToValue);
@Canonical
public static long sqlite3_value_int64(@NotNull sqlite3_value v){
return sqlite3_value_int64(v.getNativePointer());
}
private static native Object sqlite3_value_java_object(@NotNull long ptrToValue);
/**
If the given value was set using {@link
@ -2040,9 +2096,9 @@ public final class SQLite3Jni {
<p>It is up to the caller to inspect the object to determine its
type, and cast it if necessary.
*/
public static native Object sqlite3_value_java_object(
@NotNull sqlite3_value v
);
public static Object sqlite3_value_java_object(@NotNull sqlite3_value v){
return sqlite3_value_java_object(v.getNativePointer());
}
/**
A variant of sqlite3_value_java_object() which returns the
@ -2080,6 +2136,9 @@ public final class SQLite3Jni {
return sqlite3_value_subtype(v.getNativePointer());
}
@Canonical
private static native byte[] sqlite3_value_text(@NotNull long ptrToValue);
/**
Functions identially to the C API, and this note is just to
stress that the returned bytes are encoded as UTF-8. It returns
@ -2087,10 +2146,17 @@ public final class SQLite3Jni {
or on allocation error.
*/
@Canonical
public static native byte[] sqlite3_value_text(@NotNull sqlite3_value v);
public static byte[] sqlite3_value_text(@NotNull sqlite3_value v){
return sqlite3_value_text(v.getNativePointer());
}
@Canonical
public static native String sqlite3_value_text16(@NotNull sqlite3_value v);
private static native String sqlite3_value_text16(@NotNull long ptrToValue);
@Canonical
public static String sqlite3_value_text16(@NotNull sqlite3_value v){
return sqlite3_value_text16(v.getNativePointer());
}
@Canonical
private static native int sqlite3_value_type(@NotNull long ptrToValue);