Add loadExtension() · sqlcipher/sqlcipher-android@274e357
@@ -341,6 +341,34 @@ static void nativeRegisterCustomFunction(JNIEnv* env, jclass clazz, jlong connec
341341 }
342342}
343343344+// from https://github.com/requery/sqlite-android/blob/665608662eaa0071465cb0887f34ae177e52f130/sqlite-android/src/main/jni/sqlite/android_database_SQLiteConnection.cpp#L953
345+static void nativeLoadExtension(JNIEnv* env, jobject clazz,
346+ jlong connectionPtr, jstring file, jstring proc) {
347+char* errorMessage;
348+349+auto* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
350+int result = sqlite3_enable_load_extension(connection->db, 1);
351+if (result == SQLITE_OK) {
352+const char* fileChars = env->GetStringUTFChars(file, NULL);
353+const char* procChars = NULL;
354+if (proc) {
355+ procChars = env->GetStringUTFChars(proc, NULL);
356+ }
357+ result = sqlite3_load_extension(connection->db, fileChars, procChars, &errorMessage);
358+ env->ReleaseStringUTFChars(file, fileChars);
359+if (proc) {
360+ env->ReleaseStringUTFChars(proc, procChars);
361+ }
362+ }
363+if (result != SQLITE_OK) {
364+char* formattedError = sqlite3_mprintf("Could not register extension: %s", errorMessage);
365+sqlite3_free(errorMessage);
366+367+throw_sqlite3_exception_errcode(env, result, formattedError);
368+sqlite3_free(formattedError);
369+ }
370+}
371+344372static void nativeRegisterLocalizedCollators(JNIEnv* env, jclass clazz, jlong connectionPtr,
345373 jstring localeStr) {
346374/* Localized collators are not supported. */
@@ -839,6 +867,8 @@ static JNINativeMethod sMethods[] =
839867 (void*)nativeClose },
840868 { "nativeRegisterCustomFunction", "(JLnet/zetetic/database/sqlcipher/SQLiteCustomFunction;)V",
841869 (void*)nativeRegisterCustomFunction },
870+ { "nativeLoadExtension", "(JLjava/lang/String;Ljava/lang/String;)V",
871+ (void*) nativeLoadExtension },
842872 { "nativeRegisterLocalizedCollators", "(JLjava/lang/String;)V",
843873 (void*)nativeRegisterLocalizedCollators },
844874 { "nativePrepareStatement", "(JLjava/lang/String;)J",