Loading core/java/android/database/sqlite/SQLiteDatabase.java +17 −11 Original line number Diff line number Diff line Loading @@ -827,6 +827,15 @@ public class SQLiteDatabase extends SQLiteClosable { } private void closeClosable() { /* deallocate all compiled sql statement objects in compiledQueries cache. * this should be done before de-referencing all {@link SQLiteClosable} objects * from this database object because calling * {@link SQLiteClosable#onAllReferencesReleasedFromContainer()} could cause the database * to be closed. sqlite doesn't let a database close if there are * any unfinalized statements - such as the compiled-sql objects in mCompiledQueries. */ resetCompiledSqlCache(); Iterator<Map.Entry<SQLiteClosable, Object>> iter = mPrograms.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<SQLiteClosable, Object> entry = iter.next(); Loading @@ -835,13 +844,6 @@ public class SQLiteDatabase extends SQLiteClosable { program.onAllReferencesReleasedFromContainer(); } } // finalize all compiled sql statement objects in compiledQueries cache synchronized (mCompiledQueries) { for (SQLiteCompiledSql compiledStatement : mCompiledQueries.values()) { compiledStatement.releaseSqlStatement(); } } } /** Loading Loading @@ -1789,7 +1791,9 @@ public class SQLiteDatabase extends SQLiteClosable { */ public void setMaxSqlCacheSize(int cacheSize) { synchronized(mCompiledQueries) { if (mMaxSqlCacheSize > 0) { resetCompiledSqlCache(); } mMaxSqlCacheSize = (cacheSize > MAX_SQL_CACHE_SIZE) ? MAX_SQL_CACHE_SIZE : (cacheSize < 0) ? 0 : cacheSize; } Loading @@ -1800,6 +1804,9 @@ public class SQLiteDatabase extends SQLiteClosable { */ public void resetCompiledSqlCache() { synchronized(mCompiledQueries) { for (SQLiteCompiledSql compiledStatement : mCompiledQueries.values()) { compiledStatement.releaseSqlStatement(); } mCompiledQueries.clear(); } } Loading Loading @@ -1835,7 +1842,7 @@ public class SQLiteDatabase extends SQLiteClosable { /* reached max cachesize. before adding new entry, remove an entry from the * cache. we don't want to wipe out the entire cache because of this: * GCing {@link SQLiteCompiledSql} requires call to sqlite3_finalize * JNI method. If entire cache is wiped out, it could be cause a big GC activity * JNI method. If entire cache is wiped out, it could cause a big GC activity * just because a (rogue) process is using the cache incorrectly. */ Set<String> keySet = mCompiledQueries.keySet(); Loading @@ -1844,8 +1851,7 @@ public class SQLiteDatabase extends SQLiteClosable { break; } } compiledSql = new SQLiteCompiledSql(this, sql); mCompiledQueries.put(sql, compiledSql); mCompiledQueries.put(sql, compiledStatement); } if (SQLiteDebug.DEBUG_SQL_CACHE) { Log.v(TAG, "|adding_sql_to_cache|" + getPath() + "|" + mCompiledQueries.size() + "|" + Loading core/java/android/database/sqlite/SQLiteProgram.java +1 −1 Original line number Diff line number Diff line Loading @@ -100,7 +100,7 @@ public abstract class SQLiteProgram extends SQLiteClosable { * @return a unique identifier for this program */ public final int getUniqueId() { return compiledSql.nStatement; return (compiledSql != null) ? compiledSql.nStatement : 0; } /* package */ String getSqlString() { Loading Loading
core/java/android/database/sqlite/SQLiteDatabase.java +17 −11 Original line number Diff line number Diff line Loading @@ -827,6 +827,15 @@ public class SQLiteDatabase extends SQLiteClosable { } private void closeClosable() { /* deallocate all compiled sql statement objects in compiledQueries cache. * this should be done before de-referencing all {@link SQLiteClosable} objects * from this database object because calling * {@link SQLiteClosable#onAllReferencesReleasedFromContainer()} could cause the database * to be closed. sqlite doesn't let a database close if there are * any unfinalized statements - such as the compiled-sql objects in mCompiledQueries. */ resetCompiledSqlCache(); Iterator<Map.Entry<SQLiteClosable, Object>> iter = mPrograms.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<SQLiteClosable, Object> entry = iter.next(); Loading @@ -835,13 +844,6 @@ public class SQLiteDatabase extends SQLiteClosable { program.onAllReferencesReleasedFromContainer(); } } // finalize all compiled sql statement objects in compiledQueries cache synchronized (mCompiledQueries) { for (SQLiteCompiledSql compiledStatement : mCompiledQueries.values()) { compiledStatement.releaseSqlStatement(); } } } /** Loading Loading @@ -1789,7 +1791,9 @@ public class SQLiteDatabase extends SQLiteClosable { */ public void setMaxSqlCacheSize(int cacheSize) { synchronized(mCompiledQueries) { if (mMaxSqlCacheSize > 0) { resetCompiledSqlCache(); } mMaxSqlCacheSize = (cacheSize > MAX_SQL_CACHE_SIZE) ? MAX_SQL_CACHE_SIZE : (cacheSize < 0) ? 0 : cacheSize; } Loading @@ -1800,6 +1804,9 @@ public class SQLiteDatabase extends SQLiteClosable { */ public void resetCompiledSqlCache() { synchronized(mCompiledQueries) { for (SQLiteCompiledSql compiledStatement : mCompiledQueries.values()) { compiledStatement.releaseSqlStatement(); } mCompiledQueries.clear(); } } Loading Loading @@ -1835,7 +1842,7 @@ public class SQLiteDatabase extends SQLiteClosable { /* reached max cachesize. before adding new entry, remove an entry from the * cache. we don't want to wipe out the entire cache because of this: * GCing {@link SQLiteCompiledSql} requires call to sqlite3_finalize * JNI method. If entire cache is wiped out, it could be cause a big GC activity * JNI method. If entire cache is wiped out, it could cause a big GC activity * just because a (rogue) process is using the cache incorrectly. */ Set<String> keySet = mCompiledQueries.keySet(); Loading @@ -1844,8 +1851,7 @@ public class SQLiteDatabase extends SQLiteClosable { break; } } compiledSql = new SQLiteCompiledSql(this, sql); mCompiledQueries.put(sql, compiledSql); mCompiledQueries.put(sql, compiledStatement); } if (SQLiteDebug.DEBUG_SQL_CACHE) { Log.v(TAG, "|adding_sql_to_cache|" + getPath() + "|" + mCompiledQueries.size() + "|" + Loading
core/java/android/database/sqlite/SQLiteProgram.java +1 −1 Original line number Diff line number Diff line Loading @@ -100,7 +100,7 @@ public abstract class SQLiteProgram extends SQLiteClosable { * @return a unique identifier for this program */ public final int getUniqueId() { return compiledSql.nStatement; return (compiledSql != null) ? compiledSql.nStatement : 0; } /* package */ String getSqlString() { Loading