]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Bind sqlite3_db_status() to JNI.
authorstephan <stephan@noemail.net>
Sat, 12 Aug 2023 10:27:08 +0000 (10:27 +0000)
committerstephan <stephan@noemail.net>
Sat, 12 Aug 2023 10:27:08 +0000 (10:27 +0000)
FossilOrigin-Name: b79477a0af94127b0638a8822de01156bef855a7e167f678809e1c978e1a0c3e

ext/jni/src/c/sqlite3-jni.c
ext/jni/src/c/sqlite3-jni.h
ext/jni/src/org/sqlite/jni/OutputPointer.java
ext/jni/src/org/sqlite/jni/SQLite3Jni.java
ext/jni/src/org/sqlite/jni/Tester1.java
manifest
manifest.uuid

index 3c7dac6310ca64a69e3f10de7e7ff272b5f559af..e794e9c97325b79854c5be598282a81641784d55 100644 (file)
@@ -2354,90 +2354,6 @@ JDECL(jboolean,1compileoption_1used)(JENV_CSELF, jstring name){
   return rc;
 }
 
-/* sqlite3_db_config() for (int,const char *) */
-JDECL(int,1db_1config__Lorg_sqlite_jni_sqlite3_2ILjava_lang_String_2)(
-  JENV_CSELF, jobject jDb, jint op, jstring jStr
-){
-  S3JniDb * const ps = S3JniDb_for_db(env, jDb, 0, 0);
-  int rc;
-  char *zStr;
-
-  switch( (ps && jStr) ? op : 0 ){
-    case SQLITE_DBCONFIG_MAINDBNAME:
-      zStr = s3jni_jstring_to_utf8(S3JniGlobal_env_cache(env), jStr, 0);
-      if( zStr ){
-        rc = sqlite3_db_config(ps->pDb, (int)op, zStr);
-        if( rc ){
-          sqlite3_free( zStr );
-        }else{
-          sqlite3_free( ps->zMainDbName );
-          ps->zMainDbName = zStr;
-        }
-      }else{
-        rc = SQLITE_NOMEM;
-      }
-      break;
-    default:
-      rc = SQLITE_MISUSE;
-  }
-  return rc;
-}
-
-FIXME_THREADING(perDb)
-/* sqlite3_db_config() for (int,int*) */
-/* ACHTUNG: openjdk v19 creates a different mangled name for this
-   function than openjdk v8 does. */
-JDECL(jint,1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2)(
-  JENV_CSELF, jobject jDb, jint op, jint onOff, jobject jOut
-){
-  S3JniDb * const ps = S3JniDb_for_db(env, jDb, 0, 0);
-  int rc;
-  switch( ps ? op : 0 ){
-    case SQLITE_DBCONFIG_ENABLE_FKEY:
-    case SQLITE_DBCONFIG_ENABLE_TRIGGER:
-    case SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER:
-    case SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION:
-    case SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE:
-    case SQLITE_DBCONFIG_ENABLE_QPSG:
-    case SQLITE_DBCONFIG_TRIGGER_EQP:
-    case SQLITE_DBCONFIG_RESET_DATABASE:
-    case SQLITE_DBCONFIG_DEFENSIVE:
-    case SQLITE_DBCONFIG_WRITABLE_SCHEMA:
-    case SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:
-    case SQLITE_DBCONFIG_DQS_DML:
-    case SQLITE_DBCONFIG_DQS_DDL:
-    case SQLITE_DBCONFIG_ENABLE_VIEW:
-    case SQLITE_DBCONFIG_LEGACY_FILE_FORMAT:
-    case SQLITE_DBCONFIG_TRUSTED_SCHEMA:
-    case SQLITE_DBCONFIG_STMT_SCANSTATUS:
-    case SQLITE_DBCONFIG_REVERSE_SCANORDER: {
-      int pOut = 0;
-      rc = sqlite3_db_config( ps->pDb, (int)op, onOff, &pOut );
-      if( 0==rc && jOut ){
-        OutputPointer_set_Int32(env, jOut, pOut);
-      }
-      break;
-    }
-    default:
-      rc = SQLITE_MISUSE;
-  }
-  return (jint)rc;
-}
-
-/**
-   This is a workaround for openjdk v19 (and possibly others) encoding
-   this function's name differently than JDK v8 does. If we do not
-   install both names for this function then Java will not be able to
-   find the function in both environments.
-*/
-JDECL(jint,1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_00024Int32_2)(
-  JENV_CSELF, jobject jDb, jint op, jint onOff, jobject jOut
-){
-  return JFuncName(1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2)(
-    env, jKlazz, jDb, op, onOff, jOut
-  );
-}
-
 FIXME_THREADING(perDb)
 JDECL(jobject,1context_1db_1handle)(JENV_CSELF, jobject jpCx){
   sqlite3 * const pDb = sqlite3_context_db_handle(PtrGet_sqlite3_context(jpCx));
@@ -2537,6 +2453,90 @@ JDECL(jint,1create_1function)(JENV_CSELF, jobject jDb, jstring jFuncName,
   return create_function(env, jDb, jFuncName, nArg, eTextRep, jFunctor);
 }
 
+/* sqlite3_db_config() for (int,const char *) */
+JDECL(int,1db_1config__Lorg_sqlite_jni_sqlite3_2ILjava_lang_String_2)(
+  JENV_CSELF, jobject jDb, jint op, jstring jStr
+){
+  S3JniDb * const ps = S3JniDb_for_db(env, jDb, 0, 0);
+  int rc;
+  char *zStr;
+
+  switch( (ps && jStr) ? op : 0 ){
+    case SQLITE_DBCONFIG_MAINDBNAME:
+      zStr = s3jni_jstring_to_utf8(S3JniGlobal_env_cache(env), jStr, 0);
+      if( zStr ){
+        rc = sqlite3_db_config(ps->pDb, (int)op, zStr);
+        if( rc ){
+          sqlite3_free( zStr );
+        }else{
+          sqlite3_free( ps->zMainDbName );
+          ps->zMainDbName = zStr;
+        }
+      }else{
+        rc = SQLITE_NOMEM;
+      }
+      break;
+    default:
+      rc = SQLITE_MISUSE;
+  }
+  return rc;
+}
+
+FIXME_THREADING(perDb)
+/* sqlite3_db_config() for (int,int*) */
+/* ACHTUNG: openjdk v19 creates a different mangled name for this
+   function than openjdk v8 does. */
+JDECL(jint,1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2)(
+  JENV_CSELF, jobject jDb, jint op, jint onOff, jobject jOut
+){
+  S3JniDb * const ps = S3JniDb_for_db(env, jDb, 0, 0);
+  int rc;
+  switch( ps ? op : 0 ){
+    case SQLITE_DBCONFIG_ENABLE_FKEY:
+    case SQLITE_DBCONFIG_ENABLE_TRIGGER:
+    case SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER:
+    case SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION:
+    case SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE:
+    case SQLITE_DBCONFIG_ENABLE_QPSG:
+    case SQLITE_DBCONFIG_TRIGGER_EQP:
+    case SQLITE_DBCONFIG_RESET_DATABASE:
+    case SQLITE_DBCONFIG_DEFENSIVE:
+    case SQLITE_DBCONFIG_WRITABLE_SCHEMA:
+    case SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:
+    case SQLITE_DBCONFIG_DQS_DML:
+    case SQLITE_DBCONFIG_DQS_DDL:
+    case SQLITE_DBCONFIG_ENABLE_VIEW:
+    case SQLITE_DBCONFIG_LEGACY_FILE_FORMAT:
+    case SQLITE_DBCONFIG_TRUSTED_SCHEMA:
+    case SQLITE_DBCONFIG_STMT_SCANSTATUS:
+    case SQLITE_DBCONFIG_REVERSE_SCANORDER: {
+      int pOut = 0;
+      rc = sqlite3_db_config( ps->pDb, (int)op, onOff, &pOut );
+      if( 0==rc && jOut ){
+        OutputPointer_set_Int32(env, jOut, pOut);
+      }
+      break;
+    }
+    default:
+      rc = SQLITE_MISUSE;
+  }
+  return (jint)rc;
+}
+
+/**
+   This is a workaround for openjdk v19 (and possibly others) encoding
+   this function's name differently than JDK v8 does. If we do not
+   install both names for this function then Java will not be able to
+   find the function in both environments.
+*/
+JDECL(jint,1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_00024Int32_2)(
+  JENV_CSELF, jobject jDb, jint op, jint onOff, jobject jOut
+){
+  return JFuncName(1db_1config__Lorg_sqlite_jni_sqlite3_2IILorg_sqlite_jni_OutputPointer_Int32_2)(
+    env, jKlazz, jDb, op, onOff, jOut
+  );
+}
+
 JDECL(jstring,1db_1filename)(JENV_CSELF, jobject jDb, jstring jDbName){
   S3JniDb * const ps = S3JniDb_for_db(env, jDb, 0, 0);
   S3JniEnvCache * const jc = S3JniGlobal_env_cache(env);
@@ -2558,6 +2558,20 @@ JDECL(jstring,1db_1filename)(JENV_CSELF, jobject jDb, jstring jDbName){
   return jRv;
 }
 
+
+JDECL(jint,1db_1status)(JENV_CSELF, jobject jDb, jint op, jobject jOutCurrent,
+                        jobject jOutHigh, jboolean reset ){
+  int iCur = 0, iHigh = 0;
+  sqlite3 * const pDb = PtrGet_sqlite3(jDb);
+  int rc = sqlite3_db_status( pDb, op, &iCur, &iHigh, reset );
+  if( 0==rc ){
+    OutputPointer_set_Int32(env, jOutCurrent, iCur);
+    OutputPointer_set_Int32(env, jOutHigh, iHigh);
+  }
+  return (jint)rc;
+}
+
+
 JDECL(jint,1errcode)(JENV_CSELF, jobject jpDb){
   sqlite3 * const pDb = PtrGet_sqlite3(jpDb);
   return pDb ? sqlite3_errcode(pDb) : SQLITE_MISUSE;
index 48720d0da8b10faff3f0f7bc0744e98b0c2e836b..bf2d5527b06078eaee86b5e83a0cb3b0f84f9840 100644 (file)
@@ -1131,6 +1131,14 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1db_1config__Lorg_
 JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1db_1config__Lorg_sqlite_jni_sqlite3_2ILjava_lang_String_2
   (JNIEnv *, jclass, jobject, jint, jstring);
 
+/*
+ * Class:     org_sqlite_jni_SQLite3Jni
+ * Method:    sqlite3_db_status
+ * Signature: (Lorg/sqlite/jni/sqlite3;ILorg/sqlite/jni/OutputPointer/Int32;Lorg/sqlite/jni/OutputPointer/Int32;Z)I
+ */
+JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1db_1status
+  (JNIEnv *, jclass, jobject, jint, jobject, jobject, jboolean);
+
 /*
  * Class:     org_sqlite_jni_SQLite3Jni
  * Method:    sqlite3_errcode
index c4cc21378d2de79215ffc40eb051c861f630e38d..9f505c7b4db3aac13b1dd46bb7b9914a0b5b07b9 100644 (file)
@@ -36,7 +36,7 @@ public final class OutputPointer {
   }
 
   public static final class Int32 {
-    private int value;
+    public int value;
     public Int32(){this(0);}
     public Int32(int v){value = v;}
     public final int getValue(){return value;}
@@ -44,7 +44,7 @@ public final class OutputPointer {
   }
 
   public static final class Int64 {
-    private long value;
+    public long value;
     public Int64(){this(0);}
     public Int64(long v){value = v;}
     public final long getValue(){return value;}
@@ -52,7 +52,7 @@ public final class OutputPointer {
   }
 
   public static final class String {
-    private java.lang.String value;
+    public java.lang.String value;
     public String(){this(null);}
     public String(java.lang.String v){value = v;}
     public final java.lang.String getValue(){return value;}
@@ -60,7 +60,7 @@ public final class OutputPointer {
   }
 
   public static final class ByteArray {
-    private byte[] value;
+    public byte[] value;
     public ByteArray(){this(null);}
     public ByteArray(byte[] v){value = v;}
     public final byte[] getValue(){return value;}
index d9508a9bad65fc446d031e91a6b1776fabf5d849..7c4447b7331da49b779e1a3612951f640461e470 100644 (file)
@@ -526,6 +526,11 @@ public final class SQLite3Jni {
     @NotNull sqlite3 db, int op, @NotNull String val
   );
 
+  public static synchronized native int sqlite3_db_status(
+    @NotNull sqlite3 db, int op, @NotNull OutputPointer.Int32 pCurrent,
+    @NotNull OutputPointer.Int32 pHighwater, boolean reset
+  );
+
   public static synchronized native int sqlite3_errcode(@NotNull sqlite3 db);
 
   public static synchronized native String sqlite3_expanded_sql(@NotNull sqlite3_stmt stmt);
@@ -936,7 +941,6 @@ public final class SQLite3Jni {
     long maxLength, int encoding
   );
 
-
   public static synchronized native int sqlite3_status(
     int op, @NotNull OutputPointer.Int32 pCurrent,
     @NotNull OutputPointer.Int32 pHighwater, boolean reset
index 1b9f7669590fb8b44e63d0d9f9792701157b06d1..898d27be16ba901373dc0a5b63fb27aa040dd18b 100644 (file)
@@ -494,19 +494,27 @@ public class Tester1 {
     final OutputPointer.Int32 cur32 = new OutputPointer.Int32();
     final OutputPointer.Int32 high32 = new OutputPointer.Int32();
     final sqlite3 db = createNewDb();
-    execSql(db, "create table t(a)");
-    sqlite3_close_v2(db);
+    execSql(db, "create table t(a); insert into t values(1),(2),(3)");
 
     int rc = sqlite3_status(SQLITE_STATUS_MEMORY_USED, cur32, high32, false);
     affirm( 0 == rc );
-    affirm( cur32.getValue() > 0 );
-    affirm( high32.getValue() >= cur32.getValue() );
+    affirm( cur32.value > 0 );
+    affirm( high32.value >= cur32.value );
 
     rc = sqlite3_status64(SQLITE_STATUS_MEMORY_USED, cur64, high64, false);
     affirm( 0 == rc );
-    affirm( cur64.getValue() > 0 );
-    affirm( high64.getValue() >= cur64.getValue() );
+    affirm( cur64.value > 0 );
+    affirm( high64.value >= cur64.value );
+
+    cur32.value = 0;
+    high32.value = 1;
+    rc = sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, cur32, high32, false);
+    affirm( 0 == rc );
+    affirm( cur32.value > 0 );
+    outln(cur32.value," ",high32.value);
+    affirm( high32.value == 0 /* always 0 for SCHEMA_USED */ );
 
+    sqlite3_close_v2(db);
   }
 
   private static void testUdf1(){
index a256199706cb08f9470856839a00d21b4cc9b43d..de527623e9877f668efbef3de9e2a8d755056089 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Bind\ssqlite3_status(64)()\sto\sJNI.
-D 2023-08-12T10:06:59.356
+C Bind\ssqlite3_db_status()\sto\sJNI.
+D 2023-08-12T10:27:08.396
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -234,8 +234,8 @@ F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a3
 F ext/jni/GNUmakefile 6a6633f768431bc1195c1b64bcec162069e3ed02442808eef9bd173c59ed0ddd
 F ext/jni/README.md 7a614a2fa6c561205f7a53fd8626cf93a7b5711ff454fc1814517f796df398eb
 F ext/jni/jar-dist.make f90a553203a57934bf275bed86479485135a52f48ac5c1cfe6499ae07b0b35a4
-F ext/jni/src/c/sqlite3-jni.c 5bb53c3f38486a79358737400d4e8a3ef66ae4ea58e7a5bd6e24a5816c2ad653
-F ext/jni/src/c/sqlite3-jni.h 7a51d1045ef78c2cb6929f6de5bd8242e9ebafe8abfe4a4255b67b62cfb4d2d5
+F ext/jni/src/c/sqlite3-jni.c e48ec95bc671cc281a5b442f6e80ea62b40947b6434ed07593bdd831b24ec979
+F ext/jni/src/c/sqlite3-jni.h c5f941b057a24ee62942e6e1bf5a7fd527e5004d20d9638e84a9382813c3cf2a
 F ext/jni/src/org/sqlite/jni/Authorizer.java 1308988f7f40579ea0e4deeaec3c6be971630566bd021c31367fe3f5140db892
 F ext/jni/src/org/sqlite/jni/AutoExtension.java 18e83f6f463e306df60b2dceb65247d32af1f78af4bbbae9155411a8c6cdb093
 F ext/jni/src/org/sqlite/jni/BusyHandler.java 1b1d3e5c86cd796a0580c81b6af6550ad943baa25e47ada0dcca3aff3ebe978c
@@ -249,13 +249,13 @@ F ext/jni/src/org/sqlite/jni/Fts5Function.java 65cde7151e441fee012250a5e03277de7
 F ext/jni/src/org/sqlite/jni/Fts5PhraseIter.java 6642beda341c0b1b46af4e2d7f6f9ab03a7aede43277b2c92859176d6bce3be9
 F ext/jni/src/org/sqlite/jni/Fts5Tokenizer.java 91489893596b6528c0df5cd7180bd5b55809c26e2b797fb321dfcdbc1298c060
 F ext/jni/src/org/sqlite/jni/NativePointerHolder.java 9c5d901cce4f7e57c3d623f4e2476f9f79a8eed6e51b2a603f37866018e040ee
-F ext/jni/src/org/sqlite/jni/OutputPointer.java ebdd33d48064c3302d0d4a6dd345562a967f8420edad7c7509403be277d076a0
+F ext/jni/src/org/sqlite/jni/OutputPointer.java 05a34b408cdd7d482250b9fadd2e31fb01afc0e734f8d78f745bc70ea7889916
 F ext/jni/src/org/sqlite/jni/ProgressHandler.java 6f62053a828a572de809828b1ee495380677e87daa29a1c57a0e2c06b0a131dc
 F ext/jni/src/org/sqlite/jni/ResultCode.java 7cdf993f2037ab7bd244c9a34dbaef2ace3beb5da5d7e7fda5c6f67634ceb647
 F ext/jni/src/org/sqlite/jni/RollbackHook.java b04c8abcc6ade44a8a57129e33765793f69df0ba909e49ba18d73f4268d92564
 F ext/jni/src/org/sqlite/jni/SQLFunction.java 09ce81c1c637e31c3a830d4c859cce95d65f5e02ff45f8bd1985b3479381bc46
-F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 21af88949fd4c909d43a511f51e352f51dab34bbd5c42eba885709b7001dad03
-F ext/jni/src/org/sqlite/jni/Tester1.java c7bb4747c2df2aa52cd00bcaf15ed8609df121d80f2af75b05cbf0f673a8be42
+F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 18458d7419a9105e4987884f9a51a269a7aee3824abda861f937776a5dfd6b76
+F ext/jni/src/org/sqlite/jni/Tester1.java 26c380e5536a42fa95b755e106c958176ddd7916424a874dc88213b9b85757fc
 F ext/jni/src/org/sqlite/jni/TesterFts5.java cf2d687baafffdeba219b77cf611fd47a0556248820ea794ae3e8259bfbdc5ee
 F ext/jni/src/org/sqlite/jni/Tracer.java a5cece9f947b0af27669b8baec300b6dd7ff859c3e6a6e4a1bd8b50f9714775d
 F ext/jni/src/org/sqlite/jni/UpdateHook.java e58645a1727f8a9bbe72dc072ec5b40d9f9362cb0aa24acfe93f49ff56a9016d
@@ -2091,8 +2091,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 b69b5facbf94e03e74d4a739ab85c5baac1c9ecbea8c330b2135d77e525b5d8a
-R b76030b5e4eb661dcf175e25776950a3
+P cefb6614e65ca1764ec72702f92f801382e63aa9b221fc9c68719d497e7499fd
+R 17292eb9f1a8b03b2a02aeb82e00c48c
 U stephan
-Z 02ed26d64128e71e5e4367d3108664ea
+Z b2be796458128a6e289a1432b4828537
 # Remove this line to create a well-formed Fossil manifest.
index 73cd2d3788d372700658e77fc5a0f7f383f45816..38ac7f19aaa3f628745f787c7b00c51575c83cd2 100644 (file)
@@ -1 +1 @@
-cefb6614e65ca1764ec72702f92f801382e63aa9b221fc9c68719d497e7499fd
\ No newline at end of file
+b79477a0af94127b0638a8822de01156bef855a7e167f678809e1c978e1a0c3e
\ No newline at end of file