1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Start adding fts5_api to JNI.

FossilOrigin-Name: 14d18fe983c83412d72fd2005a45a2b8c48d347b7bbf8ef9630ae460cff85c32
This commit is contained in:
stephan
2023-08-05 01:28:30 +00:00
parent 0c179dd5b4
commit 977b6919f2
9 changed files with 133 additions and 38 deletions

View File

@@ -150,7 +150,9 @@ sqlite3-jni.c := $(dir.src.c)/sqlite3-jni.c
sqlite3-jni.o := $(dir.bld.c)/sqlite3-jni.o sqlite3-jni.o := $(dir.bld.c)/sqlite3-jni.o
sqlite3-jni.h.in := $(dir.bld.c)/org_sqlite_jni_SQLite3Jni.h sqlite3-jni.h.in := $(dir.bld.c)/org_sqlite_jni_SQLite3Jni.h
ifeq (1,$(enable.fts5)) ifeq (1,$(enable.fts5))
sqlite3-jni.h.in += $(dir.bld.c)/org_sqlite_jni_Fts5ExtensionApi.h sqlite3-jni.h.in += \
$(dir.bld.c)/org_sqlite_jni_Fts5ExtensionApi.h \
$(dir.bld.c)/org_sqlite_jni_fts5_api.h
endif endif
sqlite3-jni.h := $(dir.src.c)/sqlite3-jni.h sqlite3-jni.h := $(dir.src.c)/sqlite3-jni.h
sqlite3-jni.dll := $(dir.bld.c)/libsqlite3-jni.so sqlite3-jni.dll := $(dir.bld.c)/libsqlite3-jni.so

View File

@@ -432,6 +432,9 @@ struct PerDbStateJni {
JniHookState rollbackHook; JniHookState rollbackHook;
JniHookState trace; JniHookState trace;
JniHookState updateHook; JniHookState updateHook;
#ifdef SQLITE_ENABLE_FTS5
jobject jFtsApi /* global ref to s3jni_fts5_api_from_db() */;
#endif
PerDbStateJni * pNext /* Next entry in the available/free list */; PerDbStateJni * pNext /* Next entry in the available/free list */;
PerDbStateJni * pPrev /* Previous entry in the available/free list */; PerDbStateJni * pPrev /* Previous entry in the available/free list */;
}; };
@@ -805,6 +808,9 @@ static void PerDbStateJni_set_aside(PerDbStateJni * const s){
UNHOOK(busyHandler, 1); UNHOOK(busyHandler, 1);
#undef UNHOOK #undef UNHOOK
UNREF_G(s->jDb); UNREF_G(s->jDb);
#ifdef SQLITE_ENABLE_FTS5
UNREF_G(s->jFtsApi);
#endif
memset(s, 0, sizeof(PerDbStateJni)); memset(s, 0, sizeof(PerDbStateJni));
s->pNext = S3Global.perDb.aFree; s->pNext = S3Global.perDb.aFree;
if(s->pNext) s->pNext->pPrev = s; if(s->pNext) s->pNext->pPrev = s;
@@ -2626,12 +2632,17 @@ JDECL(void,1do_1something_1for_1developer)(JENV_JSELF){
#ifdef SQLITE_ENABLE_FTS5 #ifdef SQLITE_ENABLE_FTS5
/* Creates a verbose JNI Fts5 function name. */ /* Creates a verbose JNI Fts5 function name. */
#define JFuncNameFts5Ext(Suffix) \ #define JFuncNameFtsXA(Suffix) \
Java_org_sqlite_jni_Fts5ExtensionApi_ ## Suffix Java_org_sqlite_jni_Fts5ExtensionApi_ ## Suffix
#define JFuncNameFtsApi(Suffix) \
Java_org_sqlite_jni_fts5_1api_ ## Suffix
#define JDECLFts(ReturnType,Suffix) \ #define JDECLFtsXA(ReturnType,Suffix) \
JNIEXPORT ReturnType JNICALL \ JNIEXPORT ReturnType JNICALL \
JFuncNameFts5Ext(Suffix) JFuncNameFtsXA(Suffix)
#define JDECLFtsApi(ReturnType,Suffix) \
JNIEXPORT ReturnType JNICALL \
JFuncNameFtsApi(Suffix)
#define PtrGet_Fts5Context(OBJ) getNativePointer(env,OBJ,S3ClassNames.Fts5Context) #define PtrGet_Fts5Context(OBJ) getNativePointer(env,OBJ,S3ClassNames.Fts5Context)
static inline Fts5ExtensionApi const * s3jni_ftsext(void){ static inline Fts5ExtensionApi const * s3jni_ftsext(void){
@@ -2644,6 +2655,9 @@ static jobject new_Fts5Context_wrapper(JNIEnv * const env, Fts5Context *sv){
return new_NativePointerHolder_object(env, S3ClassNames.Fts5Context, sv); return new_NativePointerHolder_object(env, S3ClassNames.Fts5Context, sv);
} }
#endif #endif
static jobject new_fts5_api_wrapper(JNIEnv * const env, fts5_api *sv){
return new_NativePointerHolder_object(env, S3ClassNames.fts5_api, sv);
}
static jobject s3jni_getFts5ExensionApi(JNIEnv * const env){ static jobject s3jni_getFts5ExensionApi(JNIEnv * const env){
JNIEnvCacheLine * const row = S3Global_env_cache(env); JNIEnvCacheLine * const row = S3Global_env_cache(env);
@@ -2655,16 +2669,49 @@ static jobject s3jni_getFts5ExensionApi(JNIEnv * const env){
return row->jFtsExt; return row->jFtsExt;
} }
JDECLFts(jobject,getInstance)(JENV_JSELF){ /*
** Return a pointer to the fts5_api pointer for database connection db.
** If an error occurs, return NULL and leave an error in the database
** handle (accessible using sqlite3_errcode()/errmsg()).
*/
static fts5_api *s3jni_fts5_api_from_db(sqlite3 *db){
fts5_api *pRet = 0;
sqlite3_stmt *pStmt = 0;
if( SQLITE_OK==sqlite3_prepare(db, "SELECT fts5(?1)", -1, &pStmt, 0) ){
sqlite3_bind_pointer(pStmt, 1, (void*)&pRet, "fts5_api_ptr", NULL);
sqlite3_step(pStmt);
}
sqlite3_finalize(pStmt);
return pRet;
}
JDECLFtsApi(jobject,getInstanceForDb)(JENV_JSELF,jobject jDb){
PerDbStateJni * const ps = PerDbStateJni_for_db(env, jDb, 0, 0);
jobject rv = 0;
if(!ps) return 0;
else if(ps->jFtsApi){
rv = ps->jFtsApi;
}else{
fts5_api * const pApi = s3jni_fts5_api_from_db(ps->pDb);
if( pApi ){
rv = new_fts5_api_wrapper(env, pApi);
ps->jFtsApi = rv ? REF_G(rv) : 0;
}
}
return rv;
}
JDECLFtsXA(jobject,getInstance)(JENV_JSELF){
return s3jni_getFts5ExensionApi(env); return s3jni_getFts5ExensionApi(env);
} }
JDECLFts(jint,xColumnCount)(JENV_JSELF,jobject jCtx){ JDECLFtsXA(jint,xColumnCount)(JENV_JSELF,jobject jCtx){
Fts5ExtDecl; Fts5ExtDecl;
return (jint)fext->xColumnCount(PtrGet_Fts5Context(jCtx)); return (jint)fext->xColumnCount(PtrGet_Fts5Context(jCtx));
} }
JDECLFts(jint,xColumnSize)(JENV_JSELF,jobject jCtx, jint iIdx, jobject jOut32){ JDECLFtsXA(jint,xColumnSize)(JENV_JSELF,jobject jCtx, jint iIdx, jobject jOut32){
Fts5ExtDecl; Fts5ExtDecl;
int n1 = 0; int n1 = 0;
int const rc = fext->xColumnSize(PtrGet_Fts5Context(jCtx), (int)iIdx, &n1); int const rc = fext->xColumnSize(PtrGet_Fts5Context(jCtx), (int)iIdx, &n1);
@@ -2672,7 +2719,7 @@ JDECLFts(jint,xColumnSize)(JENV_JSELF,jobject jCtx, jint iIdx, jobject jOut32){
return rc; return rc;
} }
JDECLFts(jint,xColumnText)(JENV_JSELF,jobject jCtx, jint iCol, JDECLFtsXA(jint,xColumnText)(JENV_JSELF,jobject jCtx, jint iCol,
jobject jOutBA){ jobject jOutBA){
Fts5ExtDecl; Fts5ExtDecl;
const char *pz = 0; const char *pz = 0;
@@ -2704,7 +2751,7 @@ JDECLFts(jint,xColumnText)(JENV_JSELF,jobject jCtx, jint iCol,
return (jint)rc; return (jint)rc;
} }
JDECLFts(jint,xColumnTotalSize)(JENV_JSELF,jobject jCtx, jint iCol, jobject jOut64){ JDECLFtsXA(jint,xColumnTotalSize)(JENV_JSELF,jobject jCtx, jint iCol, jobject jOut64){
Fts5ExtDecl; Fts5ExtDecl;
sqlite3_int64 nOut = 0; sqlite3_int64 nOut = 0;
int const rc = fext->xColumnTotalSize(PtrGet_Fts5Context(jCtx), (int)iCol, &nOut); int const rc = fext->xColumnTotalSize(PtrGet_Fts5Context(jCtx), (int)iCol, &nOut);
@@ -2730,7 +2777,7 @@ static void s3jni_fts5AuxData_xDestroy(void *x){
} }
} }
JDECLFts(jobject,xGetAuxdata)(JENV_JSELF,jobject jCtx, jboolean bClear){ JDECLFtsXA(jobject,xGetAuxdata)(JENV_JSELF,jobject jCtx, jboolean bClear){
Fts5ExtDecl; Fts5ExtDecl;
jobject rv = 0; jobject rv = 0;
s3jni_fts5AuxData * const pAux = fext->xGetAuxdata(PtrGet_Fts5Context(jCtx), bClear); s3jni_fts5AuxData * const pAux = fext->xGetAuxdata(PtrGet_Fts5Context(jCtx), bClear);
@@ -2749,7 +2796,7 @@ JDECLFts(jobject,xGetAuxdata)(JENV_JSELF,jobject jCtx, jboolean bClear){
return rv; return rv;
} }
JDECLFts(jint,xInst)(JENV_JSELF,jobject jCtx, jint iIdx, jobject jOutPhrase, JDECLFtsXA(jint,xInst)(JENV_JSELF,jobject jCtx, jint iIdx, jobject jOutPhrase,
jobject jOutCol, jobject jOutOff){ jobject jOutCol, jobject jOutOff){
Fts5ExtDecl; Fts5ExtDecl;
int n1 = 0, n2 = 2, n3 = 0; int n1 = 0, n2 = 2, n3 = 0;
@@ -2762,7 +2809,7 @@ JDECLFts(jint,xInst)(JENV_JSELF,jobject jCtx, jint iIdx, jobject jOutPhrase,
return rc; return rc;
} }
JDECLFts(jint,xInstCount)(JENV_JSELF,jobject jCtx, jobject jOut32){ JDECLFtsXA(jint,xInstCount)(JENV_JSELF,jobject jCtx, jobject jOut32){
Fts5ExtDecl; Fts5ExtDecl;
int nOut = 0; int nOut = 0;
int const rc = fext->xInstCount(PtrGet_Fts5Context(jCtx), &nOut); int const rc = fext->xInstCount(PtrGet_Fts5Context(jCtx), &nOut);
@@ -2770,7 +2817,7 @@ JDECLFts(jint,xInstCount)(JENV_JSELF,jobject jCtx, jobject jOut32){
return (jint)rc; return (jint)rc;
} }
JDECLFts(jint,xPhraseCount)(JENV_JSELF,jobject jCtx){ JDECLFtsXA(jint,xPhraseCount)(JENV_JSELF,jobject jCtx){
Fts5ExtDecl; Fts5ExtDecl;
return (jint)fext->xPhraseCount(PtrGet_Fts5Context(jCtx)); return (jint)fext->xPhraseCount(PtrGet_Fts5Context(jCtx));
} }
@@ -2814,7 +2861,7 @@ static void s3jni_phraseIter_JToN(JNIEnv *const env, JNIEnvCacheLine const * con
EXCEPTION_IS_FATAL("Cannot get Fts5PhraseIter.b field."); EXCEPTION_IS_FATAL("Cannot get Fts5PhraseIter.b field.");
} }
JDECLFts(jint,xPhraseFirst)(JENV_JSELF,jobject jCtx, jint iPhrase, JDECLFtsXA(jint,xPhraseFirst)(JENV_JSELF,jobject jCtx, jint iPhrase,
jobject jIter, jobject jOutCol, jobject jIter, jobject jOutCol,
jobject jOutOff){ jobject jOutOff){
Fts5ExtDecl; Fts5ExtDecl;
@@ -2832,7 +2879,7 @@ JDECLFts(jint,xPhraseFirst)(JENV_JSELF,jobject jCtx, jint iPhrase,
return rc; return rc;
} }
JDECLFts(jint,xPhraseFirstColumn)(JENV_JSELF,jobject jCtx, jint iPhrase, JDECLFtsXA(jint,xPhraseFirstColumn)(JENV_JSELF,jobject jCtx, jint iPhrase,
jobject jIter, jobject jOutCol){ jobject jIter, jobject jOutCol){
Fts5ExtDecl; Fts5ExtDecl;
JNIEnvCacheLine * const jc = S3Global_env_cache(env); JNIEnvCacheLine * const jc = S3Global_env_cache(env);
@@ -2848,7 +2895,7 @@ JDECLFts(jint,xPhraseFirstColumn)(JENV_JSELF,jobject jCtx, jint iPhrase,
return rc; return rc;
} }
JDECLFts(void,xPhraseNext)(JENV_JSELF,jobject jCtx, jobject jIter, JDECLFtsXA(void,xPhraseNext)(JENV_JSELF,jobject jCtx, jobject jIter,
jobject jOutCol, jobject jOutOff){ jobject jOutCol, jobject jOutOff){
Fts5ExtDecl; Fts5ExtDecl;
JNIEnvCacheLine * const jc = S3Global_env_cache(env); JNIEnvCacheLine * const jc = S3Global_env_cache(env);
@@ -2863,7 +2910,7 @@ JDECLFts(void,xPhraseNext)(JENV_JSELF,jobject jCtx, jobject jIter,
s3jni_phraseIter_NToJ(env, jc, &iter, jIter); s3jni_phraseIter_NToJ(env, jc, &iter, jIter);
} }
JDECLFts(void,xPhraseNextColumn)(JENV_JSELF,jobject jCtx, jobject jIter, JDECLFtsXA(void,xPhraseNextColumn)(JENV_JSELF,jobject jCtx, jobject jIter,
jobject jOutCol){ jobject jOutCol){
Fts5ExtDecl; Fts5ExtDecl;
JNIEnvCacheLine * const jc = S3Global_env_cache(env); JNIEnvCacheLine * const jc = S3Global_env_cache(env);
@@ -2877,7 +2924,7 @@ JDECLFts(void,xPhraseNextColumn)(JENV_JSELF,jobject jCtx, jobject jIter,
} }
JDECLFts(jint,xPhraseSize)(JENV_JSELF,jobject jCtx, jint iPhrase){ JDECLFtsXA(jint,xPhraseSize)(JENV_JSELF,jobject jCtx, jint iPhrase){
Fts5ExtDecl; Fts5ExtDecl;
return (jint)fext->xPhraseSize(PtrGet_Fts5Context(jCtx), (int)iPhrase); return (jint)fext->xPhraseSize(PtrGet_Fts5Context(jCtx), (int)iPhrase);
} }
@@ -2917,7 +2964,7 @@ static int s3jni_xQueryPhrase(const Fts5ExtensionApi *xapi,
return rc; return rc;
} }
JDECLFts(jint,xQueryPhrase)(JENV_JSELF,jobject jFcx, jint iPhrase, JDECLFtsXA(jint,xQueryPhrase)(JENV_JSELF,jobject jFcx, jint iPhrase,
jobject jCallback){ jobject jCallback){
Fts5ExtDecl; Fts5ExtDecl;
JNIEnvCacheLine * const jc = S3Global_env_cache(env); JNIEnvCacheLine * const jc = S3Global_env_cache(env);
@@ -2941,7 +2988,7 @@ JDECLFts(jint,xQueryPhrase)(JENV_JSELF,jobject jFcx, jint iPhrase,
} }
JDECLFts(jint,xRowCount)(JENV_JSELF,jobject jCtx, jobject jOut64){ JDECLFtsXA(jint,xRowCount)(JENV_JSELF,jobject jCtx, jobject jOut64){
Fts5ExtDecl; Fts5ExtDecl;
sqlite3_int64 nOut = 0; sqlite3_int64 nOut = 0;
int const rc = fext->xRowCount(PtrGet_Fts5Context(jCtx), &nOut); int const rc = fext->xRowCount(PtrGet_Fts5Context(jCtx), &nOut);
@@ -2949,12 +2996,12 @@ JDECLFts(jint,xRowCount)(JENV_JSELF,jobject jCtx, jobject jOut64){
return (jint)rc; return (jint)rc;
} }
JDECLFts(jlong,xRowid)(JENV_JSELF,jobject jCtx){ JDECLFtsXA(jlong,xRowid)(JENV_JSELF,jobject jCtx){
Fts5ExtDecl; Fts5ExtDecl;
return (jlong)fext->xRowid(PtrGet_Fts5Context(jCtx)); return (jlong)fext->xRowid(PtrGet_Fts5Context(jCtx));
} }
JDECLFts(int,xSetAuxdata)(JENV_JSELF,jobject jCtx, jobject jAux){ JDECLFtsXA(int,xSetAuxdata)(JENV_JSELF,jobject jCtx, jobject jAux){
Fts5ExtDecl; Fts5ExtDecl;
int rc; int rc;
s3jni_fts5AuxData * pAux; s3jni_fts5AuxData * pAux;
@@ -3005,7 +3052,7 @@ static int s3jni_xTokenize_xToken(void *p, int tFlags, const char* z,
return rc; return rc;
} }
JDECLFts(jint,xTokenize)(JENV_JSELF,jobject jFcx, jbyteArray jbaText, JDECLFtsXA(jint,xTokenize)(JENV_JSELF,jobject jFcx, jbyteArray jbaText,
jobject jCallback){ jobject jCallback){
Fts5ExtDecl; Fts5ExtDecl;
JNIEnvCacheLine * const jc = S3Global_env_cache(env); JNIEnvCacheLine * const jc = S3Global_env_cache(env);

View File

@@ -1780,3 +1780,24 @@ JNIEXPORT jint JNICALL Java_org_sqlite_jni_Fts5ExtensionApi_xTokenize
} }
#endif #endif
#endif #endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_sqlite_jni_fts5_api */
#ifndef _Included_org_sqlite_jni_fts5_api
#define _Included_org_sqlite_jni_fts5_api
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_sqlite_jni_fts5_api
* Method: getInstanceForDb
* Signature: (Lorg/sqlite/jni/sqlite3;)Lorg/sqlite/jni/fts5_api;
*/
JNIEXPORT jobject JNICALL Java_org_sqlite_jni_fts5_1api_getInstanceForDb
(JNIEnv *, jclass, jobject);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -25,7 +25,7 @@ import java.nio.charset.StandardCharsets;
public final class Fts5ExtensionApi extends NativePointerHolder<Fts5ExtensionApi> { public final class Fts5ExtensionApi extends NativePointerHolder<Fts5ExtensionApi> {
//! Only called from JNI //! Only called from JNI
private Fts5ExtensionApi(){} private Fts5ExtensionApi(){}
private int iVersion; private int iVersion = 2;
//! Callback type for use with xTokenize(). //! Callback type for use with xTokenize().
public static interface xTokenizeCallback { public static interface xTokenizeCallback {

View File

@@ -914,16 +914,25 @@ public class Tester1 {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static void testFts5(){ private static void testFts5(){
Exception err = null;
try { try {
Class t = Class.forName("org.sqlite.jni.TesterFts5"); Class t = Class.forName("org.sqlite.jni.TesterFts5");
java.lang.reflect.Constructor ctor = t.getConstructor(); java.lang.reflect.Constructor ctor = t.getConstructor();
ctor.setAccessible(true);
ctor.newInstance(); ctor.newInstance();
}catch(ClassNotFoundException e){ }catch(ClassNotFoundException e){
outln("FTS5 classes not loaded. Skipping FTS tests."); outln("FTS5 classes not loaded. Skipping FTS tests.");
err = e;
}catch(NoSuchMethodException e){ }catch(NoSuchMethodException e){
outln("FTS5 tester ctor not found. Skipping FTS tests."); outln("FTS5 tester ctor not found. Skipping FTS tests.");
err = e;
}catch(Exception e){ }catch(Exception e){
outln("FTS5 tester cannot be instantiated. Skipping FTS tests."); outln("FTS5 tester cannot be instantiated. Skipping FTS tests.");
err = e;
}
if( null != err ){
outln("Exception: "+err);
err.printStackTrace();
} }
} }

View File

@@ -22,6 +22,12 @@ public class TesterFts5 {
affirm( null != fea ); affirm( null != fea );
affirm( fea.getNativePointer() != 0 ); affirm( fea.getNativePointer() != 0 );
affirm( fea == Fts5ExtensionApi.getInstance() )/*singleton*/; affirm( fea == Fts5ExtensionApi.getInstance() )/*singleton*/;
sqlite3 db = createNewDb();
fts5_api fApi = fts5_api.getInstanceForDb(db);
affirm( fApi != null );
affirm( fApi == fts5_api.getInstanceForDb(db) /* singleton per db */ );
sqlite3_close_v2(db);
} }
public TesterFts5(){ public TesterFts5(){

View File

@@ -14,10 +14,20 @@
package org.sqlite.jni; package org.sqlite.jni;
/** /**
INCOMPLETE AND COMPLETELY UNTESTED.
A wrapper for communicating C-level (fts5_api*) instances with A wrapper for communicating C-level (fts5_api*) instances with
Java. These wrappers do not own their associated pointer, they Java. These wrappers do not own their associated pointer, they
simply provide a type-safe way to communicate it between Java and C simply provide a type-safe way to communicate it between Java and C
via JNI. via JNI.
*/ */
public final class fts5_api extends NativePointerHolder<fts5_api> { public final class fts5_api extends NativePointerHolder<fts5_api> {
/* Only invoked by JNI */
private fts5_api(){}
/**
Returns the fts5_api instance associated with the given db, or
null if something goes horribly wrong.
*/
public static native fts5_api getInstanceForDb(@NotNull sqlite3 db);
} }

View File

@@ -1,5 +1,5 @@
C Bind\sthe\sremaining\sFts5ExtensionApi\smethods\sto\sJNI,\snoting\sthat\sall\sare\scompletely\suntested\sbecause\sthe\shigher-level\sbits\sneeded\sto\sdo\sso\sare\sstill\smissing. C Start\sadding\sfts5_api\sto\sJNI.
D 2023-08-05T00:40:28.312 D 2023-08-05T01:28:30.501
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -230,16 +230,16 @@ F ext/fts5/tool/showfts5.tcl d54da0e067306663e2d5d523965ca487698e722c
F ext/icu/README.txt 7ab7ced8ae78e3a645b57e78570ff589d4c672b71370f5aa9e1cd7024f400fc9 F ext/icu/README.txt 7ab7ced8ae78e3a645b57e78570ff589d4c672b71370f5aa9e1cd7024f400fc9
F ext/icu/icu.c c074519b46baa484bb5396c7e01e051034da8884bad1a1cb7f09bbe6be3f0282 F ext/icu/icu.c c074519b46baa484bb5396c7e01e051034da8884bad1a1cb7f09bbe6be3f0282
F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a32075a8 F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a32075a8
F ext/jni/GNUmakefile 83f8f1c5a76714b3034815631587336c9b5bb345a325bde118a6909e2f18b16f F ext/jni/GNUmakefile 9d916736e5af011664a38d27296692e237afaed41b0843f4de4e1a6136df18d3
F ext/jni/README.md 6ff7e1f4100dee980434a6ee37a199b653bceec62e233a6e2ccde6e7ae0c58bf F ext/jni/README.md 6ff7e1f4100dee980434a6ee37a199b653bceec62e233a6e2ccde6e7ae0c58bf
F ext/jni/src/c/sqlite3-jni.c c4255b2371189c347734883a80bf9adf656e42f9fdd2c6507599da6b373d244a F ext/jni/src/c/sqlite3-jni.c 8c62ed298ccbe46f1b59a1ce9957a75ad8426c5dd065168316d9d2e97e54988b
F ext/jni/src/c/sqlite3-jni.h 0dc116afb5b310c18052666e7047a9dc0085684aeaa9a88fd5449eaba0a04969 F ext/jni/src/c/sqlite3-jni.h 2e6450c923fe6a9c7246930d9518c1d7e0008d9cb5143868e8bd4a159fc88901
F ext/jni/src/org/sqlite/jni/BusyHandler.java 1b1d3e5c86cd796a0580c81b6af6550ad943baa25e47ada0dcca3aff3ebe978c F ext/jni/src/org/sqlite/jni/BusyHandler.java 1b1d3e5c86cd796a0580c81b6af6550ad943baa25e47ada0dcca3aff3ebe978c
F ext/jni/src/org/sqlite/jni/Collation.java 8dffbb00938007ad0967b2ab424d3c908413af1bbd3d212b9c9899910f1218d1 F ext/jni/src/org/sqlite/jni/Collation.java 8dffbb00938007ad0967b2ab424d3c908413af1bbd3d212b9c9899910f1218d1
F ext/jni/src/org/sqlite/jni/CollationNeeded.java ebc7cd96d46a70daa76016a308e80f70a3f21d3282787c8d139aa840fdcb1bd7 F ext/jni/src/org/sqlite/jni/CollationNeeded.java ebc7cd96d46a70daa76016a308e80f70a3f21d3282787c8d139aa840fdcb1bd7
F ext/jni/src/org/sqlite/jni/CommitHook.java 87c6a8e5138c61a8eeff018fe16d23f29219150239746032687f245938baca1a F ext/jni/src/org/sqlite/jni/CommitHook.java 87c6a8e5138c61a8eeff018fe16d23f29219150239746032687f245938baca1a
F ext/jni/src/org/sqlite/jni/Fts5Context.java 0a5a02047a6a1dd3e4a38b0e542a8dd2de365033ba30e6ae019a676305959890 F ext/jni/src/org/sqlite/jni/Fts5Context.java 0a5a02047a6a1dd3e4a38b0e542a8dd2de365033ba30e6ae019a676305959890
F ext/jni/src/org/sqlite/jni/Fts5ExtensionApi.java c041113c13b3a256f9692180ff2e9389c77236d63ab8a96ed204508f1b6ec52b F ext/jni/src/org/sqlite/jni/Fts5ExtensionApi.java 8922069cf785492b18b15b72c29557de4f10f6462c3c560d1b4827f731f46c3f
F ext/jni/src/org/sqlite/jni/Fts5Function.java 65cde7151e441fee012250a5e03277de7babcd11a0c308a832b7940574259bcc F ext/jni/src/org/sqlite/jni/Fts5Function.java 65cde7151e441fee012250a5e03277de7babcd11a0c308a832b7940574259bcc
F ext/jni/src/org/sqlite/jni/Fts5PhraseIter.java 6642beda341c0b1b46af4e2d7f6f9ab03a7aede43277b2c92859176d6bce3be9 F ext/jni/src/org/sqlite/jni/Fts5PhraseIter.java 6642beda341c0b1b46af4e2d7f6f9ab03a7aede43277b2c92859176d6bce3be9
F ext/jni/src/org/sqlite/jni/NativePointerHolder.java 9c5d901cce4f7e57c3d623f4e2476f9f79a8eed6e51b2a603f37866018e040ee F ext/jni/src/org/sqlite/jni/NativePointerHolder.java 9c5d901cce4f7e57c3d623f4e2476f9f79a8eed6e51b2a603f37866018e040ee
@@ -248,12 +248,12 @@ F ext/jni/src/org/sqlite/jni/ProgressHandler.java 5979450e996416d28543f1d42634d3
F ext/jni/src/org/sqlite/jni/RollbackHook.java b04c8abcc6ade44a8a57129e33765793f69df0ba909e49ba18d73f4268d92564 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/SQLFunction.java 09ce81c1c637e31c3a830d4c859cce95d65f5e02ff45f8bd1985b3479381bc46
F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 78496a02c7cc65a2238f54e935af070acf4e2dbef95d7cc1ff46938c440848a4 F ext/jni/src/org/sqlite/jni/SQLite3Jni.java 78496a02c7cc65a2238f54e935af070acf4e2dbef95d7cc1ff46938c440848a4
F ext/jni/src/org/sqlite/jni/Tester1.java 70df1ad81d9740cd5c10dd2c82955b861be33434ddb722fd9b67c35f7ae6fdab F ext/jni/src/org/sqlite/jni/Tester1.java ef715de2ad23ec9b982122c9e1f0dfe689d9d0d7ac6709dab2ad710811bfa50b
F ext/jni/src/org/sqlite/jni/TesterFts5.java b6952f742c968d57f6bc98c0e9c635a31cbcf0b0357f49b9d01e9b56895cf9ab F ext/jni/src/org/sqlite/jni/TesterFts5.java 0b1ab9f3675a593213b0f12fabe4fbe6fd16ed994d41a1f4150e760e087099f6
F ext/jni/src/org/sqlite/jni/Tracer.java a5cece9f947b0af27669b8baec300b6dd7ff859c3e6a6e4a1bd8b50f9714775d F ext/jni/src/org/sqlite/jni/Tracer.java a5cece9f947b0af27669b8baec300b6dd7ff859c3e6a6e4a1bd8b50f9714775d
F ext/jni/src/org/sqlite/jni/UpdateHook.java e58645a1727f8a9bbe72dc072ec5b40d9f9362cb0aa24acfe93f49ff56a9016d F ext/jni/src/org/sqlite/jni/UpdateHook.java e58645a1727f8a9bbe72dc072ec5b40d9f9362cb0aa24acfe93f49ff56a9016d
F ext/jni/src/org/sqlite/jni/ValueHolder.java f022873abaabf64f3dd71ab0d6037c6e71cece3b8819fa10bf26a5461dc973ee F ext/jni/src/org/sqlite/jni/ValueHolder.java f022873abaabf64f3dd71ab0d6037c6e71cece3b8819fa10bf26a5461dc973ee
F ext/jni/src/org/sqlite/jni/fts5_api.java 916fc40f96f1a9cb288d2d9656d88db69a684ae922c38fdf3dd947b1878bb357 F ext/jni/src/org/sqlite/jni/fts5_api.java 6ceb87a8aea27727ff5c40abf79aa2f391e9408eeeea921b7ca02c837979ca84
F ext/jni/src/org/sqlite/jni/sqlite3.java 600c3ddc1ac28ee8f58669fb435fd0d21f2972c652039361fde907d4fe44eb58 F ext/jni/src/org/sqlite/jni/sqlite3.java 600c3ddc1ac28ee8f58669fb435fd0d21f2972c652039361fde907d4fe44eb58
F ext/jni/src/org/sqlite/jni/sqlite3_context.java d26573fc7b309228cb49786e9078597d96232257defa955a3425d10897bca810 F ext/jni/src/org/sqlite/jni/sqlite3_context.java d26573fc7b309228cb49786e9078597d96232257defa955a3425d10897bca810
F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java 72a0698aeb50a183ad146cd29ee04952abb8c36021f6122656aa5ec20469f6f7 F ext/jni/src/org/sqlite/jni/sqlite3_stmt.java 72a0698aeb50a183ad146cd29ee04952abb8c36021f6122656aa5ec20469f6f7
@@ -2077,8 +2077,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 1a246fd21657f5bb13eeacc4059894ab787ea9a3c45bd9bdd3030a66643d2fef P 23383c1dfd240ce47f504dd5c3402c9a31f166fbde5bb72d91309a5655074b33
R 74dda0d2a3a66f022caa42d0cdc0fd8a R 1f7e3cb1d5a03c9cd76bc5a8ab1fdcba
U stephan U stephan
Z d7f1bdf30cf8c990e32f56e6e1648277 Z 82182ddc1d375495dd36c655052d869d
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
23383c1dfd240ce47f504dd5c3402c9a31f166fbde5bb72d91309a5655074b33 14d18fe983c83412d72fd2005a45a2b8c48d347b7bbf8ef9630ae460cff85c32