Commit Graph

75 Commits

Author SHA1 Message Date
Vasu Nori
fb3803a360 a dbobject is closed twice and that causes incorrect warnings 2010-03-04 11:40:49 -08:00
Vasu Nori
4da24f428f hide the newly created DatabaseObjectNotClosedException class from sdk 2010-03-03 10:49:56 -08:00
Vasu Nori
08b448ea39 in finalizer warnings, use a better exception - NOT Exception()
finalizer warnings should use a more descriptive exception instead of
Exception() so it is clearer to the developers as to why this
warning is output.
2010-03-03 10:05:16 -08:00
Bjorn Bringert
d6dfca8302 Call close() instead of deactivate() in CursorToBulkCursorAdaptor.close()
This seems like a long-lived copy-and-paste bug.

Fixes http://b/issue?id=2015069

This is the master version of change
https://android-git.corp.google.com/g/8636 which never
made it into Eclair.

Change-Id: I75f3a1942994982d5e5f779ab43a573cb953490b
2010-03-03 12:49:17 +00:00
Vasu Nori
14b60e747c add warning in finalizer. deprecate protected members.
finalizer shoudl not be called ever. add a warning to say that.
adeprecate a few members in SQLiteProgram.java. they should not
have had protected access level. shoudl be package.
2010-03-02 11:50:39 -08:00
Vasu Nori
d606b4bf2c in finalize() methods, log warnings if db lock is going to be held.
this is to track bug:2463988 and bug:2457342
2010-02-26 11:02:32 -08:00
Vasu Nori
1d7265800d yet another race condition fix to address bug:2456970 2010-02-24 12:42:46 -08:00
Brad Fitzpatrick
25880968cb Reduce SQLiteDatabase and ContentResolver EventLog logging thresholds.
Turns out the database is used a ton, and not particularly quickly, so
these were spamming the logs at their prior 100ms thresholds.  Setting
it to 500ms now.  (still sub-sampled, so should be ~5x less spammy...)
2010-02-22 15:17:49 -08:00
Vasu Nori
ec37e42fb2 fix race condition introduced by CL https://android-git.corp.google.com/g/40395 2010-02-22 12:32:52 -08:00
Brad Fitzpatrick
4bd222f107 Merge "Don't let email addresses in database names get into the EventLog." 2010-02-22 09:10:19 -08:00
Brad Fitzpatrick
d833023307 Don't let email addresses in database names get into the EventLog.
Because some apps make SQLite database names containing email
addresses, we take care not to log those email addresses in the
EventLog, so other apps with READ_LOGS access can't read them.
2010-02-22 09:09:21 -08:00
Vasu Nori
d3fe30134e add diagnostic info to help debug bug:2427686 2010-02-18 16:40:42 -08:00
Vasu Nori
e8de28415b bug fix for 2419869. also included 2 unittests.
bug fix for 2419869 is the following
   1. only one object can use the prepared statement object
        (SQLiteCompiledSql in SQLIteProgram)
   2. if two objects are requesting to use it, then create a new prepared
      statement object for exclusive use by the newcomer and let it be
      be finalized by the newcomer.
   3. add mInUse flag to SQLiteCompiledSql - to be set when SQLiteProgram
      requests it and to be released when that SQLiteProgram is done with it
a couple more changes included are
  1. unitests to simulate bug # 2419869 (and the fix's repair to it)
  2. better logging in SQLiteCloseable when it prints log messages
2010-02-18 14:49:45 -08:00
Brad Fitzpatrick
b28c7972bd Log previous SQL statement also when logging "COMMIT;" operations.
Previously, as somewhat expected, the top SQL statements showing up in
the SQL analysis dashboards from developer phones was just "COMMIT;"
statements, which is pretty uselessly ambiguous.

Now the logs for commit operations look like:

I/db_operation( 1249): [/data/data/com.google.android.gsf/databases/subscribedfeeds.db,COMMIT;DELETE FROM _deleted_feeds WHERE _sync_account=? AND _syn,461,com.google.process.gapps,100]
I/db_operation( 1290): [/data/data/com.android.providers.contacts/databases/contacts2.db,COMMIT;SELECT account_name, account_type FROM _sync_state,126,android.process.acore,100]
I/db_operation( 1249): [/data/data/com.google.android.gsf/databases/talk.db,COMMIT;INSERT OR REPLACE  INTO providerSettings(value, name) VAL,252,com.google.process.gapps,100]
I/db_operation( 1377): [/data/data/com.android.providers.calendar/databases/calendar.db,COMMIT;SELECT localTimezone, minInstance, maxInstance FROM Calen,948,,100]
I/db_operation( 1377): [/data/data/com.android.providers.calendar/databases/calendar.db,COMMIT;SELECT begin-(minutes*60000) AS myAlarmTime, Instances.ev,82,,83]

It doesn't totally pin-point the offending code, but it should get us
most of the way there.  We may enhance this logging again in the
future.
2010-02-12 12:49:41 -08:00
Brad Fitzpatrick
6a35387617 Measure walltime in ContentResolver and SQLiteDatabase operations logging.
The forgotten parts from Id72f718c / d72f718c9c.  Whoops.

Tested by watching a device's logcat -b events and observing no huge
or negative values.  And this time with the right system.img file,
even!
2010-02-11 18:06:51 -08:00
Brad Fitzpatrick
d72f718c9c Measure walltime in ContentResolver and SQLiteDatabase operations logging.
Previously, SQLiteDatabase was using Debug.threadCpuTimeNanos(), which
doesn't include I/O time (user-perceived latency), and ContentResolver
was using System.currentTimeMillis(), which didn't account for deep
sleeps.

Now both are consistently using SystemClock.uptimeMillis().
2010-02-11 17:07:51 -08:00
Vasu Nori
82f82be4b3 change wording in warning msg printed when compiled-sql cache is full 2010-02-09 11:49:01 -08:00
Vasu Nori
8d45e4e4c6 changes after review by API council
please refer to http://b/issue?id=2420299
2010-02-08 11:12:04 -08:00
Vasu Nori
3ef94e25b4 use sqlite 3.6.22 to print and profile the sql statetements
instead of rolling our own trace/profile code in java, lets use
sqlite 3.6.22 features. turns out sqlite does a good job of
printing the sql statements - including the ones from the triggers.
2010-02-08 10:56:48 -08:00
Vasu Nori
adf1c58fa9 fix a warning message that is confusing people.
warning message printed when the compiled-sql statament cache is emptied out is
not making sense to people. hope this version is better.
2010-02-05 15:14:32 -08:00
Vasu Nori
4dd4ab4cc3 add instrumentation to log the sql statement + bindargs + databasename
capture the sql statement along with the bindargs passed in. this will help
one to see the sql statements being executed and hopefully will help
debug incorrect-sql bugs.
2010-02-01 23:05:33 -08:00
Vasu Nori
6eb7c45a8f make SqliteDatabase ConflictAlgorithm and associated methods public.
SQLiteDatabase.java has ConflictAlgorithm which allows callers to specify
actions to take when insert or update causes constraint violations.
These actions are documented at http://www.sqlite.org/lang_conflict.html.

why make these public? usecase is the following:
Gmail has a table with a column "_id" being the integer primary key and
they let sqlite assign key values to the column.
but there is another UNIQUE key column (message_id) in the table.
so an insert could fail due to constraint violation on the message_id column
(i.e., not on the primary key). and when that happens, they would like to
get the value of _id that caused constraint violation.

currently hidden method insertOnConflict() already provides the above
functionality. that means exposing ConflictAlgorithm also.
2010-01-29 12:24:28 -08:00
Tom Taylor
5e342fa326 Remove MMS from the framework
The MMS code has been moved into the mms-common library.
Move SqliteWrapper (and make it hidden) into the database
directory because Telephony.java depends on it. Create a mmscommon
library similar to androidcommon for a number of files used both
by the telephony layer, by mms, and by myfaves.

Change-Id: I2e23e87c4961b87c42a4c8a63f812fa9e0e44dec
2010-01-28 16:59:27 -08:00
Vasu Nori
994bc22f1e caching PRAGMA sql statements caused cts-tests failures.
thats a strange-bug..caching PRAGMA sql statements caused sqlite to return
incorrect results.
2010-01-20 16:39:40 -08:00
Vasu Nori
e9d9210205 reduce logging noise from cache-full conditions.
when the compiled-sql cache is full, print the warning only a few times and
after that, if the condition persists, clear the cache.
don't flood the cache with the same warning million times.
2010-01-20 15:07:26 -08:00
Vasu Nori
bee5b9d7cb Change Log.wtf() call to Log.w()
messages from Log.wtf() sound pretty bad and engineers seem to think
something terrible has gone wrong.
2010-01-15 10:49:06 -08:00
Vasu Nori
e495d1f74a fix a bug in compiled-sql caching & hide public api setMaxSqlCacheSize
this is a clone of https://android-git.corp.google.com/g/#change,35174.
if the cache is full to its capacity and if a new statement is to be cached,
one of the entries in the cache is thrown out to make room for the new one.
but the one that is thrown out doesn't get deallocated by SQLiteProgram
because it doesn't know that it should.
fixed this by having SQLiteProgram finalize its sql statement in
releaseReference*() methods, if the statement is not in cache.
2010-01-14 15:22:58 -08:00
Vasu Nori
380ae0a6d4 am 9c74295f: am a1759cea: Merge "add eventlog message whenever sqlite reports db corruption error" into eclair
Merge commit '9c74295fb16da0469304a7c04c471915e28d09bd'

* commit '9c74295fb16da0469304a7c04c471915e28d09bd':
  add eventlog message whenever sqlite reports db corruption error
2010-01-11 13:00:28 -08:00
Vasu Nori
dd1b39be1e add eventlog message whenever sqlite reports db corruption error 2010-01-08 10:11:24 -08:00
Vasu Nori
42960e8ddf when finalizing SQLiteCursor, close it but don't throw exceptions.
currently, an exception is thrown if SQLiteCursor object is being
finalized before the cursor is closed. instead of an exception, simply
log an error message.
some android team members look at the exception and think it is catastrophic.
2010-01-07 15:47:13 -08:00
Fred Quintana
2ec6c56991 am 328c0e79: - removed the concept of Entity from the ContentProvider APIs - removed the parcelling ability from Entity and EntityIterator and made them public - added an EntityIterator abstract implementation that allow easy wrapping of a Cursor - changed the VCard c
Merge commit '328c0e7986aa6bb7752ec6de3da9c999920bb55f' into eclair-mr2-plus-aosp

* commit '328c0e7986aa6bb7752ec6de3da9c999920bb55f':
  - removed the concept of Entity from the ContentProvider APIs
2009-12-10 10:37:52 -08:00
Vasu Nori
fa1fae1355 Revert "dealloc compiled-sql statements before deref'ing them from SQLiteDatabase obj."
This reverts commit 6d1ec0d81c.
2009-12-07 14:38:35 -08:00
Vasu Nori
6d1ec0d81c dealloc compiled-sql statements before deref'ing them from SQLiteDatabase obj.
dealloc compiled-sql statements before removing references of SQLiteClosable objects from SQLiteDatabase obj. otherwise, code will attempt to close database before deallocing the compiled-sql statements and that causes sqlite exceptions.
2009-12-03 10:01:20 -08:00
Vasu Nori
b1dd3235a9 fix NPE. don't release an already released compiledSql obj 2009-12-01 14:16:24 -08:00
Dan Egnor
799f721fcb Fix a bug in the Settings contract class (introduced in an ... iffy ... fix
to a race condition) that breaks the caching of non-existent Settings/Secure/
Gservices values (causing lots of unnecessary database queries).

Fix a dumb thinko (reversed condition) in the SQLiteDatabase logging.
2009-11-24 16:57:44 -08:00
Dan Egnor
12311959c6 Expand db_operation logging to prepare for widespread sample collection:
- always enable the log, but subsample for queries faster than 100ms
- add information about whether it's blocking a main thread
- log the entire sql (have not yet added quoted-string-stripping)
2009-11-23 18:26:14 -08:00
Vasu Nori
5a03f36ef8 maintain cache of statementids returned by sqlite upon compiling a sql stmnt 2009-11-20 14:09:24 -08:00
Jeff Hamilton
082c2af685 EventLog when a database file is deleted due to corruption.
Change-Id: Icbd747425e97e022b91fbaf64579982d802524bf
2009-09-29 14:58:04 -07:00
Jeff Hamilton
a722d5b1bd EventLog when a database file is deleted due to corruption.
Change-Id: Icbd747425e97e022b91fbaf64579982d802524bf
2009-09-29 11:50:32 -07:00
Dmitri Plotnikov
90142c959e Adding a system property to log slow queries
Change-Id: I4d139e222319f56169924e14aa967f07b233c00e
2009-09-15 15:53:24 -07:00
Dmitri Plotnikov
b43b58d349 Increasing uninterrupted sleep quantum in SQLiteDatabase to increase transaction size. 2009-09-09 18:10:42 -07:00
Fred Quintana
c4516a7b62 add a transaction monitor 2009-09-08 17:25:09 -07:00
Dmitri Plotnikov
600bdd82f5 Breaking sleep after yield into small quanta.
Rationale: there is no reason to sleep for 4 seconds between
transactions if there is no one using the database.  This long
sleep only makes sense if two threads are actively using 
the database yielding to each other every several seconds.
2009-09-01 12:12:20 -07:00
Fred Quintana
5c7aede8d6 allow delaying after yielding 2009-08-27 21:43:35 -07:00
Dianne Hackborn
4a51c20ce6 I am getting tired of the java doc warnings, so fix them.
Change-Id: I2205eebae419eaf4a0992c9f5b7cd807eb843fe1
2009-08-24 17:37:32 -07:00
Android (Google) Code Review
1186bb1eca am ae1ba650: Merge change 8227 into donut
Merge commit 'ae1ba650074ab7b9a73f4430c1fc3576a8199383'

* commit 'ae1ba650074ab7b9a73f4430c1fc3576a8199383':
  Handle null in MatrixCursor.get*()
2009-07-22 13:29:31 -07:00
Bjorn Bringert
f2cec58d90 Handle null in MatrixCursor.get*()
Before, if a column contained null, MatrixCursor.getString()
returned the string "null", and the get<Number>() methods
threw exceptions.

Now, getString() returns null, and get<Number>() return 0.

Fixes http://b/issue?id=1996628
2009-07-22 21:20:51 +01:00
Android (Google) Code Review
578cf8104b am aa0e47cb: Merge change 8179 into donut
Merge commit 'aa0e47cbd6ccada9d194f39e6b4372d2d3594b38'

* commit 'aa0e47cbd6ccada9d194f39e6b4372d2d3594b38':
  Fix SQL generated by updateWithOnConflict()
2009-07-22 11:27:18 -07:00
Bjorn Bringert
7f4c2ea378 Fix SQL generated by updateWithOnConflict()
Before, SQLiteDatabase.updateWithOnConflict() method generated
syntactically invalid SQL if the ConflictAlgorithm was non-null.
For example, it would generate
"UPDATE  OR REPLACEshortcuts SET ...",
when it should be "UPDATE OR REPLACE shortcuts SET ...".

Fixes http://b/issue?id=1995470
2009-07-22 12:49:17 +01:00
Android (Google) Code Review
ffe4ddfe95 am eb717b9c: Merge change 4477 into donut
Merge commit 'eb717b9c4337e5b88664802b0804f4cb48758120'

* commit 'eb717b9c4337e5b88664802b0804f4cb48758120':
  BulkCursorToCursorAdaptor.respond no longer assumes RemoteException is impossible, fails more gracefully.
2009-06-22 13:04:50 -07:00