]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove unnecessary jclass-type struct members.
authorstephan <stephan@noemail.net>
Wed, 23 Aug 2023 17:15:48 +0000 (17:15 +0000)
committerstephan <stephan@noemail.net>
Wed, 23 Aug 2023 17:15:48 +0000 (17:15 +0000)
FossilOrigin-Name: d67255f7251cc5d1d27d77d4c84ff216e2da71202db989718189a6b4beff1cd0

ext/jni/src/c/sqlite3-jni.c
manifest
manifest.uuid

index 93c5d5f1d2dbaf9e0969a4a6936bd833a989dc56..494e64a3f665a31dda63cc47f83d92f4eeaa94da 100644 (file)
@@ -356,7 +356,7 @@ struct S3JniNphClass {
                             ** NativePointerHolder subclass represented by
                             ** zClassName */;
   volatile jmethodID midCtor /* klazz's no-arg constructor. Used by
-                             **  new_NativePointerHolder_object(). */;
+                             ** new_NativePointerHolder_object(). */;
   volatile jfieldID fidValue /* NativePointerHolder.nativePointer or
                              ** OutputPointer.T.value */;
   volatile jfieldID fidAggCtx /* sqlite3_context::aggregateContext. Used only
@@ -369,12 +369,6 @@ struct S3JniHook{
   jobject jObj            /* global ref to Java instance */;
   jmethodID midCallback   /* callback method. Signature depends on
                           ** jObj's type */;
-  jclass klazz            /* global ref to jObj's class. Only needed
-                          ** by hooks which have an xDestroy() method.
-                          ** We can probably eliminate this and simply
-                          ** do the class lookup at the same
-                          ** (deferred) time we do the xDestroy()
-                          ** lookup. */;
 };
 
 /*
@@ -533,7 +527,6 @@ struct S3JniGlobalType {
     volatile jobject jFtsExt /* Global ref to Java singleton for the
                                 Fts5ExtensionApi instance. */;
     struct {
-      volatile jclass klazz /* Global ref to the Fts5Phrase iter class */;
       jfieldID fidA         /* Fts5Phrase::a member */;
       jfieldID fidB         /* Fts5Phrase::b member */;
     } jPhraseIter;
@@ -860,6 +853,7 @@ static char * s3jni_exception_error_msg(JNIEnv * const env, jthrowable jx ){
   char * zMsg;
   jclass const klazz = (*env)->GetObjectClass(env, jx);
   mid = (*env)->GetMethodID(env, klazz, "toString", "()Ljava/lang/String;");
+  UNREF_L(klazz);
   IFTHREW{
     EXCEPTION_REPORT;
     EXCEPTION_CLEAR;
@@ -905,20 +899,18 @@ static int s3jni_db_exception(JNIEnv * const env, S3JniDb * const ps,
 }
 
 /*
-** Extracts the (void xDestroy()) method from the given jclass and
-** applies it to jobj. If jObj is NULL, this is a no-op. If klazz is
-** NULL then it's derived from jobj. The lack of an xDestroy() method
-** is silently ignored and any exceptions thrown by xDestroy() trigger
-** a warning to stdout or stderr and then the exception is suppressed.
+** Extracts the (void xDestroy()) method from jObj and applies it to
+** jObj. If jObj is NULL, this is a no-op. The lack of an xDestroy()
+** method is silently ignored and any exceptions thrown by xDestroy()
+** trigger a warning to stdout or stderr and then the exception is
+** suppressed.
 */
-static void s3jni_call_xDestroy(JNIEnv * const env, jobject jObj, jclass klazz){
+static void s3jni_call_xDestroy(JNIEnv * const env, jobject jObj){
   if(jObj){
-    jmethodID method;
-    if(!klazz){
-      klazz = (*env)->GetObjectClass(env, jObj);
-      assert(klazz);
-    }
-    method = (*env)->GetMethodID(env, klazz, "xDestroy", "()V");
+    jclass const klazz = (*env)->GetObjectClass(env, jObj);
+    jmethodID method = (*env)->GetMethodID(env, klazz, "xDestroy", "()V");
+
+    UNREF_L(klazz);
     if(method){
       s3jni_incr( &SJG.metrics.nDestroy );
       (*env)->CallVoidMethod(env, jObj, method);
@@ -927,6 +919,7 @@ static void s3jni_call_xDestroy(JNIEnv * const env, jobject jObj, jclass klazz){
         EXCEPTION_CLEAR;
       }
     }else{
+      /* Non-fatal. */
       EXCEPTION_CLEAR;
     }
   }
@@ -934,17 +927,16 @@ static void s3jni_call_xDestroy(JNIEnv * const env, jobject jObj, jclass klazz){
 
 /*
 ** Removes any Java references from s and clears its state. If
-** doXDestroy is true and s->klazz and s->jObj are not NULL, s->jObj's
+** doXDestroy is true and s->jObj is not NULL, s->jObj's
 ** s is passed to s3jni_call_xDestroy() before any references are
 ** cleared. It is legal to call this when the object has no Java
 ** references.
 */
 static void S3JniHook_unref(JNIEnv * const env, S3JniHook * const s, int doXDestroy){
-  if(doXDestroy && s->klazz && s->jObj){
-    s3jni_call_xDestroy(env, s->jObj, s->klazz);
+  if(doXDestroy && s->jObj){
+    s3jni_call_xDestroy(env, s->jObj);
   }
   UNREF_G(s->jObj);
-  UNREF_G(s->klazz);
   memset(s, 0, sizeof(*s));
 }
 
@@ -1198,16 +1190,12 @@ static void S3JniAutoExtension_clear(JNIEnv * const env,
 static int S3JniAutoExtension_init(JNIEnv *const env,
                                    S3JniAutoExtension * const ax,
                                    jobject const jAutoExt){
-  jclass klazz;
-  klazz = (*env)->GetObjectClass(env, jAutoExt);
-  if(!klazz){
-    S3JniAutoExtension_clear(env, ax);
-    return SQLITE_ERROR;
-  }
+  jclass const klazz = (*env)->GetObjectClass(env, jAutoExt);
+
   ax->midFunc = (*env)->GetMethodID(env, klazz, "xEntryPoint",
                                     "(Lorg/sqlite/jni/sqlite3;)I");
-  EXCEPTION_WARN_IGNORE;
   UNREF_L(klazz);
+  EXCEPTION_WARN_IGNORE;
   if(!ax->midFunc){
     MARKER(("Error getting xEntryPoint(sqlite3) from AutoExtension object."));
     S3JniAutoExtension_clear(env, ax);
@@ -1245,8 +1233,7 @@ static int udf_setAggregateContext(JNIEnv * env, jobject jCx,
   if(!pNC->fidAggCtx){
     MUTEX_NPH_ENTER;
     if(!pNC->fidAggCtx){
-      pNC->fidAggCtx = (*env)->GetFieldID(env, pNC->klazz,
-                                             "aggregateContext", "J");
+      pNC->fidAggCtx = (*env)->GetFieldID(env, pNC->klazz, "aggregateContext", "J");
       EXCEPTION_IS_FATAL("Cannot get sqlite3_contex.aggregateContext member.");
     }
     MUTEX_NPH_LEAVE;
@@ -1540,7 +1527,6 @@ typedef void (*udf_xFinal_f)(sqlite3_context*);
 typedef struct S3JniUdf S3JniUdf;
 struct S3JniUdf {
   jobject jObj          /* SQLFunction instance */;
-  jclass klazz          /* jObj's class */;
   char * zFuncName      /* Only for error reporting and debug logging */;
   enum UDFType type;
   /** Method IDs for the various UDF methods. */
@@ -1558,11 +1544,12 @@ static S3JniUdf * S3JniUdf_alloc(JNIEnv * const env, jobject jObj){
       "(Lorg/sqlite/jni/sqlite3_context;[Lorg/sqlite/jni/sqlite3_value;)V";
     const char * zFV = /* signature for xFinal, xValue */
       "(Lorg/sqlite/jni/sqlite3_context;)V";
+    jclass const klazz = (*env)->GetObjectClass(env, jObj);
+
     memset(s, 0, sizeof(S3JniUdf));
     s->jObj = REF_G(jObj);
-    s->klazz = REF_G((*env)->GetObjectClass(env, jObj));
 #define FGET(FuncName,FuncType,Field) \
-    s->Field = (*env)->GetMethodID(env, s->klazz, FuncName, FuncType); \
+    s->Field = (*env)->GetMethodID(env, klazz, FuncName, FuncType); \
     if(!s->Field) (*env)->ExceptionClear(env)
     FGET("xFunc",    zFSI, jmidxFunc);
     FGET("xStep",    zFSI, jmidxStep);
@@ -1570,6 +1557,7 @@ static S3JniUdf * S3JniUdf_alloc(JNIEnv * const env, jobject jObj){
     FGET("xValue",   zFV,  jmidxValue);
     FGET("xInverse", zFSI, jmidxInverse);
 #undef FGET
+    UNREF_L(klazz);
     if(s->jmidxFunc) s->type = UDF_SCALAR;
     else if(s->jmidxStep && s->jmidxFinal){
       s->type = s->jmidxValue ? UDF_WINDOW : UDF_AGGREGATE;
@@ -1584,9 +1572,8 @@ static void S3JniUdf_free(S3JniUdf * s){
   LocalJniGetEnv;
   if(env){
     //MARKER(("UDF cleanup: %s\n", s->zFuncName));
-    s3jni_call_xDestroy(env, s->jObj, s->klazz);
+    s3jni_call_xDestroy(env, s->jObj);
     UNREF_G(s->jObj);
-    UNREF_G(s->klazz);
   }
   sqlite3_free(s->zFuncName);
   sqlite3_free(s);
@@ -2024,10 +2011,12 @@ JDECL(jint,1busy_1handler)(JENV_CSELF, jobject jDb, jobject jBusy){
       /* Same object - this is a no-op. */
       return 0;
     }
+    jclass klazz;
     S3JniHook_unref(env, pHook, 1);
     pHook->jObj = REF_G(jBusy);
-    pHook->klazz = REF_G((*env)->GetObjectClass(env, jBusy));
-    pHook->midCallback = (*env)->GetMethodID(env, pHook->klazz, "xCallback", "(I)I");
+    klazz = (*env)->GetObjectClass(env, jBusy);
+    pHook->midCallback = (*env)->GetMethodID(env, klazz, "xCallback", "(I)I");
+    UNREF_L(klazz);
     IFTHREW {
       S3JniHook_unref(env, pHook, 0);
       rc = SQLITE_ERROR;
@@ -2157,6 +2146,7 @@ JDECL(jint,1collation_1needed)(JENV_CSELF, jobject jDb, jobject jHook){
   klazz = (*env)->GetObjectClass(env, jHook);
   xCallback = (*env)->GetMethodID(env, klazz, "xCollationNeeded",
                                   "(Lorg/sqlite/jni/sqlite3;ILjava/lang/String;)I");
+  UNREF_L(klazz);
   IFTHREW {
     rc = s3jni_db_exception(env, ps, SQLITE_MISUSE,
                             "Cannot not find matching callback on "
@@ -2275,6 +2265,7 @@ static jobject s3jni_commit_rollback_hook(int isCommit, JNIEnv * const env,
   xCallback = (*env)->GetMethodID(env, klazz,
                                   isCommit ? "xCommitHook" : "xRollbackHook",
                                   isCommit ? "()I" : "()V");
+  UNREF_L(klazz);
   IFTHREW {
     EXCEPTION_REPORT;
     EXCEPTION_CLEAR;
@@ -2371,6 +2362,7 @@ JDECL(jint,1config__Lorg_sqlite_jni_SQLLog_2)(JENV_CSELF, jobject jLog){
   S3JniHook tmpHook;
   S3JniHook * const hook = &tmpHook;
   S3JniHook * const hookOld = & SJG.hooks.sqllog;
+  jclass klazz;
   int rc = 0;
   if( !jLog ){
     S3JniHook_unref(env, hookOld, 0);
@@ -2379,11 +2371,12 @@ JDECL(jint,1config__Lorg_sqlite_jni_SQLLog_2)(JENV_CSELF, jobject jLog){
   if( hookOld->jObj && (*env)->IsSameObject(env, jLog, hookOld->jObj) ){
     return 0;
   }
-  hook->klazz = REF_G( (*env)->GetObjectClass(env, jLog) );
-  hook->midCallback = (*env)->GetMethodID(env, hook->klazz, "xSqllog",
+  klazz = (*env)->GetObjectClass(env, jLog);
+  hook->midCallback = (*env)->GetMethodID(env, klazz, "xSqllog",
                                           "(Lorg/sqlite/jni/sqlite3;"
                                           "Ljava/lang/String;"
                                           "I)V");
+  UNREF_L(klazz);
   if( !hook->midCallback ){
     EXCEPTION_WARN_IGNORE;
     S3JniHook_unref(env, hook, 0);
@@ -2423,8 +2416,9 @@ JDECL(jint,1create_1collation)(JENV_CSELF, jobject jDb,
   klazz = (*env)->GetObjectClass(env, oCollation);
   pHook->midCallback = (*env)->GetMethodID(env, klazz, "xCompare",
                                            "([B[B)I");
+  UNREF_L(klazz);
   IFTHREW{
-    EXCEPTION_REPORT;
+    UNREF_L(klazz);
     return s3jni_db_error(ps->pDb, SQLITE_ERROR,
                           "Could not get xCompare() method for object.");
   }
@@ -2435,7 +2429,6 @@ JDECL(jint,1create_1collation)(JENV_CSELF, jobject jDb,
   JSTR_RELEASE(name, zName);
   if( 0==rc ){
     pHook->jObj = REF_G(oCollation);
-    pHook->klazz = REF_G(klazz);
   }else{
     S3JniHook_unref(env, pHook, 1);
   }
@@ -3000,6 +2993,7 @@ static jobject s3jni_updatepre_hook(JNIEnv * env, int isPre, jobject jDb, jobjec
                           "JJ)V")
     : (*env)->GetMethodID(env, klazz, "xUpdateHook",
                           "(ILjava/lang/String;Ljava/lang/String;J)V");
+  UNREF_L(klazz);
   IFTHREW {
     EXCEPTION_CLEAR;
     s3jni_db_error(ps->pDb, SQLITE_ERROR,
@@ -3094,6 +3088,7 @@ JDECL(void,1progress_1handler)(JENV_CSELF,jobject jDb, jint n, jobject jProgress
   }
   klazz = (*env)->GetObjectClass(env, jProgress);
   xCallback = (*env)->GetMethodID(env, klazz, "xCallback", "()I");
+  UNREF_L(klazz);
   IFTHREW {
     EXCEPTION_CLEAR;
     s3jni_db_error(ps->pDb, SQLITE_ERROR,
@@ -3351,6 +3346,7 @@ JDECL(jint,1set_1authorizer)(JENV_CSELF,jobject jDb, jobject jHook){
     return (jint)sqlite3_set_authorizer( ps->pDb, 0, 0 );
   }else{
     int rc = 0;
+    jclass klazz;
     if( pHook->jObj ){
       if( (*env)->IsSameObject(env, pHook->jObj, jHook) ){
       /* Same object - this is a no-op. */
@@ -3359,8 +3355,8 @@ JDECL(jint,1set_1authorizer)(JENV_CSELF,jobject jDb, jobject jHook){
       S3JniHook_unref(env, pHook, 0);
     }
     pHook->jObj = REF_G(jHook);
-    pHook->klazz = REF_G((*env)->GetObjectClass(env, jHook));
-    pHook->midCallback = (*env)->GetMethodID(env, pHook->klazz,
+    klazz = (*env)->GetObjectClass(env, jHook);
+    pHook->midCallback = (*env)->GetMethodID(env, klazz,
                                              "xAuth",
                                              "(I"
                                              "Ljava/lang/String;"
@@ -3368,6 +3364,7 @@ JDECL(jint,1set_1authorizer)(JENV_CSELF,jobject jDb, jobject jHook){
                                              "Ljava/lang/String;"
                                              "Ljava/lang/String;"
                                              ")I");
+    UNREF_L(klazz);
     IFTHREW {
       S3JniHook_unref(env, pHook, 0);
       return s3jni_db_error(ps->pDb, SQLITE_ERROR,
@@ -3536,6 +3533,7 @@ JDECL(jint,1trace_1v2)(JENV_CSELF,jobject jDb, jint traceMask, jobject jTracer){
   klazz = (*env)->GetObjectClass(env, jTracer);
   ps->hooks.trace.midCallback = (*env)->GetMethodID(env, klazz, "xCallback",
                                               "(ILjava/lang/Object;Ljava/lang/Object;)I");
+  UNREF_L(klazz);
   IFTHREW {
     EXCEPTION_CLEAR;
     return s3jni_db_error(ps->pDb, SQLITE_ERROR,
@@ -3723,7 +3721,6 @@ JDECL(void,1do_1something_1for_1developer)(JENV_CSELF){
 */
 typedef struct {
   jobject jObj          /* functor instance */;
-  jclass klazz          /* jObj's class */;
   jobject jUserData     /* 2nd arg to JNI binding of
                            xCreateFunction(), ostensibly the 3rd arg
                            to the lib-level xCreateFunction(), except
@@ -3737,9 +3734,8 @@ static void Fts5JniAux_free(Fts5JniAux * const s){
   LocalJniGetEnv;
   if(env){
     /*MARKER(("FTS5 aux function cleanup: %s\n", s->zFuncName));*/
-    s3jni_call_xDestroy(env, s->jObj, s->klazz);
+    s3jni_call_xDestroy(env, s->jObj);
     UNREF_G(s->jObj);
-    UNREF_G(s->klazz);
     UNREF_G(s->jUserData);
   }
   sqlite3_free(s->zFuncName);
@@ -3753,14 +3749,16 @@ static void Fts5JniAux_xDestroy(void *p){
 static Fts5JniAux * Fts5JniAux_alloc(JNIEnv * const env, jobject jObj){
   Fts5JniAux * s = sqlite3_malloc(sizeof(Fts5JniAux));
   if(s){
+    jclass klazz;
     memset(s, 0, sizeof(Fts5JniAux));
     s->jObj = REF_G(jObj);
-    s->klazz = REF_G((*env)->GetObjectClass(env, jObj));
-    s->jmid = (*env)->GetMethodID(env, s->klazz, "xFunction",
+    klazz = (*env)->GetObjectClass(env, jObj);
+    s->jmid = (*env)->GetMethodID(env, klazz, "xFunction",
                                   "(Lorg/sqlite/jni/Fts5ExtensionApi;"
                                   "Lorg/sqlite/jni/Fts5Context;"
                                   "Lorg/sqlite/jni/sqlite3_context;"
                                   "[Lorg/sqlite/jni/sqlite3_value;)V");
+    UNREF_L(klazz);
     IFTHREW{
       EXCEPTION_REPORT;
       EXCEPTION_CLEAR;
@@ -3966,7 +3964,7 @@ static void S3JniFts5AuxData_xDestroy(void *x){
     S3JniFts5AuxData * const p = x;
     if(p->jObj){
       LocalJniGetEnv;
-      s3jni_call_xDestroy(env, p->jObj, 0);
+      s3jni_call_xDestroy(env, p->jObj);
       UNREF_G(p->jObj);
     }
     sqlite3_free(x);
@@ -4023,7 +4021,7 @@ static void s3jni_phraseIter_NToJ(JNIEnv *const env,
                                   Fts5PhraseIter const * const pSrc,
                                   jobject jIter){
   S3JniGlobalType * const g = &S3JniGlobal;
-  assert(g->fts5.jPhraseIter.klazz);
+  assert(g->fts5.jPhraseIter.fidA);
   (*env)->SetLongField(env, jIter, g->fts5.jPhraseIter.fidA, (jlong)pSrc->a);
   EXCEPTION_IS_FATAL("Cannot set Fts5PhraseIter.a field.");
   (*env)->SetLongField(env, jIter, g->fts5.jPhraseIter.fidB, (jlong)pSrc->b);
@@ -4034,7 +4032,7 @@ static void s3jni_phraseIter_NToJ(JNIEnv *const env,
 static void s3jni_phraseIter_JToN(JNIEnv *const env,  jobject jIter,
                                   Fts5PhraseIter * const pDest){
   S3JniGlobalType * const g = &S3JniGlobal;
-  assert(g->fts5.jPhraseIter.klazz);
+  assert(g->fts5.jPhraseIter.fidA);
   pDest->a =
     (const unsigned char *)(*env)->GetLongField(env, jIter, g->fts5.jPhraseIter.fidA);
   EXCEPTION_IS_FATAL("Cannot get Fts5PhraseIter.a field.");
@@ -4078,7 +4076,6 @@ JDECLFtsXA(void,xPhraseNext)(JENV_OSELF,jobject jCtx, jobject jIter,
   Fts5ExtDecl;
   Fts5PhraseIter iter;
   int iCol = 0, iOff = 0;
-  if(!SJG.fts5.jPhraseIter.klazz) return /*SQLITE_MISUSE*/;
   s3jni_phraseIter_JToN(env, jIter, &iter);
   fext->xPhraseNext(PtrGet_Fts5Context(jCtx), &iter, &iCol, &iOff);
   OutputPointer_set_Int32(env, jOutCol, iCol);
@@ -4091,7 +4088,6 @@ JDECLFtsXA(void,xPhraseNextColumn)(JENV_OSELF,jobject jCtx, jobject jIter,
   Fts5ExtDecl;
   Fts5PhraseIter iter;
   int iCol = 0;
-  if(!SJG.fts5.jPhraseIter.klazz) return /*SQLITE_MISUSE*/;
   s3jni_phraseIter_JToN(env, jIter, &iter);
   fext->xPhraseNextColumn(PtrGet_Fts5Context(jCtx), &iter, &iCol);
   OutputPointer_set_Int32(env, jOutCol, iCol);
@@ -4151,6 +4147,7 @@ JDECLFtsXA(jint,xQueryPhrase)(JENV_OSELF,jobject jFcx, jint iPhrase,
   s.midCallback = (*env)->GetMethodID(env, klazz, "xCallback",
                                       "(Lorg.sqlite.jni.Fts5ExtensionApi;"
                                       "Lorg.sqlite.jni.Fts5Context;)I");
+  UNREF_L(klazz);
   EXCEPTION_IS_FATAL("Could not extract xQueryPhraseCallback.xCallback method.");
   return (jint)fext->xQueryPhrase(PtrGet_Fts5Context(jFcx), iPhrase, &s,
                                   s3jni_xQueryPhrase);
@@ -4179,7 +4176,7 @@ JDECLFtsXA(int,xSetAuxdata)(JENV_OSELF,jobject jCtx, jobject jAux){
     if(jAux){
       /* Emulate how xSetAuxdata() behaves when it cannot alloc
       ** its auxdata wrapper. */
-      s3jni_call_xDestroy(env, jAux, 0);
+      s3jni_call_xDestroy(env, jAux);
     }
     return SQLITE_NOMEM;
   }
@@ -4237,6 +4234,7 @@ static jint s3jni_fts5_xTokenize(JENV_OSELF, S3NphRef const *pRef,
   s.jFcx = jFcx;
   s.fext = fext;
   s.midCallback = (*env)->GetMethodID(env, klazz, "xToken", "(I[BII)I");
+  UNREF_L(klazz);
   IFTHREW {
     EXCEPTION_REPORT;
     EXCEPTION_CLEAR;
@@ -4606,16 +4604,17 @@ Java_org_sqlite_jni_SQLite3Jni_init(JENV_CSELF){
     SJG.g.oCharsetUtf8 =
       REF_G((*env)->GetStaticObjectField(env, klazz, fUtf8));
     EXCEPTION_IS_FATAL("Error getting reference to StandardCharsets.UTF_8.");
+    UNREF_L(klazz);
   }
 
 #ifdef SQLITE_ENABLE_FTS5
   klazz = (*env)->FindClass(env, "org/sqlite/jni/Fts5PhraseIter");
   EXCEPTION_IS_FATAL("Error getting reference to org.sqlite.jni.Fts5PhraseIter.");
-  SJG.fts5.jPhraseIter.klazz = REF_G(klazz);
   SJG.fts5.jPhraseIter.fidA = (*env)->GetFieldID(env, klazz, "a", "J");
   EXCEPTION_IS_FATAL("Cannot get Fts5PhraseIter.a field.");
-  SJG.fts5.jPhraseIter.fidB = (*env)->GetFieldID(env, klazz, "a", "J");
+  SJG.fts5.jPhraseIter.fidB = (*env)->GetFieldID(env, klazz, "b", "J");
   EXCEPTION_IS_FATAL("Cannot get Fts5PhraseIter.b field.");
+  UNREF_L(klazz);
 #endif
 
   SJG.envCache.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
index 58f3c72d7ecc8cb2f07643b9d19613fa3d36acdd..f6449b99b7d7e699bbfc58da9ac9878a465927b0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\snote\sto\sthe\sJNI\sREADME\sexplaining\swhy\sthe\sJava\sAPI\shas\scallback\snames\slike\sxFunc()\sand\sxPreUpdate().
-D 2023-08-23T13:36:27.524
+C Remove\sunnecessary\sjclass-type\sstruct\smembers.
+D 2023-08-23T17:15:48.658
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -235,7 +235,7 @@ F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a3
 F ext/jni/GNUmakefile 14b7c3abd1ae8693203b08b0e06bb359f8924ad2243f15953e9c6e456ae317b5
 F ext/jni/README.md 1693e865d366f5ebaa756732ea0d4b786515caf3cfbcd4dcb8758274373913b0
 F ext/jni/jar-dist.make 9a03d10dbb5a74c724bfec4b76fd9e4c9865cbbc858d731cb48f38ac897d73a3
-F ext/jni/src/c/sqlite3-jni.c 852c4812c9a3663d871cb334eaa60eb6fc22d67da47d4ff3868fdbfd6ebedb3a
+F ext/jni/src/c/sqlite3-jni.c adb773d104abe72e93364f21c52d455f361692f3cd7dd6d9fdab6110b8b4f3ee
 F ext/jni/src/c/sqlite3-jni.h c5cb0348efe4e5f3d125a240e2437e8475de14a586c2f859e2acdcde4116244d
 F ext/jni/src/org/sqlite/jni/Authorizer.java 1308988f7f40579ea0e4deeaec3c6be971630566bd021c31367fe3f5140db892
 F ext/jni/src/org/sqlite/jni/AutoExtension.java 3b62c915e45ce73f63343ca9195ec63592244d616a1908b7587bdd45de1b97dd
@@ -2094,8 +2094,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 d0c425b5c1d3aac5ead18a501a3760b4506d68d373cb3be484247042cf2fa8d4
-R 2838b81803960048740e7919bfbbb667
+P 415447a310f6a7d06b4aa9ef51f110cf8e2ef9545c69cb5983c367c50fe641d2
+R fddefcd0dbe857a799e7e6b983a3459a
 U stephan
-Z 6887128552106c38adfd2773e845a05f
+Z b441a1d2bae36389c447acd3134d6be2
 # Remove this line to create a well-formed Fossil manifest.
index 69eb67759c87ab63c58778dfe8294fee83bcfd07..3df5deea504f4118dcc287693840f85519e36eff 100644 (file)
@@ -1 +1 @@
-415447a310f6a7d06b4aa9ef51f110cf8e2ef9545c69cb5983c367c50fe641d2
\ No newline at end of file
+d67255f7251cc5d1d27d77d4c84ff216e2da71202db989718189a6b4beff1cd0
\ No newline at end of file