]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Move the 3 Java SQLFunction subclasses from inner classes to package scope.
authorstephan <stephan@noemail.net>
Fri, 25 Aug 2023 16:43:51 +0000 (16:43 +0000)
committerstephan <stephan@noemail.net>
Fri, 25 Aug 2023 16:43:51 +0000 (16:43 +0000)
FossilOrigin-Name: 21fd47a68db9df1828f4cc4131d326a193b5751d56a40ae77ed0a78dc0621af1

ext/jni/GNUmakefile
ext/jni/src/org/sqlite/jni/AggregateFunction.java [new file with mode: 0644]
ext/jni/src/org/sqlite/jni/SQLFunction.java
ext/jni/src/org/sqlite/jni/SQLite3Jni.java
ext/jni/src/org/sqlite/jni/ScalarFunction.java [new file with mode: 0644]
ext/jni/src/org/sqlite/jni/Tester1.java
ext/jni/src/org/sqlite/jni/WindowFunction.java [new file with mode: 0644]
manifest
manifest.uuid

index 2ee9389b81d8dee284bd8722a53e32bf541d2129..753416633574b0e82889e8e08314702b449c0b27 100644 (file)
@@ -59,6 +59,7 @@ $(bin.version-info): $(dir.tool)/version-info.c $(sqlite3.h) $(dir.top)/Makefile
 # Be explicit about which Java files to compile so that we can work on
 # in-progress files without requiring them to be in a compilable statae.
 JAVA_FILES.main := $(patsubst %,$(dir.src.jni)/%,\
+  AggregateFunction.java \
   AuthorizerCallback.java \
   AutoExtensionCallback.java \
   BusyHandlerCallback.java \
@@ -74,12 +75,14 @@ JAVA_FILES.main := $(patsubst %,$(dir.src.jni)/%,\
   ProgressHandlerCallback.java \
   ResultCode.java \
   RollbackHookCallback.java \
+  ScalarFunction.java \
   SQLFunction.java \
   SQLite3Jni.java \
   Tester1.java \
   TraceV2Callback.java \
   UpdateHookCallback.java \
   ValueHolder.java \
+  WindowFunction.java \
   XDestroyCallback.java \
   package-info.java \
   sqlite3.java \
@@ -318,6 +321,10 @@ $(doc.index): $(JAVA_FILES.main) $(MAKEFILE)
 .FORCE: doc
 doc: $(doc.index)
 javadoc: $(doc.index)
+# Force rebild of docs
+redoc:
+       @rm -f $(doc.index)/index.html
+       @$(MAKE) doc
 docserve: $(doc.index)
        cd $(dir.doc) && althttpd -max-age 1 -page index.html
 ########################################################################
diff --git a/ext/jni/src/org/sqlite/jni/AggregateFunction.java b/ext/jni/src/org/sqlite/jni/AggregateFunction.java
new file mode 100644 (file)
index 0000000..6b6c848
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+** 2023-08-25
+**
+** 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 is part of the JNI bindings for the sqlite3 C API.
+*/
+package org.sqlite.jni;
+
+
+/**
+   SQLFunction subclass for creating aggregate functions.  Its T is
+   the data type of its "accumulator" state, an instance of which is
+   intended to be be managed using the getAggregateState() and
+   takeAggregateState() methods.
+*/
+public abstract class AggregateFunction<T> extends SQLFunction {
+
+  /**
+     As for the xStep() argument of the C API's
+     sqlite3_create_function().  If this function throws, the
+     exception is not propagated and a warning might be emitted to a
+     debugging channel.
+  */
+  public abstract void xStep(sqlite3_context cx, sqlite3_value[] args);
+
+  /**
+     As for the xFinal() argument of the C API's sqlite3_create_function().
+     If this function throws, it is translated into an sqlite3_result_error().
+  */
+  public abstract void xFinal(sqlite3_context cx);
+
+  /**
+     Optionally override to be notified when the UDF is finalized by
+     SQLite.
+  */
+  public void xDestroy() {}
+
+  /** Per-invocation state for the UDF. */
+  private final SQLFunction.PerContextState<T> map =
+    new SQLFunction.PerContextState<>();
+
+  /**
+     To be called from the implementation's xStep() method, as well
+     as the xValue() and xInverse() methods of the Window<T>
+     subclass, to fetch the current per-call UDF state. On the
+     first call to this method for any given sqlite3_context
+     argument, the context is set to the given initial value. On all other
+     calls, the 2nd argument is ignored.
+
+     @see SQLFunction.PerContextState#getAggregateState()
+  */
+  protected final ValueHolder<T> getAggregateState(sqlite3_context cx, T initialValue){
+    return map.getAggregateState(cx, initialValue);
+  }
+
+  /**
+     To be called from the implementation's xFinal() method to fetch
+     the final state of the UDF and remove its mapping.
+
+     see SQLFunction.PerContextState#takeAggregateState()
+  */
+  protected final T takeAggregateState(sqlite3_context cx){
+    return map.takeAggregateState(cx);
+  }
+}
index c8b15d8b6820d0d5f589e5a4747440a6e4e8050d..badbc3dc780b69236c465b0c2fd3587439e38c00 100644 (file)
@@ -100,102 +100,4 @@ public abstract class SQLFunction {
     }
   }
 
-  /**
-     Subclass for creating scalar functions.
-  */
-  public static abstract class Scalar extends SQLFunction {
-
-    /**
-       As for the xFunc() argument of the C API's
-       sqlite3_create_function().  If this function throws, it is
-       translated into an sqlite3_result_error().
-    */
-    public abstract void xFunc(sqlite3_context cx, sqlite3_value[] args);
-
-    /**
-       Optionally override to be notified when the UDF is finalized by
-       SQLite.
-    */
-    public void xDestroy() {}
-  }
-
-  /**
-     SQLFunction Subclass for creating aggregate functions.  Its T is
-     the data type of its "accumulator" state, an instance of which is
-     intended to be be managed using the getAggregateState() and
-     takeAggregateState() methods.
-  */
-  public static abstract class Aggregate<T> extends SQLFunction {
-
-    /**
-       As for the xStep() argument of the C API's
-       sqlite3_create_function().  If this function throws, the
-       exception is not propagated and a warning might be emitted to a
-       debugging channel.
-    */
-    public abstract void xStep(sqlite3_context cx, sqlite3_value[] args);
-
-    /**
-       As for the xFinal() argument of the C API's sqlite3_create_function().
-       If this function throws, it is translated into an sqlite3_result_error().
-    */
-    public abstract void xFinal(sqlite3_context cx);
-
-    /**
-       Optionally override to be notified when the UDF is finalized by
-       SQLite.
-    */
-    public void xDestroy() {}
-
-    //! Per-invocation state for the UDF.
-    private final PerContextState<T> map = new PerContextState<>();
-
-    /**
-       To be called from the implementation's xStep() method, as well
-       as the xValue() and xInverse() methods of the Window<T>
-       subclass, to fetch the current per-call UDF state. On the
-       first call to this method for any given sqlite3_context
-       argument, the context is set to the given initial value. On all other
-       calls, the 2nd argument is ignored.
-
-       @see SQLFunction.PerContextState#getAggregateState()
-    */
-    protected final ValueHolder<T> getAggregateState(sqlite3_context cx, T initialValue){
-      return map.getAggregateState(cx, initialValue);
-    }
-
-    /**
-       To be called from the implementation's xFinal() method to fetch
-       the final state of the UDF and remove its mapping.
-
-       see SQLFunction.PerContextState#takeAggregateState()
-    */
-    protected final T takeAggregateState(sqlite3_context cx){
-      return map.takeAggregateState(cx);
-    }
-  }
-
-  /**
-     An SQLFunction subclass for creating window functions.  Note that
-     Window<T> inherits from Aggregate<T> and each instance is
-     required to implement the inherited abstract methods from that
-     class. See Aggregate<T> for information on managing the UDF's
-     invocation-specific state.
-  */
-  public static abstract class Window<T> extends Aggregate<T> {
-
-    /**
-       As for the xInverse() argument of the C API's
-       sqlite3_create_window_function(). If this function throws, the
-       exception is not propagated and a warning might be emitted
-       to a debugging channel.
-    */
-    public abstract void xInverse(sqlite3_context cx, sqlite3_value[] args);
-
-    /**
-       As for the xValue() argument of the C API's sqlite3_create_window_function().
-       See xInverse() for the fate of any exceptions this throws.
-    */
-    public abstract void xValue(sqlite3_context cx);
-  }
 }
index 7b19c5dc72b060d01b3e6b399f2df9bad80bae18..6c1ec796db2aa0a76e4f627f79ee4c9d1f3cc302 100644 (file)
@@ -519,9 +519,9 @@ public final class SQLite3Jni {
      sqlite3_create_function_v2(), and
      sqlite3_create_window_function(). Which one it behaves like
      depends on which methods the final argument implements. See
-     SQLFunction's inner classes (Scalar, Aggregate<T>, and Window<T>)
-     for details.
-   */
+     SQLFunction's subclasses (ScalarFunction, AggregateFunction<T>,
+     and WindowFunction<T>) for details.
+  */
   public static native int sqlite3_create_function(
     @NotNull sqlite3 db, @NotNull String functionName,
     int nArg, int eTextRep, @NotNull SQLFunction func
diff --git a/ext/jni/src/org/sqlite/jni/ScalarFunction.java b/ext/jni/src/org/sqlite/jni/ScalarFunction.java
new file mode 100644 (file)
index 0000000..9d75dbd
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+** 2023-08-25
+**
+** 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 is part of the JNI bindings for the sqlite3 C API.
+*/
+package org.sqlite.jni;
+
+
+/**
+   SQLFunction subclass for creating scalar functions.
+*/
+public abstract class ScalarFunction extends SQLFunction {
+  /**
+     As for the xFunc() argument of the C API's
+     sqlite3_create_function(). If this function throws, it is
+     translated into an sqlite3_result_error().
+  */
+  public abstract void xFunc(sqlite3_context cx, sqlite3_value[] args);
+
+  /**
+     Optionally override to be notified when the UDF is finalized by
+     SQLite.
+  */
+  public void xDestroy() {}
+}
index 3af676394d96311d85cf54423188ef6d33b12dd6..5d3712f2d6e15e97ae663644a65c87b32247c4a0 100644 (file)
@@ -612,7 +612,7 @@ public class Tester1 implements Runnable {
       // Each of the 3 subclasses requires a different set of
       // functions, all of which must be implemented.  Anonymous
       // classes are a convenient way to implement these.
-      new SQLFunction.Scalar(){
+      new ScalarFunction(){
         public void xFunc(sqlite3_context cx, sqlite3_value[] args){
           affirm(db == sqlite3_context_db_handle(cx));
           int result = 0;
@@ -648,7 +648,7 @@ public class Tester1 implements Runnable {
     final sqlite3 db = createNewDb();
     final ValueHolder<Integer> xFuncAccum = new ValueHolder<>(0);
 
-    SQLFunction funcAgg = new SQLFunction.Aggregate<Integer>(){
+    SQLFunction funcAgg = new AggregateFunction<Integer>(){
         @Override public void xStep(sqlite3_context cx, sqlite3_value[] args){
           /** Throwing from here should emit loud noise on stdout or stderr
               but the exception is supressed because we have no way to inform
@@ -668,7 +668,7 @@ public class Tester1 implements Runnable {
     affirm( 0 != rc );
     affirm( sqlite3_errmsg(db).indexOf("an xFinal") > 0 );
 
-    SQLFunction funcSc = new SQLFunction.Scalar(){
+    SQLFunction funcSc = new ScalarFunction(){
         @Override public void xFunc(sqlite3_context cx, sqlite3_value[] args){
           throw new RuntimeException("Throwing from an xFunc");
         }
@@ -689,7 +689,7 @@ public class Tester1 implements Runnable {
   private void testUdfJavaObject(){
     final sqlite3 db = createNewDb();
     final ValueHolder<sqlite3> testResult = new ValueHolder<>(db);
-    final SQLFunction func = new SQLFunction.Scalar(){
+    final SQLFunction func = new ScalarFunction(){
         public void xFunc(sqlite3_context cx, sqlite3_value args[]){
           sqlite3_result_java_object(cx, testResult.value);
         }
@@ -721,7 +721,7 @@ public class Tester1 implements Runnable {
       // To confirm that xFinal() is called with no aggregate state
       // when the corresponding result set is empty.
       new ValueHolder<>(false);
-    SQLFunction func = new SQLFunction.Aggregate<Integer>(){
+    SQLFunction func = new AggregateFunction<Integer>(){
         @Override
         public void xStep(sqlite3_context cx, sqlite3_value[] args){
           final ValueHolder<Integer> agg = this.getAggregateState(cx, 0);
@@ -787,7 +787,7 @@ public class Tester1 implements Runnable {
     final sqlite3 db = createNewDb();
     /* Example window function, table, and results taken from:
        https://sqlite.org/windowfunctions.html#udfwinfunc */
-    final SQLFunction func = new SQLFunction.Window<Integer>(){
+    final SQLFunction func = new WindowFunction<Integer>(){
 
         private void xStepInverse(sqlite3_context cx, int v){
           this.getAggregateState(cx,0).value += v;
diff --git a/ext/jni/src/org/sqlite/jni/WindowFunction.java b/ext/jni/src/org/sqlite/jni/WindowFunction.java
new file mode 100644 (file)
index 0000000..c083312
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+** 2023-08-25
+**
+** 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 is part of the JNI bindings for the sqlite3 C API.
+*/
+package org.sqlite.jni;
+
+
+/**
+   An SQLFunction subclass for creating window functions.  Note that
+   Window<T> inherits from Aggregate<T> and each instance is
+   required to implement the inherited abstract methods from that
+   class. See Aggregate<T> for information on managing the UDF's
+   invocation-specific state.
+*/
+public abstract class WindowFunction<T> extends AggregateFunction<T> {
+
+  /**
+     As for the xInverse() argument of the C API's
+     sqlite3_create_window_function(). If this function throws, the
+     exception is not propagated and a warning might be emitted
+     to a debugging channel.
+  */
+  public abstract void xInverse(sqlite3_context cx, sqlite3_value[] args);
+
+  /**
+     As for the xValue() argument of the C API's sqlite3_create_window_function().
+     See xInverse() for the fate of any exceptions this throws.
+  */
+  public abstract void xValue(sqlite3_context cx);
+}
index 9640199ae77e8edb94c2737d2915fc29af74ba42..99bb0026234f16fc8e28ffcdd721a5002b9e7d57 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Missed\sa\sstraggler\swhen\srenaming\sJava\sclasses\sin\s[8ca528006533ac1].\sDocument\sthreading\slimitations.
-D 2023-08-25T16:26:16.517
+C Move\sthe\s3\sJava\sSQLFunction\ssubclasses\sfrom\sinner\sclasses\sto\spackage\sscope.
+D 2023-08-25T16:43:51.353
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -233,15 +233,16 @@ 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 4fed859fb183595826e02213761b361c40d2f43959f0f119d322738892c29357
+F ext/jni/GNUmakefile b28f8b304ef97db8250857cb463aea1b329bfcb584a2902d4c1a490a831e2c9d
 F ext/jni/README.md 1332b1fa27918bd5d9ca2d0d4f3ac3a6ab86b9e3699dc5bfe32904a027f3d2a9
 F ext/jni/jar-dist.make 030aaa4ae71dd86e4ec5e7c1e6cd86f9dfa47c4592c070d2e35157e42498e1fa
 F ext/jni/src/c/sqlite3-jni.c 29c10d96f81361b0d121e389320a1dd57958fd758e3790817542d2eb20c42bed
 F ext/jni/src/c/sqlite3-jni.h 2745c4abd0933a4e8cc48989fffbad3936b4eaada64cce9ce11453dcd30e4184
+F ext/jni/src/org/sqlite/jni/AggregateFunction.java e0aac6ccae05702f8ee779820570866a2760aaa57a73135c57c8d3580bef52d5
 F ext/jni/src/org/sqlite/jni/AuthorizerCallback.java c374bb76409cce7a0bdba94877706b59ac6127fa5d9e6af3e8058c99ce99c030
 F ext/jni/src/org/sqlite/jni/AutoExtensionCallback.java 4290d8b0937b07d466b50e6ca4136cec037f3ce658277af0d0c2d371e5f4b459
 F ext/jni/src/org/sqlite/jni/BusyHandlerCallback.java 99248b76e9b124f60a25329309ac6a03c197b3e1a493e8f8ae2e577651ea58e5
-F ext/jni/src/org/sqlite/jni/CollationCallback.java 4391351e10f26ca61e9c461f969c12f36e0146e50a8c5b66ff549142bbf41f64 w ext/jni/src/org/sqlite/jni/Collation.java
+F ext/jni/src/org/sqlite/jni/CollationCallback.java 4391351e10f26ca61e9c461f969c12f36e0146e50a8c5b66ff549142bbf41f64
 F ext/jni/src/org/sqlite/jni/CollationNeededCallback.java b2adbe0cb41b67bcb638885e00950abe0265e885326a96451f6ab114fb11ef59
 F ext/jni/src/org/sqlite/jni/CommitHookCallback.java c2b4deec20acf9c72ab487ba1a408c54cb5cc12c45baa46490b555b80bd3579f
 F ext/jni/src/org/sqlite/jni/ConfigSqllogCallback.java e3656909eab7ed0f7e457c5b82df160ca22dd5e954c0a306ec1fca61b0d266b4
@@ -259,14 +260,16 @@ F ext/jni/src/org/sqlite/jni/PreupdateHookCallback.java 8925c58797a90caeb4a7728a
 F ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java 7c46660c6b07a765a3f053ae06a10d7ccb4966b49979143d605a3bfb4f14f806
 F ext/jni/src/org/sqlite/jni/ResultCode.java ba701f20213a5f259e94cfbfdd36eb7ac7ce7797f2c6c7fca2004ff12ce20f86
 F ext/jni/src/org/sqlite/jni/RollbackHookCallback.java be7f7a26d1102fb514d835e11198d51302af8053d97188bfb2e34c2133208568
-F ext/jni/src/org/sqlite/jni/SQLFunction.java f6842d587c6366d4ebd565b533a288efc978d56ab2d4f52f2e74b64c8e6a33f3
+F ext/jni/src/org/sqlite/jni/SQLFunction.java d060f302b2cc4cf7a4f5a6b2d36458a2e6fc9648374b5d09c36a43665af41207
 F ext/jni/src/org/sqlite/jni/SQLite3CallbackProxy.java 13c4ea6f35871261eba63fa4117715515e0beecbdebfb879ec5b1f340ed36904
-F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 17aebe15820b525678839c5e12160a7ca77b1691e59c8fb7c08b05757bea9553
-F ext/jni/src/org/sqlite/jni/Tester1.java 882755ac7a437ecde721084a0839b524199fa9857a7878d16a20848a7187093f
+F ext/jni/src/org/sqlite/jni/SQLite3Jni.java cb3040fcfe35199bb10b4bca2cc541ca383563f85c9b460412c3bd15f413ae23
+F ext/jni/src/org/sqlite/jni/ScalarFunction.java 21301a947e49f0dd9c682dfe2cc8a6518226c837253dd791cd512f847eeca52c
+F ext/jni/src/org/sqlite/jni/Tester1.java 1a9c6c8252d854398e37f5e4f8d9f66de0fd4767e60e43af26f4fdc681fab8b9
 F ext/jni/src/org/sqlite/jni/TesterFts5.java 6f135c60e24c89e8eecb9fe61dde0f3bb2906de668ca6c9186bcf34bdaf94629
 F ext/jni/src/org/sqlite/jni/TraceV2Callback.java 25a45e800b0c57f506c237d111bcfd09da584e936fee395d4bd802100ebeff8c
 F ext/jni/src/org/sqlite/jni/UpdateHookCallback.java f5eadfa44462c050658230884b41477274f34306accd85c8201a7afbc00d2429
 F ext/jni/src/org/sqlite/jni/ValueHolder.java f022873abaabf64f3dd71ab0d6037c6e71cece3b8819fa10bf26a5461dc973ee
+F ext/jni/src/org/sqlite/jni/WindowFunction.java 3e24a0f2615f9a232b1ecbb3f243b05dd7c007dc43be238499af93a459fe8253
 F ext/jni/src/org/sqlite/jni/XDestroyCallback.java a43c6fad4d550c40d7ad2545565dd794df68aae855a7a6fe2d5f57ccbfc0e7d6
 F ext/jni/src/org/sqlite/jni/fts5_api.java 5198be71c162e3e0cb1f4962a7cdf0d7596e8af53f70c4af6db24aab8d53d9ba
 F ext/jni/src/org/sqlite/jni/fts5_extension_function.java ac825035d7d83fc7fd960347abfa6803e1614334a21533302041823ad5fc894c
@@ -2100,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 8ca528006533ac152e9b322e421cf5d339414c77332d9836a9ff429b793d0d2d
-R 5885805208dd5a9cb4303aef998be394
+P 5786b95f5d09b4462aff0fdeac37992a2b64c47b004d18960f51e4e6a5796106
+R 7f0497e9841cedff7936a9c02791fa84
 U stephan
-Z 3728ae49651cf5a3340c3d5aa589c6ef
+Z 3ac21aead20aa0563125716a8691ad77
 # Remove this line to create a well-formed Fossil manifest.
index 7f7db679d9c57c4cb90e2c87e8820b389c8453ca..9e2cd43c623dfc7916afcdc5326a8d2a0731b2e6 100644 (file)
@@ -1 +1 @@
-5786b95f5d09b4462aff0fdeac37992a2b64c47b004d18960f51e4e6a5796106
\ No newline at end of file
+21fd47a68db9df1828f4cc4131d326a193b5751d56a40ae77ed0a78dc0621af1
\ No newline at end of file