Commit Graph

198 Commits

Author SHA1 Message Date
Vasu Nori
071df261ed change TAG value from "Cursor" to "SQLiteCursor"
it is confusing to figure out where the debug messages are coming from.
this TAG value change helps

Change-Id: I3a6f445fbced4a962cc13dbb8dd1d7968f9aec9d
2010-09-14 16:02:02 -07:00
Vasu Nori
b83cb7cda3 revert Change-Id: Ic610a0c38e7bd7c77006a08c7b82fa01957739e5
can't change return type from void to int.

Change-Id: Iec3d95c731f117aca20b29c719cef7bcc6356ac0
2010-09-14 13:36:01 -07:00
Vasu Nori
5402590f1c change return type from void to int on execSQL() methods
1. let execSQL() methods return the number of rows affected by the SQL
staement executed.
2. remove synchronized on 2 public methods. since public API is not
supposed to have synchronized, this was a mistake in previously submitted
CL

Change-Id: Ic610a0c38e7bd7c77006a08c7b82fa01957739e5
2010-09-14 12:14:26 -07:00
Vasu Nori
b729dcc8a9 Revert "caching code retooled to reduce locking + handle SMP"
This reverts commit 992f7d52fa.

Change-Id: Ia5b789d1b2195d6ce43baffe24296c857f9b30f6
2010-09-14 11:55:24 -07:00
Vasu Nori
d31211fd46 sql statement with syntax errors can leave database lock in bad state
bug:2995940
Change-Id: I8571943cb278bbc622b04549478badb56e5f7573
2010-09-13 15:47:49 -07:00
Vasu Nori
992f7d52fa caching code retooled to reduce locking + handle SMP
1. Moved all code related to compiled-sql statement cache to SQLiteCache.java
Removed all caching related code from everywhere else.
2. Moved all code related to compiling a sql statement and caching it to
SQLiteCompiledSql.java. There was some code in SQLiteProgram.java
releated to this. moved it out.
3. Added state to SQLiteCompiledSql. This is to help in debugging.
Change-Id: I63ab0c9c4419e964eb9796d284dd389985763d83
2010-09-13 14:38:24 -07:00
Vasu Nori
196663234a remove unnecessary synchronization object from SQLiteClosable.
and a couple of other minor SMP fixes

Change-Id: I62bb4dd2fe43fc41074454a25bd84ad1fb4d004d
2010-09-10 14:27:06 -07:00
Vasu Nori
b18f27dbf4 Return count of rows in a resultset only once (when startPos = 0)
If a query returns 100 rows and say only 10 rows fit in 1MB, then client
receiving the cursor from the ContentProvider needs to paginate.
ContentProvider returns count of total data everytime it returns a page
(= 1MB) of data to the client.
Returning total count causes reading (and skipping unwanted) data
from sqlite.
Instead, it should be sufficient to get total count once
and re-use the count value during the life of the cursor
until a requery is performed on the cursor.
(Count won't change unless data is changed - in which case
the cursor is asked to perform requery anyway. So doing count
once and reusing it should work)
Change-Id: I3520d94524dda07be9bcff56b6fbae5276af1d3b
2010-09-10 13:43:19 -07:00
Vasu Nori
441fcf13f3 remove some useless code and add some code to aid in debugging
Change-Id: Ie532848b82dde57cc7a7017661679ece06ca606e
2010-09-07 22:18:31 -07:00
Vasu Nori
422dad0f50 android change to handle Change-Id: Idbeed81b5b7349059e467b33a8641abf0b4aaeff
Change-Id: Icf221a8e8d4c281f7719875816835ad7dfe7f3d1
2010-09-07 12:56:57 -07:00
Vasu Nori
8eb1bfe0f6 Merge "fix isIntegrityCheck() & add a sample impl class and test for DatabaseErrorHandler" 2010-09-02 09:42:11 -07:00
Dmitri Plotnikov
9a9ce6067f Fixing an issue with convert... utility methods.
All these methods promise to do nothing
if the requested column is not present,
but in fact throw exception.

Change-Id: I0e528d53a0425b831b0083ba82c75ba5b41bfdfd
2010-09-02 09:21:28 -07:00
Vasu Nori
bfe1dc2794 fix isIntegrityCheck() & add a sample impl class and test for DatabaseErrorHandler
fixed a bug in SQLiteDatabase.isDatabaseIntegrityOk()
and added a new class to demonstrate use of
android.database.DatabaseErrorHandler
and a bunch of nits

Change-Id: Ia81870853fa3bd84074637f6d823a9fd22b66c7e
2010-08-30 10:28:47 -07:00
Jean-Baptiste Queru
a4ddf42673 resolved conflicts for merge of c64b916e to master
Change-Id: I31b84d72186a918f19e0c9dee8fdebc83f661cc1
2010-08-24 10:45:16 -07:00
Vasu Nori
cc6f54910d SQLiteOpenHelper should discard closed singleton database objects
bug:2943028
Change-Id: I4b6263cc25413995363158c976d3c723231cc050
2010-08-23 17:08:41 -07:00
Vasu Nori
9a8bc78da7 weird java bug. bug:2941509
Change-Id: I70edabbdb5c715018227958b74fa1ac4e4df3f88
2010-08-23 12:07:00 -07:00
Jean-Baptiste Queru
c64b916ef5 resolved conflicts for merge of e7731f0a to gingerbread-plus-aosp
Change-Id: I8001a95f8c44ef0343e0a50de4bd5b5a85d41c38
2010-08-20 18:19:03 -07:00
Christian Mehlmauer
e7731f0a7f Added overload methods for DatabaseUtils.queryNumEntries
Now you can filter the count statement with a selection
and selection args
UnitTests for this new methods are added to the cts project

Change-Id: Id9233aec0eaac08839041ae7cbaba203470ad3d8
2010-08-20 18:02:09 -07:00
Bjorn Bringert
a006b47298 New API and implementation of DB and memory-backed FDs
This depends on a kernel patch that implements read(2)
in the ashmem driver.

Bug http://b/issue?id=2595601

Change-Id: Ie3b10aa471aada21812b35e63954c1b2f0a7b042
2010-08-18 15:39:52 +01:00
Jeff Hamilton
f0cfe3438a Add a few helpful APIs.
Change-Id: Ie57aa71eb77a1e0fb058f4eb6f40d4144a6dfce7
2010-08-10 10:13:18 -05:00
Vasu Nori
0732f7912c random but useful stuff
1. move binding of args to one place - to SQLiteProgram
2. reduce locking time in SQLiteDatabase
3. reduce locking during time of binding of args
4. rmeove test for the deprecated ArrayListCursor
5. a couple of nits here and there

Change-Id: I20c33c8ffe3325df67af655f1d20614f7f727cb7
2010-08-03 10:48:14 -07:00
Vasu Nori
e7fa4aeb60 before shipping, remove stacktrace printing in requery-warning msg
this is to reduce log spamming
Change-Id: I9b6e08905fbf7f880e49144a4ffcf01550a521c9
2010-08-02 15:06:52 -07:00
Vasu Nori
ce38b98feb do begin-end transaction before standalone insert/update/delete sql
also fix bug# 2871037
Change-Id: I13325f8eabff4f218d3206905010803b61d8e2cd
2010-08-02 14:51:33 -07:00
Vasu Nori
dea9713387 expose more sqlite errors as exceptions
this should help developers figure out what various sqlite errors mean
and possibly programmatically handle them.

Change-Id: I5c313be1b17b6c5171929bf04e19a16ea92bb357
2010-07-29 14:57:08 -07:00
Brad Fitzpatrick
c3a8c8a767 am a4ab2651: am 4d544376: am 86c035f0: Merge "COMMENT ONLY change to clarify ContentProvider documentation." into froyo
Merge commit 'a4ab26513426bf86c51c3c9419efb148be3aca8e'

* commit 'a4ab26513426bf86c51c3c9419efb148be3aca8e':
  COMMENT ONLY change to clarify ContentProvider documentation.
2010-07-27 17:02:56 -07:00
Brad Fitzpatrick
a4ab265134 am 4d544376: am 86c035f0: Merge "COMMENT ONLY change to clarify ContentProvider documentation." into froyo
Merge commit '4d5443762bd2b44b28edc2f2f75728911d70eac1' into gingerbread-plus-aosp

* commit '4d5443762bd2b44b28edc2f2f75728911d70eac1':
  COMMENT ONLY change to clarify ContentProvider documentation.
2010-07-27 16:54:40 -07:00
Brad Fitzpatrick
4d5443762b am 86c035f0: Merge "COMMENT ONLY change to clarify ContentProvider documentation." into froyo
Merge commit '86c035f0d176be9cb06b1e4f2390c25701417586' into gingerbread

* commit '86c035f0d176be9cb06b1e4f2390c25701417586':
  COMMENT ONLY change to clarify ContentProvider documentation.
2010-07-27 16:52:12 -07:00
Dan Egnor
6fcc0f073d COMMENT ONLY change to clarify ContentProvider documentation.
Gets a little more specific about thread behavior, and makes
pointed comments about not doing too much work in onCreate().

Change-Id: I682f0eb7d7559babee901ed26642751a6ba0a1ea
2010-07-27 16:32:17 -07:00
Vasu Nori
fb16cbd9b2 add new API in SQLiteStatement to deprecate another.
1. SQLIteStatement.executeUpdateDelete() replaces execute() - and returns the
number of rows changed.
2. let SQLiteDatabase.execSQL() call the above new API - which
means all CRUD statements by execSQL() are stored in prepared statement cache.
3. remove the following from SQLiteDatabase
     lastrowId
     lastchangecount()
     native_execSQL()

Change-Id: I4e93a09dc381f425c3ae6ccc331a7bf227491e22
2010-07-26 13:00:07 -07:00
Vasu Nori
95675137f4 deprecate synctable methods and remove associated private methods
seems this stuff is not used at all. a couple of CTS tests fail due to this code
not being corrected after recent changes to disable updates through cursor.

Change-Id: Iba87258e1c8fa18c2cc46d1d2ab56ec3e38413f2
2010-07-22 13:55:30 -07:00
Vasu Nori
65a8883f0e don't store mDatabase in SQLiteCursor as it is already in SQLiteQuery
SQLiteCursor has two members: mQuery, mDatabase
but mQuery already has mDatabase.
there is no need for SQLiteCursor.mDatabase.
and everytime SQLiteQuery.mDatabase is to be used, try to use a pooled database
connection handle, if possible.
Change-Id: I42b2376d714a1a4091c843e245a45b882bb7fee6
2010-07-21 16:04:04 -07:00
Vasu Nori
7b04c4176d make disableWriteAheadLogging method public so apps can disable WAL
music2 app has the weird situation where it embeds the jumper C++ code
and that code uses its own version of sqlite.
so, java side may want to disable WAL to make c++ code work well with java
usage of sqlite.
since WAL is made default option for all apps, this CL makes it possible for
music2 app to disable WAL.

Change-Id: I39ddbc9b4648f12b206ff3e76d30341da5955bd4
2010-07-20 10:31:21 -07:00
Brad Fitzpatrick
d2f6c7fe73 am 3e5e21d4: am 1772c34e: Merge "StrictMode: gather and return violating stacks in Binder replies" into gingerbread
Merge commit '3e5e21d4dc74751e64d17379c5563ece39a7e35d'

* commit '3e5e21d4dc74751e64d17379c5563ece39a7e35d':
  StrictMode: gather and return violating stacks in Binder replies
2010-07-15 23:05:39 -07:00
Brad Fitzpatrick
3e5e21d4dc am 1772c34e: Merge "StrictMode: gather and return violating stacks in Binder replies" into gingerbread
Merge commit '1772c34e5331a6456c8a93051192d19ff873c062' into gingerbread-plus-aosp

* commit '1772c34e5331a6456c8a93051192d19ff873c062':
  StrictMode: gather and return violating stacks in Binder replies
2010-07-15 15:44:46 -07:00
Brad Fitzpatrick
5b747191ff StrictMode: gather and return violating stacks in Binder replies
Now, when Thread A has a strict mode policy in effect and does a
Binder call to Thread B (most likely in another process), the strict
mode policy is passed along, but with the GATHER penalty bit set which
overrides other policies and instead gathers all offending stack
traces to a threadlocal which are then written back in the Parcel's
reply header.

Change-Id: I7d4497032a0609b37b1a2a15855f5c929ba0584d
2010-07-15 13:18:05 -07:00
Mike Lockwood
9d9c1be296 SQLiteDatabase: Add mechanism for registering custom sqlite3 functions
This allows you to define a callback in Java that can be called from
sqlite3 database triggers.

Change-Id: I09fdbd38c9807b6b0dd19c2761b01e8db76f1adc
Signed-off-by: Mike Lockwood <lockwood@android.com>
2010-07-14 19:52:33 -04:00
Vasu Nori
e25539fdfd reduce locking when using SQLiteStatement
Do compiling of sql, binding of args and execution of the SQL
statement within one single database lock period.
This reduces the number of times the database lock
needs to be acquired during the course of compilation, binding
and execution of a SQLiteStatement.

Change-Id: I22b090ec9e10fc0aa2532a93bafe610af2546b58
2010-07-09 12:31:12 -07:00
Vasu Nori
b2d2ddc5ac reduce java locking on SQLiteDatabase if sql is already compiled
Change-Id: I6c2c593ba69aad201cedf097384d0b5d835c0839
2010-07-08 12:53:22 -07:00
Vasu Nori
57feb5d9a7 STOPSHIP CL in master - make sqlite WAL default for all apps
for testing the sqlite WAL feature in the next few weeks.

Change-Id: I07234647b5e90d9e3bb0a5310b6cc449d58db428
2010-07-08 11:41:52 -07:00
Vasu Nori
9bf225ef7b documentation about not using journal_mode if using WAL
apps should not setting journal_mode if the application is
using a connection pool for readers by calling the method
SQLiteDatabase.enableWriteAheadLogging()

Change-Id: I9ddb32638171c6277ca94381a1b5d4b39b92b386
2010-07-07 16:38:28 -07:00
Vasu Nori
2827d6d974 for WAL to work, can't keep prepared SQL stmt_id in SQLiteStatement
Some (including the Contacts app) do the following:
  1. Open database
  2. As part of database_connection.onCreate(),
       Create some SQLiteStatement objects to cache them in the process
  3. attach databases
WAL doesn't work with attached databases. so, apps doing the above
should enable WAL only if there are no attached databases.

But we would like to enable WAL automatically for all apps after step #1 above
and disable WAL if the app subsequently does 'attach database' SQL.

this works only if there are no SQLiteStatement objects created in step # 2,
because SQLiteStatements cwmaintain a hard-reference to the database connection
for life and also to the prepared SQL statement id.
It is quite difficult to disable WAL in step # 3
    if it is enabled in step # 1
    and then a connection pool gets used by step # 2

would make WAL disabling easier if SQLiteStatement refers to prepared SQL
statement id only when it is needed (during binding and execute calls)
and thus NOT tied to a spacific database conenction.

also, from the standpoint of not blocking readers, it helps NOT to have
SQLiteStatement be married to a database connection and prepared SQL statement
id for life.

Change-Id: I464d57042965a28d2bde88e0f44b66ec119b40dc
2010-07-07 15:33:42 -07:00
Vasu Nori
6ac21d30be unittests for DatabaseConnectionPool (and fix bugs)
Change-Id: I6f251b4bdd472bd840ea1be6497660f8c31cd3e3
2010-07-07 14:26:10 -07:00
Vasu Nori
59d60420ba deprecate method returning prepared sql statement id
this method causes sql statement in a SQLiteProgram object to be never
re-compiled. thats not desirable, is it?
there should be no need for this method.

Change-Id: I207fad6415c1e2ef4097ee65a3ff347b5435b994
2010-07-03 16:31:35 -07:00
Vasu Nori
cd815158a4 Merge "some refactoring and multi-threading fixes" 2010-07-02 11:01:50 -07:00
Vasu Nori
7501010b71 some refactoring and multi-threading fixes
Change-Id: I7a0497dc2ed7b1e21471d71532558ef243eb9f73
2010-07-02 10:58:29 -07:00
Vasu Nori
cc08bb8884 fix broken-build
Change-Id: I0f956d87c26100ddb12e1736a0ec02e1b17e166f
2010-07-01 18:55:30 -07:00
Jeff Hamilton
f1a4a0a5b7 More cleanup after removing the Cursor update logic.
Change-Id: I4f407d3205cf97260bf3c3f3df4a0e2c533acab8
2010-06-30 17:14:50 -05:00
The Android Open Source Project
7701041955 am 7e343b8d: merge from froyo-plus-aosp
Merge commit '7e343b8d39309d2c9d73cc5d1ec2434e666ae48b'

* commit '7e343b8d39309d2c9d73cc5d1ec2434e666ae48b':
  fillWindow's start position must be smaller than getCount value
2010-06-25 14:22:06 -07:00
The Android Open Source Project
7e343b8d39 merge from froyo-plus-aosp
Change-Id: Ic1d0535cb746af0c53a5277b008061f7a2d973a2
2010-06-25 11:20:45 -07:00
Vasu Nori
6188c2746d remove some not-so-useful-logging
the sql statement is already printed if SqlStatements is set to VERBOSE
anyway. so no need for this extra logging
Change-Id: Id0e6c5acbbbd453ea45f08bcb802213bc22896fc
2010-06-25 11:10:54 -07:00