1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Make (almost) all SQLite3Jni.sqlite3_... members public but make the SQLite3Jni class package-private, which has the same foot-protection effect but makes it much simpler to patch SQLite3Jni to publicize the interface later. Remove some of the extraneous foot-shooting protection from indidivual functions, in lieu moving it to the still-pending higher-level interfaces.

FossilOrigin-Name: 082b86683e77b2d4a30e1515552f52511324ef97c43b622b4dab7975ae9fbd7d
This commit is contained in:
stephan
2023-09-30 10:59:18 +00:00
parent 008b62f1ae
commit 9ac7e2d0fc
4 changed files with 211 additions and 212 deletions

View File

@ -2898,7 +2898,7 @@ S3JniApi(sqlite3_complete(),int,1complete)(
&& "Byte array is not NUL-terminated." );
rc = (pBuf && 0==pBuf[(nBa ? nBa-1 : 0)])
? sqlite3_complete( (const char *)pBuf )
: (jSql ? SQLITE_NOMEM : SQLITE_ERROR);
: (jSql ? SQLITE_NOMEM : SQLITE_MISUSE);
s3jni_jbyteArray_release(jSql, pBuf);
return rc;
}
@ -3121,37 +3121,33 @@ S3JniApi(sqlite3_create_collation() sqlite3_create_collation_v2(),
S3JniDb_mutex_enter;
ps = S3JniDb_from_java(jDb);
if( !ps || !name ){
rc = SQLITE_MISUSE;
jclass const klazz = (*env)->GetObjectClass(env, oCollation);
jmethodID const midCallback =
(*env)->GetMethodID(env, klazz, "call", "([B[B)I");
S3JniUnrefLocal(klazz);
S3JniIfThrew{
rc = s3jni_db_error(ps->pDb, SQLITE_ERROR,
"Could not get call() method from "
"CollationCallback object.");
}else{
jclass const klazz = (*env)->GetObjectClass(env, oCollation);
jmethodID const midCallback =
(*env)->GetMethodID(env, klazz, "call", "([B[B)I");
S3JniUnrefLocal(klazz);
S3JniIfThrew{
rc = s3jni_db_error(ps->pDb, SQLITE_ERROR,
"Could not get call() method from "
"CollationCallback object.");
}else{
char * const zName = s3jni_jstring_to_utf8(name, 0);
S3JniCollationCallback * const pCC =
zName ? S3JniHook_alloc() : 0;
if( pCC ){
rc = sqlite3_create_collation_v2(ps->pDb, zName, (int)eTextRep,
pCC, CollationCallback_xCompare,
CollationCallback_xDestroy);
if( 0==rc ){
pCC->midCallback = midCallback;
pCC->jObj = S3JniRefGlobal(oCollation);
pCC->doXDestroy = 1;
}else{
CollationCallback_xDestroy(pCC);
}
char * const zName = s3jni_jstring_to_utf8(name, 0);
S3JniCollationCallback * const pCC =
zName ? S3JniHook_alloc() : 0;
if( pCC ){
rc = sqlite3_create_collation_v2(ps->pDb, zName, (int)eTextRep,
pCC, CollationCallback_xCompare,
CollationCallback_xDestroy);
if( 0==rc ){
pCC->midCallback = midCallback;
pCC->jObj = S3JniRefGlobal(oCollation);
pCC->doXDestroy = 1;
}else{
rc = SQLITE_NOMEM;
CollationCallback_xDestroy(pCC);
}
sqlite3_free(zName);
}else{
rc = SQLITE_NOMEM;
}
sqlite3_free(zName);
}
S3JniDb_mutex_leave;
return (jint)rc;

File diff suppressed because it is too large Load Diff