1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-05 15:55:57 +03:00

Eliminate a superfluous JNI-internal middle-man class.

FossilOrigin-Name: daede0f801f59d6501a863c4688e4635b34171e98b56b8ab4432c779113f1997
This commit is contained in:
stephan
2023-08-26 21:13:57 +00:00
parent 506a8b52f3
commit 0deaea218d
3 changed files with 15 additions and 43 deletions

View File

@@ -1518,44 +1518,17 @@ static void CollationState_xDestroy(void *pArg){
S3JniMutex_S3JniDb_leave;
}
/*
** State for sqlite3_result_java_object() and
** sqlite3_value_java_object().
**
** TODO: this middle-man struct is no longer necessary. Conider
** removing it and passing around jObj itself instead. OTOH, we might
** find more state to pack in here.
*/
typedef struct {
jobject jObj;
} ResultJavaVal;
/* For use with sqlite3_result/value_pointer() */
#define ResultJavaValuePtrStr "org.sqlite.jni.ResultJavaVal"
/*
** Allocate a new ResultJavaVal and assign it a new global ref of
** jObj. Caller owns the returned object and must eventually pass it
** to ResultJavaVal_finalizer().
** If v is not NULL, it must be a jobject global reference. Its
** reference is relinquished and v is freed.
*/
static ResultJavaVal * ResultJavaVal_alloc(JNIEnv * const env, jobject jObj){
ResultJavaVal * const rv = s3jni_malloc(env, sizeof(ResultJavaVal));
if( rv ){
rv->jObj = jObj ? S3JniRefGlobal(jObj) : 0;
}
return rv;
}
/*
** If v is not NULL, it must point to a a ResultJavaVal object. Its
** object reference is relinquished and v is freed.
*/
static void ResultJavaVal_finalizer(void *v){
static void ResultJavaValue_finalizer(void *v){
if( v ){
ResultJavaVal * const rv = (ResultJavaVal*)v;
S3JniDeclLocal_env;
S3JniUnrefGlobal(rv->jObj);
sqlite3_free(rv);
S3JniUnrefGlobal((jobject)v);
}
}
@@ -3585,10 +3558,10 @@ S3JniApi(sqlite3_result_java_object(),void,1result_1java_1object)(
JniArgsEnvClass, jobject jpCx, jobject v
){
if( v ){
ResultJavaVal * const rjv = ResultJavaVal_alloc(env, v);
jobject const rjv = S3JniRefGlobal(v);
if( rjv ){
sqlite3_result_pointer(PtrGet_sqlite3_context(jpCx), rjv,
ResultJavaValuePtrStr, ResultJavaVal_finalizer);
ResultJavaValuePtrStr, ResultJavaValue_finalizer);
}else{
sqlite3_result_error_nomem(PtrGet_sqlite3_context(jpCx));
}
@@ -3974,9 +3947,8 @@ S3JniApi(sqlite3_value_int64(),jlong,1value_1int64)(
S3JniApi(sqlite3_value_java_object(),jobject,1value_1java_1object)(
JniArgsEnvClass, jobject jpSVal
){
ResultJavaVal * const rv = sqlite3_value_pointer(PtrGet_sqlite3_value(jpSVal),
return sqlite3_value_pointer(PtrGet_sqlite3_value(jpSVal),
ResultJavaValuePtrStr);
return rv ? rv->jObj : NULL;
}
S3JniApi(sqlite3_value_text_utf8(),jbyteArray,1value_1text_1utf8)(

View File

@@ -1,5 +1,5 @@
C Whether\sor\snot\sOOM\sis\salways\sfatal\sin\sJNI\sis\snow\sa\scompile-time\soption.
D 2023-08-26T21:02:50.002
C Eliminate\sa\ssuperfluous\sJNI-internal\smiddle-man\sclass.
D 2023-08-26T21:13:57.847
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -236,7 +236,7 @@ F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a3
F ext/jni/GNUmakefile 4e60cdca419ac6783719da98379480b6f04d5d1b5fa1408c46fcb0c32565c571
F ext/jni/README.md 1332b1fa27918bd5d9ca2d0d4f3ac3a6ab86b9e3699dc5bfe32904a027f3d2a9
F ext/jni/jar-dist.make 030aaa4ae71dd86e4ec5e7c1e6cd86f9dfa47c4592c070d2e35157e42498e1fa
F ext/jni/src/c/sqlite3-jni.c d6665b309171af316f83a422b0a1c360f760493d9d8cfe239c8f38b639daac47
F ext/jni/src/c/sqlite3-jni.c b5777fb1da4cd81bc91a051ebfa59ba28722536c4c98560350a7c219f9da265e
F ext/jni/src/c/sqlite3-jni.h a410d05ca47a676b75ff7b8980e75ad604ea15f3c29965f88989703abc2eeaf6
F ext/jni/src/org/sqlite/jni/AggregateFunction.java 0a5a74bea5ee12a99407e9432d0ca393525af912c2b0ca55c7ee5dbd019c00ef
F ext/jni/src/org/sqlite/jni/AuthorizerCallback.java c374bb76409cce7a0bdba94877706b59ac6127fa5d9e6af3e8058c99ce99c030
@@ -2103,8 +2103,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 4252f56f3d8574b7b43306440726daf3b5f5500d5d9105784b2f82753e7c71dd
R 73a65c0a564c2b6325f39c30c9023371
P 320a34c080d8bc1feae1578697923dfa7c4144b78de36f704c24cc4a4ce9d535
R bd8a050119f034bd484ec7a8a853653c
U stephan
Z c1a9d88eb5b30bcb5f8055b2c7e2b244
Z 713c3c8622f9cf1b7dfe5fb5695c9634
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
320a34c080d8bc1feae1578697923dfa7c4144b78de36f704c24cc4a4ce9d535
daede0f801f59d6501a863c4688e4635b34171e98b56b8ab4432c779113f1997