Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add a dummy version (equivalent to BINARY) of collation sequence LOCALIZED to all new database handles. Now a simple "SELECT sqlite_version()" works. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
87449ff92154151a203dafa06dfb62b3 |
User & Date: | dan 2013-12-18 18:04:57.135 |
Context
2013-12-18
| ||
18:18 | Remove unused file JniInvocation.cpp. (check-in: b23d835f18 user: dan tags: trunk) | |
18:04 | Add a dummy version (equivalent to BINARY) of collation sequence LOCALIZED to all new database handles. Now a simple "SELECT sqlite_version()" works. (check-in: 87449ff921 user: dan tags: trunk) | |
17:36 | Update CustomSqlite.java to call "SELECT sqlite_version()". (check-in: 71a3449ef6 user: dan tags: trunk) | |
Changes
Changes to jni/android_database_SQLiteConnection.cpp.
︙ | ︙ | |||
110 111 112 113 114 115 116 117 118 119 120 121 122 123 | // Called after each SQLite VM instruction when cancelation is enabled. static int sqliteProgressHandlerCallback(void* data) { SQLiteConnection* connection = static_cast<SQLiteConnection*>(data); return connection->canceled; } static jint nativeOpen(JNIEnv* env, jclass clazz, jstring pathStr, jint openFlags, jstring labelStr, jboolean enableTrace, jboolean enableProfile) { int sqliteFlags; if (openFlags & SQLiteConnection::CREATE_IF_NECESSARY) { sqliteFlags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; } else if (openFlags & SQLiteConnection::OPEN_READONLY) { | > > > > > > > > > > > > > > > > > > > > > > > > | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | // Called after each SQLite VM instruction when cancelation is enabled. static int sqliteProgressHandlerCallback(void* data) { SQLiteConnection* connection = static_cast<SQLiteConnection*>(data); return connection->canceled; } /* ** This function is a collation sequence callback equivalent to the built-in ** BINARY sequence. ** ** Stock Android uses a modified version of sqlite3.c that calls out to a module ** named "sqlite3_android" to add extra built-in collations and functions to ** all database handles. Specifically, collation sequence "LOCALIZED". For now, ** this module does not include sqlite3_android (since it is difficult to build ** with the NDK only). Instead, this function is registered as "LOCALIZED" for all ** new database handles. */ static int coll_localized( void *not_used, int nKey1, const void *pKey1, int nKey2, const void *pKey2 ){ int rc, n; n = nKey1<nKey2 ? nKey1 : nKey2; rc = memcmp(pKey1, pKey2, n); if( rc==0 ){ rc = nKey1 - nKey2; } return rc; } static jint nativeOpen(JNIEnv* env, jclass clazz, jstring pathStr, jint openFlags, jstring labelStr, jboolean enableTrace, jboolean enableProfile) { int sqliteFlags; if (openFlags & SQLiteConnection::CREATE_IF_NECESSARY) { sqliteFlags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; } else if (openFlags & SQLiteConnection::OPEN_READONLY) { |
︙ | ︙ | |||
135 136 137 138 139 140 141 142 143 144 145 146 147 148 | env->ReleaseStringUTFChars(labelStr, labelChars); sqlite3* db; int err = sqlite3_open_v2(path.c_str(), &db, sqliteFlags, NULL); if (err != SQLITE_OK) { throw_sqlite3_exception_errcode(env, err, "Could not open database"); return 0; } // Check that the database is really read/write when that is what we asked for. if ((sqliteFlags & SQLITE_OPEN_READWRITE) && sqlite3_db_readonly(db, NULL)) { throw_sqlite3_exception(env, db, "Could not open the database in read/write mode."); sqlite3_close(db); return 0; | > > > > > > | 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | env->ReleaseStringUTFChars(labelStr, labelChars); sqlite3* db; int err = sqlite3_open_v2(path.c_str(), &db, sqliteFlags, NULL); if (err != SQLITE_OK) { throw_sqlite3_exception_errcode(env, err, "Could not open database"); return 0; } err = sqlite3_create_collation(db, "localized", SQLITE_UTF8, 0, coll_localized); if (err != SQLITE_OK) { throw_sqlite3_exception_errcode(env, err, "Could not register collation"); sqlite3_close(db); return 0; } // Check that the database is really read/write when that is what we asked for. if ((sqliteFlags & SQLITE_OPEN_READWRITE) && sqlite3_db_readonly(db, NULL)) { throw_sqlite3_exception(env, db, "Could not open the database in read/write mode."); sqlite3_close(db); return 0; |
︙ | ︙ |