1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Export the sqlite3_keyword_...() family of functions to JNI.

FossilOrigin-Name: bd554db39159d8a538ce913d55285e3c417db8823c717a3e34bfa0678de42be7
This commit is contained in:
stephan
2023-09-03 09:28:45 +00:00
parent de4d1c357f
commit 2966b85df3
6 changed files with 84 additions and 12 deletions

View File

@ -2061,6 +2061,7 @@ WRAP_INT_DB(1error_1offset, sqlite3_error_offset)
WRAP_INT_DB(1extended_1errcode, sqlite3_extended_errcode) WRAP_INT_DB(1extended_1errcode, sqlite3_extended_errcode)
WRAP_MUTF8_VOID(1libversion, sqlite3_libversion) WRAP_MUTF8_VOID(1libversion, sqlite3_libversion)
WRAP_INT_VOID(1libversion_1number, sqlite3_libversion_number) WRAP_INT_VOID(1libversion_1number, sqlite3_libversion_number)
WRAP_INT_VOID(1keyword_1count, sqlite3_keyword_count)
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
WRAP_INT_DB(1preupdate_1blobwrite, sqlite3_preupdate_blobwrite) WRAP_INT_DB(1preupdate_1blobwrite, sqlite3_preupdate_blobwrite)
WRAP_INT_DB(1preupdate_1count, sqlite3_preupdate_count) WRAP_INT_DB(1preupdate_1count, sqlite3_preupdate_count)
@ -2398,7 +2399,7 @@ S3JniApi(sqlite3_busy_handler(),jint,1busy_1handler)(
rc = sqlite3_busy_handler(ps->pDb, s3jni_busy_handler, ps); rc = sqlite3_busy_handler(ps->pDb, s3jni_busy_handler, ps);
if( 0==rc ){ if( 0==rc ){
S3JniHook_unref(pHook); S3JniHook_unref(pHook);
*pHook = hook; *pHook = hook /* transfer Java ref ownership */;
hook = S3JniHook_empty; hook = S3JniHook_empty;
} }
}/* else no-op */ }/* else no-op */
@ -3307,6 +3308,34 @@ JniDecl(jboolean,1java_1uncache_1thread)(JniArgsEnvClass){
return rc ? JNI_TRUE : JNI_FALSE; return rc ? JNI_TRUE : JNI_FALSE;
} }
S3JniApi(sqlite3_keyword_check(),jboolean,1keyword_1check)(
JniArgsEnvClass, jstring jWord
){
int nWord = 0;
char * zWord = s3jni_jstring_to_utf8(jWord, &nWord);
int rc = 0;
s3jni_oom_check(jWord ? !!zWord : 1);
if( zWord && nWord ){
rc = sqlite3_keyword_check(zWord, nWord);
}
sqlite3_free(zWord);
return rc ? JNI_TRUE : JNI_FALSE;
}
S3JniApi(sqlite3_keyword_name(),jstring,1keyword_1name)(
JniArgsEnvClass, jint ndx
){
const char * zWord = 0;
int n = 0;
jstring rv = 0;
if( 0==sqlite3_keyword_name(ndx, &zWord, &n) ){
rv = s3jni_utf8_to_jstring(zWord, n);
}
return rv;
}
S3JniApi(sqlite3_last_insert_rowid(),jlong,1last_1insert_1rowid)( S3JniApi(sqlite3_last_insert_rowid(),jlong,1last_1insert_1rowid)(
JniArgsEnvClass, jobject jpDb JniArgsEnvClass, jobject jpDb

View File

@ -1323,6 +1323,30 @@ JNIEXPORT void JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1interrupt
JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1is_1interrupted JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1is_1interrupted
(JNIEnv *, jclass, jobject); (JNIEnv *, jclass, jobject);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_keyword_check
* Signature: (Ljava/lang/String;)Z
*/
JNIEXPORT jboolean JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1keyword_1check
(JNIEnv *, jclass, jstring);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_keyword_count
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1keyword_1count
(JNIEnv *, jclass);
/*
* Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_keyword_name
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_sqlite_jni_SQLite3Jni_sqlite3_1keyword_1name
(JNIEnv *, jclass, jint);
/* /*
* Class: org_sqlite_jni_SQLite3Jni * Class: org_sqlite_jni_SQLite3Jni
* Method: sqlite3_last_insert_rowid * Method: sqlite3_last_insert_rowid

View File

@ -543,7 +543,6 @@ public final class SQLite3Jni {
<p>Note that sqlite3_config() is not threadsafe with regards to <p>Note that sqlite3_config() is not threadsafe with regards to
the rest of the library. This must not be called when any other the rest of the library. This must not be called when any other
library APIs are being called. library APIs are being called.
*/ */
@Canonical(comment="Option subset: "+ @Canonical(comment="Option subset: "+
"SQLITE_CONFIG_SINGLETHREAD, SQLITE_CONFIG_MULTITHREAD, "+ "SQLITE_CONFIG_SINGLETHREAD, SQLITE_CONFIG_MULTITHREAD, "+
@ -682,6 +681,16 @@ public final class SQLite3Jni {
@Canonical @Canonical
public static native boolean sqlite3_is_interrupted(@NotNull sqlite3 db); public static native boolean sqlite3_is_interrupted(@NotNull sqlite3 db);
@Canonical
public static native boolean sqlite3_keyword_check(@NotNull String word);
@Canonical
public static native int sqlite3_keyword_count();
@Canonical
public static native String sqlite3_keyword_name(int index);
@Canonical @Canonical
public static native long sqlite3_last_insert_rowid(@NotNull sqlite3 db); public static native long sqlite3_last_insert_rowid(@NotNull sqlite3 db);

View File

@ -1478,6 +1478,16 @@ public class Tester1 implements Runnable {
affirm( 0!=sqlite3_complete("nope 'nope' 'nope' 1;"), "Yup" ); affirm( 0!=sqlite3_complete("nope 'nope' 'nope' 1;"), "Yup" );
} }
private void testKeyword(){
final int n = sqlite3_keyword_count();
affirm( n>0 );
affirm( !sqlite3_keyword_check("_nope_") );
affirm( sqlite3_keyword_check("seLect") );
affirm( null!=sqlite3_keyword_name(0) );
affirm( null!=sqlite3_keyword_name(n-1) );
affirm( null==sqlite3_keyword_name(n) );
}
/* Copy/paste/rename this to add new tests. */ /* Copy/paste/rename this to add new tests. */
private void _testTemplate(){ private void _testTemplate(){
final sqlite3 db = createNewDb(); final sqlite3 db = createNewDb();

View File

@ -1,5 +1,5 @@
C Add\ssqlite3_config(SQLITE_CONFIG_LOG)\ssupport\sto\sJava\sand\scorrect\sclearing\sof\sSQLITE_CONFIG_SQLLOG.\sCorrect\smissing\snames\sin\spropagated\sUDF\sexception\smessages. C Export\sthe\ssqlite3_keyword_...()\sfamily\sof\sfunctions\sto\sJNI.
D 2023-09-02T14:36:41.961 D 2023-09-03T09:28:45.568
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
@ -237,8 +237,8 @@ F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a3
F ext/jni/GNUmakefile 7bd7f0c28d664b71b08f9d8ff507eb8329f1f3e7b5d88f774f90a1a5259a3fe8 F ext/jni/GNUmakefile 7bd7f0c28d664b71b08f9d8ff507eb8329f1f3e7b5d88f774f90a1a5259a3fe8
F ext/jni/README.md 1332b1fa27918bd5d9ca2d0d4f3ac3a6ab86b9e3699dc5bfe32904a027f3d2a9 F ext/jni/README.md 1332b1fa27918bd5d9ca2d0d4f3ac3a6ab86b9e3699dc5bfe32904a027f3d2a9
F ext/jni/jar-dist.make 030aaa4ae71dd86e4ec5e7c1e6cd86f9dfa47c4592c070d2e35157e42498e1fa F ext/jni/jar-dist.make 030aaa4ae71dd86e4ec5e7c1e6cd86f9dfa47c4592c070d2e35157e42498e1fa
F ext/jni/src/c/sqlite3-jni.c 066404920b85b3e06b7ce20e84cb3ebc5754c069f044db23205d34b3b1c15134 F ext/jni/src/c/sqlite3-jni.c a873c29cc80b14dd775a75359f7a3973642e8d9a84a8f37e3bcb85ab426aa820
F ext/jni/src/c/sqlite3-jni.h 2a04e2bf686e5eaa3ae9bcf11b1c38fb348e09071f081361eb224eae2a65194f F ext/jni/src/c/sqlite3-jni.h ff6f69ffc2ace23ac7a7628405efe9846e33586a4399bfe48cec846be79e39df
F ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java 95e88ba04f4aac51ffec65693e878e234088b2f21b387f4e4285c8b72b33e436 F ext/jni/src/org/sqlite/jni/AbstractCollationCallback.java 95e88ba04f4aac51ffec65693e878e234088b2f21b387f4e4285c8b72b33e436
F ext/jni/src/org/sqlite/jni/AggregateFunction.java 7312486bc65fecdb91753c0a4515799194e031f45edbe16a6373cea18f404dc4 F ext/jni/src/org/sqlite/jni/AggregateFunction.java 7312486bc65fecdb91753c0a4515799194e031f45edbe16a6373cea18f404dc4
F ext/jni/src/org/sqlite/jni/AuthorizerCallback.java e6135be32f12bf140bffa39be7fd1a45ad83b2661ed49c08dbde04c8485feb38 F ext/jni/src/org/sqlite/jni/AuthorizerCallback.java e6135be32f12bf140bffa39be7fd1a45ad83b2661ed49c08dbde04c8485feb38
@ -262,10 +262,10 @@ F ext/jni/src/org/sqlite/jni/ProgressHandlerCallback.java 7b9ff2218129ece98ba60c
F ext/jni/src/org/sqlite/jni/ResultCode.java ba701f20213a5f259e94cfbfdd36eb7ac7ce7797f2c6c7fca2004ff12ce20f86 F ext/jni/src/org/sqlite/jni/ResultCode.java ba701f20213a5f259e94cfbfdd36eb7ac7ce7797f2c6c7fca2004ff12ce20f86
F ext/jni/src/org/sqlite/jni/RollbackHookCallback.java d12352c0e22840de484ffa9b11ed5058bb0daca2e9f218055d3c54c947a273c4 F ext/jni/src/org/sqlite/jni/RollbackHookCallback.java d12352c0e22840de484ffa9b11ed5058bb0daca2e9f218055d3c54c947a273c4
F ext/jni/src/org/sqlite/jni/SQLFunction.java 544a875d33fd160467d82e2397ac33157b29971d715a821a4fad3c899113ee8c F ext/jni/src/org/sqlite/jni/SQLFunction.java 544a875d33fd160467d82e2397ac33157b29971d715a821a4fad3c899113ee8c
F ext/jni/src/org/sqlite/jni/SQLite3Jni.java d73d372747aafed21d25b5b27c1e893f332e5977f0ad70f458412edcc747c28a F ext/jni/src/org/sqlite/jni/SQLite3Jni.java b9dd5ba6b538648a27ed9c61217a5ae56645d0494b205b814fd488d375857984
F ext/jni/src/org/sqlite/jni/ScalarFunction.java 6d387bb499fbe3bc13c53315335233dbf6a0c711e8fa7c521683219b041c614c F ext/jni/src/org/sqlite/jni/ScalarFunction.java 6d387bb499fbe3bc13c53315335233dbf6a0c711e8fa7c521683219b041c614c
F ext/jni/src/org/sqlite/jni/TableColumnMetadata.java 54511b4297fa28dcb3f49b24035e34ced10e3fd44fd0e458e784f4d6b0096dab F ext/jni/src/org/sqlite/jni/TableColumnMetadata.java 54511b4297fa28dcb3f49b24035e34ced10e3fd44fd0e458e784f4d6b0096dab
F ext/jni/src/org/sqlite/jni/Tester1.java d3f99cde2487dd8c9a0be9fc9146fecd28a70c6df8bfd1fd476e68c2c940114e F ext/jni/src/org/sqlite/jni/Tester1.java 410fd7e126847456011372e38977d4331888f054e8ca509545aab65e3c0ed96a
F ext/jni/src/org/sqlite/jni/TesterFts5.java 1d127690daac4751300b277a14c09faa0cefd1efa365580cd8d95ea658e1ee59 F ext/jni/src/org/sqlite/jni/TesterFts5.java 1d127690daac4751300b277a14c09faa0cefd1efa365580cd8d95ea658e1ee59
F ext/jni/src/org/sqlite/jni/TraceV2Callback.java beb0b064c1a5f8bfe585a324ed39a4e33edbe379a3fc60f1401661620d3ca7c0 F ext/jni/src/org/sqlite/jni/TraceV2Callback.java beb0b064c1a5f8bfe585a324ed39a4e33edbe379a3fc60f1401661620d3ca7c0
F ext/jni/src/org/sqlite/jni/UpdateHookCallback.java 8376f4a931f2d5612b295c003c9515ba933ee76d8f95610e89c339727376e36c F ext/jni/src/org/sqlite/jni/UpdateHookCallback.java 8376f4a931f2d5612b295c003c9515ba933ee76d8f95610e89c339727376e36c
@ -2116,8 +2116,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 a59fe0cd9552128ca4186f4e66f0d188f2a57c7647f43828e42cb95801f350ce P 652e2e82100ac3d8238d15ef6d43de4162fd02d695db4936ad5706fe4f2d7dc3
R e1d1983d1d616224caf72675cc27855c R 7fd736a7d08745015fcc69ede4fd14cc
U stephan U stephan
Z 290673eb8d4334de0d33df1e73324ad2 Z b7483f74605eb1221b65312bed3e2257
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
652e2e82100ac3d8238d15ef6d43de4162fd02d695db4936ad5706fe4f2d7dc3 bd554db39159d8a538ce913d55285e3c417db8823c717a3e34bfa0678de42be7