19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.database; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawaimport static android.database.DatabaseUtils.InsertHelper.TABLE_INFO_PRAGMA_COLUMNNAME_INDEX; 20b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawaimport static android.database.DatabaseUtils.InsertHelper.TABLE_INFO_PRAGMA_DEFAULT_INDEX; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 22ad8d0d1b4d4b8cde73c30e9facad6514e492bf11Vasu Noriimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.SQLiteDatabase; 24fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Noriimport android.database.sqlite.SQLiteException; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 27ad8d0d1b4d4b8cde73c30e9facad6514e492bf11Vasu Noriimport android.test.AndroidTestCase; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.PerformanceTestCase; 2985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Noriimport android.test.suitebuilder.annotation.LargeTest; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 3385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Noriimport android.util.Pair; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Assert; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawaimport java.io.File; 389504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Noriimport java.util.ArrayList; 39b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawaimport java.util.Arrays; 40a017edace756956cd4b4789a85316e3681d04a7eVasu Noriimport java.util.List; 41b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawaimport java.util.Locale; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43ad8d0d1b4d4b8cde73c30e9facad6514e492bf11Vasu Noripublic class DatabaseGeneralTest extends AndroidTestCase implements PerformanceTestCase { 44b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa private static final String TAG = "DatabaseGeneralTest"; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String sString1 = "this is a test"; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String sString2 = "and yet another test"; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String sString3 = "this string is a little longer, but still a test"; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String PHONE_NUMBER = "16175551212"; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int CURRENT_DATABASE_VERSION = 42; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SQLiteDatabase mDatabase; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private File mDatabaseFile; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setUp() throws Exception { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setUp(); 58ad8d0d1b4d4b8cde73c30e9facad6514e492bf11Vasu Nori File dbDir = getContext().getDir(this.getClass().getName(), Context.MODE_PRIVATE); 59ad8d0d1b4d4b8cde73c30e9facad6514e492bf11Vasu Nori mDatabaseFile = new File(dbDir, "database_test.db"); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDatabaseFile.exists()) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabaseFile.delete(); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(mDatabase); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setVersion(CURRENT_DATABASE_VERSION); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void tearDown() throws Exception { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.close(); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabaseFile.delete(); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.tearDown(); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isPerformanceOnly() { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // These test can only be run once. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int startPerformance(Intermediates intermediates) { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 1; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void populateDefaultTable() { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data TEXT);"); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString1 + "');"); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString2 + "');"); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO test (data) VALUES ('" + sString3 + "');"); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testVersion() throws Exception { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(CURRENT_DATABASE_VERSION, mDatabase.getVersion()); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setVersion(11); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(11, mDatabase.getVersion()); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testUpdate() throws Exception { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project populateDefaultTable(); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(1); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put("data", "this is an updated test"); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, mDatabase.update("test", values, "_id=1", null)); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = mDatabase.query("test", null, "_id=1", null, null, null, null); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String value = c.getString(c.getColumnIndexOrThrow("data")); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("this is an updated test", value); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPhoneNumbersEqual() throws Exception { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE phones (num TEXT);"); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO phones (num) VALUES ('911');"); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO phones (num) VALUES ('5555');"); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO phones (num) VALUES ('+" + PHONE_NUMBER + "');"); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String number; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '504-555-7683')", null, null, null, null); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c == null || c.getCount() == 0); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '911')", null, null, null, null); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("911", number); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '5555')", null, null, null, null); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("5555", number); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '180055555555')", null, null, null, null); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c == null || c.getCount() == 0); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '+" + PHONE_NUMBER + "')", null, null, null, null); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("+" + PHONE_NUMBER, number); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '+1 (617).555-1212')", null, null, null, null); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("+" + PHONE_NUMBER, number); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '" + PHONE_NUMBER + "')", null, null, null, null); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("+" + PHONE_NUMBER, number); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17940336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa /* 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '5551212')", null, null, null, null); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("+" + PHONE_NUMBER, number); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 18840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '011" + PHONE_NUMBER + "')", null, null, null, null); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("+" + PHONE_NUMBER, number); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.query("phones", null, 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PHONE_NUMBERS_EQUAL(num, '00" + PHONE_NUMBER + "')", null, null, null, null); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(c); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = c.getString(c.getColumnIndexOrThrow("num")); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("+" + PHONE_NUMBER, number); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2086a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa 2096a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa private void phoneNumberCompare(String phone1, String phone2, boolean equal, 2106a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa boolean useStrictComparation) { 21140336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa String[] temporalPhoneNumbers = new String[2]; 21240336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa temporalPhoneNumbers[0] = phone1; 21340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa temporalPhoneNumbers[1] = phone2; 21440336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 21540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa Cursor cursor = mDatabase.rawQuery( 2166a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa String.format( 2176a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?, %d) " + 2186a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa "THEN 'equal' ELSE 'not equal' END", 2196a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa (useStrictComparation ? 1 : 0)), 22040336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa temporalPhoneNumbers); 22140336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa try { 22240336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertNotNull(cursor); 22340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertTrue(cursor.moveToFirst()); 22440336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa if (equal) { 22540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertEquals(String.format("Unexpectedly, \"%s != %s\".", phone1, phone2), 22640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa "equal", cursor.getString(0)); 22740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } else { 22840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertEquals(String.format("Unexpectedly, \"%s\" == \"%s\".", phone1, phone2), 22940336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa "not equal", cursor.getString(0)); 23040336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } 23140336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } finally { 23240336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa if (cursor != null) { 23340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa cursor.close(); 23440336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } 23540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } 23640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } 23740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 23840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa private void assertPhoneNumberEqual(String phone1, String phone2) throws Exception { 2396a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberEqual(phone1, phone2, true); 2406a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberEqual(phone1, phone2, false); 2416a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa } 2426a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa 2436a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa private void assertPhoneNumberEqual(String phone1, String phone2, boolean useStrict) 2446a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa throws Exception { 2456a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa phoneNumberCompare(phone1, phone2, true, useStrict); 24640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } 24740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 24840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa private void assertPhoneNumberNotEqual(String phone1, String phone2) throws Exception { 2496a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberNotEqual(phone1, phone2, true); 2506a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberNotEqual(phone1, phone2, false); 2516a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa } 2526a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa 2536a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa private void assertPhoneNumberNotEqual(String phone1, String phone2, boolean useStrict) 2546a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa throws Exception { 2556a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa phoneNumberCompare(phone1, phone2, false, useStrict); 25640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa } 25740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tests international matching issues for the PHONE_NUMBERS_EQUAL function. 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws Exception 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa @SmallTest 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPhoneNumbersEqualInternationl() throws Exception { 26540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("1", "1"); 26640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("123123", "123123"); 26740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberNotEqual("123123", "923123"); 26840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberNotEqual("123123", "123129"); 26940336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberNotEqual("123123", "1231234"); 270409308617fa24abbe8b5cded69dae1ae01b6ffa8Wei Huang assertPhoneNumberNotEqual("123123", "0123123", false); 2716a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberNotEqual("123123", "0123123", true); 27240336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("650-253-0000", "6502530000"); 27340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("650-253-0000", "650 253 0000"); 27440336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("650 253 0000", "6502530000"); 27540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+1 650-253-0000", "6502530000"); 27640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("001 650-253-0000", "6502530000"); 27740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("0111 650-253-0000", "6502530000"); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Russian trunk digit 28040336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+79161234567", "89161234567"); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // French trunk digit 28340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+33123456789", "0123456789"); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Trunk digit for city codes in the Netherlands 28640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+31771234567", "0771234567"); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test broken caller ID seen on call from Thailand to the US 28940336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+66811234567", "166811234567"); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test the same in-country number with different country codes 29240336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberNotEqual("+33123456789", "+1123456789"); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test one number with country code and the other without 29540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("5125551212", "+15125551212"); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test two NANP numbers that only differ in the area code 29840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberNotEqual("5125551212", "6505551212"); 29940336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 30040336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa // Japanese phone numbers 30140336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("090-1234-5678", "+819012345678"); 30240336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("090(1234)5678", "+819012345678"); 30340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("090-1234-5678", "+81-90-1234-5678"); 30440336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 30540336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa // Equador 30640336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+593(800)123-1234", "8001231234"); 30740336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa assertPhoneNumberEqual("+593-2-1234-123", "21234123"); 30840336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 30940336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa // Two continuous 0 at the beginning of the phone string should not be 3106a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa // treated as trunk prefix in the strict comparation. 3116a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberEqual("008001231234", "8001231234", false); 3126a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberNotEqual("008001231234", "8001231234", true); 31340336782eaa797bca3d1487784af113ba3b143ffDaisuke Miyakawa 3146a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa // Confirm that the bug found before does not re-appear in the strict compalation 3156a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberEqual("080-1234-5678", "+819012345678", false); 3166a857d957e7998d99d664fbf88fb1590b9decf77Daisuke Miyakawa assertPhoneNumberNotEqual("080-1234-5678", "+819012345678", true); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testCopyString() throws Exception { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE guess (numi INTEGER, numf FLOAT, str TEXT);"); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL( 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "INSERT INTO guess (numi,numf,str) VALUES (0,0.0,'ZoomZoomZoomZoom');"); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO guess (numi,numf,str) VALUES (2000000000,3.1415926535,'');"); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String chinese = "\u4eac\u4ec5 \u5c3d\u5f84\u60ca"; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] arr = new String[1]; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arr[0] = chinese; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO guess (numi,numf,str) VALUES (-32768,-1.0,?)", arr); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = mDatabase.rawQuery("SELECT * FROM guess", null); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToFirst(); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharArrayBuffer buf = new CharArrayBuffer(14); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String compareTo = c.getString(c.getColumnIndexOrThrow("numi")); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int numiIdx = c.getColumnIndexOrThrow("numi"); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int numfIdx = c.getColumnIndexOrThrow("numf"); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int strIdx = c.getColumnIndexOrThrow("str"); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.copyStringToBuffer(numiIdx, buf); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, buf.sizeCopied); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(compareTo, new String(buf.data, 0, buf.sizeCopied)); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.copyStringToBuffer(strIdx, buf); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("ZoomZoomZoomZoom", new String(buf.data, 0, buf.sizeCopied)); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToNext(); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compareTo = c.getString(numfIdx); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.copyStringToBuffer(numfIdx, buf); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(compareTo, new String(buf.data, 0, buf.sizeCopied)); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.copyStringToBuffer(strIdx, buf); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(0, buf.sizeCopied); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.moveToNext(); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.copyStringToBuffer(numfIdx, buf); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(-1.0, Double.valueOf( 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new String(buf.data, 0, buf.sizeCopied)).doubleValue()); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.copyStringToBuffer(strIdx, buf); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compareTo = c.getString(strIdx); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(chinese, compareTo); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(chinese, new String(buf.data, 0, buf.sizeCopied)); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSchemaChange1() throws Exception { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SQLiteDatabase db1 = mDatabase; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cursor; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db1.execSQL("CREATE TABLE db1 (_id INTEGER PRIMARY KEY, data TEXT);"); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor = db1.query("db1", null, null, null, null, null, null); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull("Cursor is null", cursor); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project db1.execSQL("CREATE TABLE db2 (_id INTEGER PRIMARY KEY, data TEXT);"); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(0, cursor.getCount()); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.deactivate(); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSchemaChange2() throws Exception { 389fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori mDatabase.execSQL("CREATE TABLE db1 (_id INTEGER PRIMARY KEY, data TEXT);"); 390fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori Cursor cursor = mDatabase.query("db1", null, null, null, null, null, null); 391fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori assertNotNull(cursor); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(0, cursor.getCount()); 393fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori cursor.close(); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSchemaChange3() throws Exception { 398fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori mDatabase.execSQL("CREATE TABLE db1 (_id INTEGER PRIMARY KEY, data TEXT);"); 399fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori mDatabase.execSQL("INSERT INTO db1 (data) VALUES ('test');"); 400fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori mDatabase.execSQL("ALTER TABLE db1 ADD COLUMN blah int;"); 401fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori Cursor c = null; 402fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori try { 403fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori c = mDatabase.rawQuery("select blah from db1", null); 404fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori } catch (SQLiteException e) { 405fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori fail("unexpected exception: " + e.getMessage()); 406fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori } finally { 407fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori if (c != null) { 408fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori c.close(); 409fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori } 410fb16cbd9b2e86d6878d4bff820422bc09c8938deVasu Nori } 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testSelectionArgs() throws Exception { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE test (_id INTEGER PRIMARY KEY, data TEXT);"); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(1); 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put("data", "don't forget to handled 's"); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.insert("test", "data", values); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.clear(); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put("data", "no apostrophes here"); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.insert("test", "data", values); 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = mDatabase.query( 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "test", null, "data GLOB ?", new String[]{"*'*"}, null, null, null); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, c.getCount()); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToFirst()); 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("don't forget to handled 's", c.getString(1)); 4279504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori c.deactivate(); 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // make sure code should checking null string properly so that 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // it won't crash 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.query("test", new String[]{"_id"}, 4339504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori "_id=?", new String[]{null}, null, null, null); 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("expected exception not thrown"); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalArgumentException e) { 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // expected 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testTokenize() throws Exception { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE tokens (" + 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "token TEXT COLLATE unicode," + 445819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "source INTEGER," + 4465615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "token_index INTEGER," + 4475615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "tag TEXT" + 448819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert ");"); 449819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert mDatabase.execSQL("CREATE TABLE tokens_no_index (" + 450819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "token TEXT COLLATE unicode," + 451819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "source INTEGER" + 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ");"); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT _TOKENIZE(NULL, NULL, NULL, NULL)", null)); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT _TOKENIZE('tokens', NULL, NULL, NULL)", null)); 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT _TOKENIZE('tokens', 10, NULL, NULL)", null)); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT _TOKENIZE('tokens', 10, 'some string', NULL)", null)); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(3, DatabaseUtils.longForQuery(mDatabase, 4645615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT _TOKENIZE('tokens', 11, 'some string ok', ' ', 1, 'foo')", null)); 4655615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase, 4665615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT _TOKENIZE('tokens', 11, 'second field', ' ', 1, 'bar')", null)); 4675615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert 468819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(3, DatabaseUtils.longForQuery(mDatabase, 469819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT _TOKENIZE('tokens_no_index', 20, 'some string ok', ' ')", null)); 470819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(3, DatabaseUtils.longForQuery(mDatabase, 471819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT _TOKENIZE('tokens_no_index', 21, 'foo bar baz', ' ', 0)", null)); 472819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // test Chinese 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String chinese = new String("\u4eac\u4ec5 \u5c3d\u5f84\u60ca"); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase, 476819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT _TOKENIZE('tokens', 12,'" + chinese + "', ' ', 1)", null)); 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String icustr = new String("Fr\u00e9d\u00e9ric Hj\u00f8nnev\u00e5g"); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase, 481819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT _TOKENIZE('tokens', 13, '" + icustr + "', ' ', 1)", null)); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4835615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(9, DatabaseUtils.longForQuery(mDatabase, 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens;", null)); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String key = DatabaseUtils.getHexCollationKey("Frederic Hjonneva"); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 489819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(13, DatabaseUtils.longForQuery(mDatabase, 490819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 491819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 492819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = DatabaseUtils.getHexCollationKey("Hjonneva"); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 496819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(13, DatabaseUtils.longForQuery(mDatabase, 497819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 498819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 499819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = DatabaseUtils.getHexCollationKey("some string ok"); 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 504819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase, 505819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 506819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 507819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5085615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals("foo", DatabaseUtils.stringForQuery(mDatabase, 5095615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT tag from tokens where token GLOB '" + key + "*'", null)); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = DatabaseUtils.getHexCollationKey("string"); 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 513819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase, 514819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 515819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 516819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5175615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals("foo", DatabaseUtils.stringForQuery(mDatabase, 5185615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT tag from tokens where token GLOB '" + key + "*'", null)); 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = DatabaseUtils.getHexCollationKey("ok"); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 522819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase, 523819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 524819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(2, DatabaseUtils.longForQuery(mDatabase, 525819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5265615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals("foo", DatabaseUtils.stringForQuery(mDatabase, 5275615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT tag from tokens where token GLOB '" + key + "*'", null)); 5285615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert 5295615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert key = DatabaseUtils.getHexCollationKey("second field"); 5305615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5315615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 5325615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase, 5335615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 5345615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 5355615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5365615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals("bar", DatabaseUtils.stringForQuery(mDatabase, 5375615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT tag from tokens where token GLOB '" + key + "*'", null)); 5385615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert key = DatabaseUtils.getHexCollationKey("field"); 5395615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5405615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 5415615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(11, DatabaseUtils.longForQuery(mDatabase, 5425615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 5435615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5445615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5455615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert Assert.assertEquals("bar", DatabaseUtils.stringForQuery(mDatabase, 5465615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert "SELECT tag from tokens where token GLOB '" + key + "*'", null)); 5475615d35b28119865cd65a79814a69f910e0a3862Bjorn Bringert 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = DatabaseUtils.getHexCollationKey(chinese); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] a = new String[1]; 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a[0] = key; 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token= ?", a)); 553819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase, 554819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token= ?", a)); 555819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 556819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token= ?", a)); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a[0] += "*"; 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB ?", a)); 560819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase, 561819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB ?", a)); 562819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 563819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB ?", a)); 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token= '" + key + "'", null)); 567819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase, 568819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token= '" + key + "'", null)); 569819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 570819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token= '" + key + "'", null)); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 574819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase, 575819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 576819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 577819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = DatabaseUtils.getHexCollationKey("\u4eac\u4ec5"); 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 582819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase, 583819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 584819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 585819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 587819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert key = DatabaseUtils.getHexCollationKey("\u5c3d\u5f84\u60ca"); 588819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Log.d("DatabaseGeneralTest", "key = " + key); 589819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 590819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT count(*) from tokens where token GLOB '" + key + "*'", null)); 591819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(12, DatabaseUtils.longForQuery(mDatabase, 592819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens where token GLOB '" + key + "*'", null)); 593819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 594819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT token_index from tokens where token GLOB '" + key + "*'", null)); 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(0, DatabaseUtils.longForQuery(mDatabase, 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "SELECT count(*) from tokens where token GLOB 'ab*'", null)); 598819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert 599819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert key = DatabaseUtils.getHexCollationKey("some string ok"); 600819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 601819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT count(*) from tokens_no_index where token GLOB '" + key + "*'", null)); 602819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(20, DatabaseUtils.longForQuery(mDatabase, 603819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens_no_index where token GLOB '" + key + "*'", null)); 604819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert 605819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert key = DatabaseUtils.getHexCollationKey("bar"); 606819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(1, DatabaseUtils.longForQuery(mDatabase, 607819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT count(*) from tokens_no_index where token GLOB '" + key + "*'", null)); 608819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert Assert.assertEquals(21, DatabaseUtils.longForQuery(mDatabase, 609819e3f2148da0a47ed90be1f6f8b072a37c9ce1fBjorn Bringert "SELECT source from tokens_no_index where token GLOB '" + key + "*'", null)); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testTransactions() throws Exception { 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE test (num INTEGER);"); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("INSERT INTO test (num) VALUES (0)"); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Make sure that things work outside an explicit transaction. 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(1); 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkNum(1); 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test a single-level transaction. 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(0); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(1); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkNum(1); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse(mDatabase.isDbLockedByCurrentThread()); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test a rolled-back transaction. 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(0); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(1); 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkNum(0); 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse(mDatabase.isDbLockedByCurrentThread()); 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We should get an error if we end a non-existent transaction. 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertThrowsIllegalState(new Runnable() { public void run() { 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }}); 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We should get an error if a set a non-existent transaction as clean. 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertThrowsIllegalState(new Runnable() { public void run() { 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }}); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We should get an error if we mark a transaction as clean twice. 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertThrowsIllegalState(new Runnable() { public void run() { 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }}); 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We should get an error if we begin a transaction after marking the parent as clean. 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertThrowsIllegalState(new Runnable() { public void run() { 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }}); 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse(mDatabase.isDbLockedByCurrentThread()); 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test a two-level transaction. 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(0); 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(1); 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkNum(1); 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse(mDatabase.isDbLockedByCurrentThread()); 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test rolling back an inner transaction. 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(0); 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(1); 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkNum(0); 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse(mDatabase.isDbLockedByCurrentThread()); 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Test rolling back an outer transaction. 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(0); 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.beginTransaction(); 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNum(1); 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.setTransactionSuccessful(); 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.endTransaction(); 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkNum(0); 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertFalse(mDatabase.isDbLockedByCurrentThread()); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setNum(int num) { 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("UPDATE test SET num = " + num); 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkNum(int num) { 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals( 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project num, DatabaseUtils.longForQuery(mDatabase, "SELECT num FROM test", null)); 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void assertThrowsIllegalState(Runnable r) { 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean ok = false; 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r.run(); 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalStateException e) { 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ok = true; 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(ok); 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Disable these until we can explicitly mark them as stress tests 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void xxtestMem1() throws Exception { 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project populateDefaultTable(); 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 50000; i++) { 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cursor = mDatabase.query("test", null, null, null, null, null, null); 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.moveToFirst(); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Log.i("~~~~", "Finished round " + i); 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Disable these until we can explicitly mark them as stress tests 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void xxtestMem2() throws Exception { 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project populateDefaultTable(); 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 50000; i++) { 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cursor = mDatabase.query("test", null, null, null, null, null, null); 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.close(); 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Log.i("~~~~", "Finished round " + i); 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Disable these until we can explicitly mark them as stress tests 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void xxtestMem3() throws Exception { 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project populateDefaultTable(); 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < 50000; i++) { 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cursor = mDatabase.query("test", null, null, null, null, null, null); 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cursor.deactivate(); 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Log.i("~~~~", "Finished round " + i); 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testContentValues() throws Exception { 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues values = new ContentValues(); 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put("string", "value"); 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("value", values.getAsString("string")); 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] bytes = new byte[42]; 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Arrays.fill(bytes, (byte) 0x28); 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.put("byteArray", bytes); 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(Arrays.equals(bytes, values.getAsByteArray("byteArray"))); 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Write the ContentValues to a Parcel and then read them out 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel p = Parcel.obtain(); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values.writeToParcel(p, 0); 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project p.setDataPosition(0); 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project values = ContentValues.CREATOR.createFromParcel(p); 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Read the values out again and make sure they're the same 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(Arrays.equals(bytes, values.getAsByteArray("byteArray"))); 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("value", values.get("string")); 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testTableInfoPragma() throws Exception { 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE pragma_test (" + 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "i INTEGER DEFAULT 1234, " + 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "j INTEGER, " + 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "s TEXT DEFAULT 'hello', " + 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "t TEXT, " + 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "'select' TEXT DEFAULT \"hello\")"); 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cur = mDatabase.rawQuery("PRAGMA table_info(pragma_test)", null); 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(5, cur.getCount()); 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToNext()); 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("i", 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX)); 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("1234", 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_DEFAULT_INDEX)); 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToNext()); 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("j", 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX)); 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull(cur.getString(TABLE_INFO_PRAGMA_DEFAULT_INDEX)); 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToNext()); 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("s", 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX)); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("'hello'", 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_DEFAULT_INDEX)); 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToNext()); 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("t", 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX)); 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull(cur.getString(TABLE_INFO_PRAGMA_DEFAULT_INDEX)); 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToNext()); 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("select", 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX)); 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("\"hello\"", 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.getString(TABLE_INFO_PRAGMA_DEFAULT_INDEX)); 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur.close(); 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Throwable t) { 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "If you see this test fail, it's likely that something about " + 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "sqlite's PRAGMA table_info(...) command has changed.", t); 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testInsertHelper() throws Exception { 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cur; 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues cv; 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long row; 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDatabase.execSQL("CREATE TABLE insert_test (" + 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "_id INTEGER PRIMARY KEY, " + 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "s TEXT NOT NULL UNIQUE, " + 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "t TEXT NOT NULL DEFAULT 'hello world', " + 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "i INTEGER, " + 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "j INTEGER NOT NULL DEFAULT 1234, " + 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "'select' TEXT)"); 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DatabaseUtils.InsertHelper ih = 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new DatabaseUtils.InsertHelper(mDatabase, "insert_test"); 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv = new ContentValues(); 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("s", "one"); 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project row = ih.insert(cv); 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur = mDatabase.rawQuery("SELECT * FROM insert_test WHERE _id == " + row, null); 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToFirst()); 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("one", cur.getString(1)); 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("hello world", cur.getString(2)); 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull(cur.getString(3)); 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1234, cur.getLong(4)); 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull(cur.getString(5)); 845e8de28415b4362824a52c180adf10dd882d12eafVasu Nori cur.close(); 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv = new ContentValues(); 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("s", "two"); 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("t", "goodbye world"); 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project row = ih.insert(cv); 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur = mDatabase.rawQuery("SELECT * FROM insert_test WHERE _id == " + row, null); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToFirst()); 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("two", cur.getString(1)); 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("goodbye world", cur.getString(2)); 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull(cur.getString(3)); 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(1234, cur.getLong(4)); 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertNull(cur.getString(5)); 858e8de28415b4362824a52c180adf10dd882d12eafVasu Nori cur.close(); 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv = new ContentValues(); 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("t", "goodbye world"); 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project row = ih.insert(cv); 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(-1, row); 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv = new ContentValues(); 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("s", "three"); 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("i", 2345); 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("j", 3456); 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("select", "tricky"); 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project row = ih.insert(cv); 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur = mDatabase.rawQuery("SELECT * FROM insert_test WHERE _id == " + row, null); 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToFirst()); 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("three", cur.getString(1)); 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("hello world", cur.getString(2)); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(2345, cur.getLong(3)); 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(3456, cur.getLong(4)); 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("tricky", cur.getString(5)); 878e8de28415b4362824a52c180adf10dd882d12eafVasu Nori cur.close(); 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv = new ContentValues(); 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("s", "three"); 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cv.put("i", 6789); 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project row = ih.insert(cv); 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(-1, row); 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project row = ih.replace(cv); 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cur = mDatabase.rawQuery("SELECT * FROM insert_test WHERE _id == " + row, null); 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertTrue(cur.moveToFirst()); 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("three", cur.getString(1)); 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals("hello world", cur.getString(2)); 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Assert.assertEquals(6789, cur.getLong(3)); 891e8de28415b4362824a52c180adf10dd882d12eafVasu Nori cur.close(); 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ih.close(); 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 896e495d1f74af13aec8d5d825e93e4cfe1e4fe7468Vasu Nori @MediumTest 897d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori public void testSemicolonsInStatements() throws Exception { 898d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori mDatabase.execSQL("CREATE TABLE pragma_test (" + 899d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori "i INTEGER DEFAULT 1234, " + 900d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori "j INTEGER, " + 901d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori "s TEXT DEFAULT 'hello', " + 902d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori "t TEXT, " + 903d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori "'select' TEXT DEFAULT \"hello\")"); 904d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori try { 905d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori // ending the sql statement with semicolons shouldn't be a problem. 906d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori Cursor cur = mDatabase.rawQuery("PRAGMA database_list;", null); 907d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori cur.close(); 908d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori // two semicolons in the statement shouldn't be a problem. 909d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori cur = mDatabase.rawQuery("PRAGMA database_list;;", null); 910d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori cur.close(); 911d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori } catch (Throwable t) { 912d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori fail("unexpected, of course"); 913d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori } 914d606b4bf2c1a2308b40785860853cfb95a77bf58Vasu Nori } 915b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 916062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori @MediumTest 917062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori public void testUnionsWithBindArgs() { 918062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori /* make sure unions with bindargs work http://b/issue?id=1061291 */ 919062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("CREATE TABLE A (i int);"); 920062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("create table B (k int);"); 921062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("create table C (n int);"); 922062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into A values(1);"); 923062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into A values(2);"); 924062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into A values(3);"); 925062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into B values(201);"); 926062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into B values(202);"); 927062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into B values(203);"); 928062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into C values(901);"); 929062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori mDatabase.execSQL("insert into C values(902);"); 930062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori String s = "select i from A where i > 2 " + 931062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori "UNION select k from B where k > 201 " + 932062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori "UNION select n from C where n !=900;"; 933062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori Cursor c = mDatabase.rawQuery(s, null); 934062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori int n = c.getCount(); 935062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori c.close(); 936062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori String s1 = "select i from A where i > ? " + 937062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori "UNION select k from B where k > ? " + 938062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori "UNION select n from C where n != ?;"; 939062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori Cursor c1 = mDatabase.rawQuery(s1, new String[]{"2", "201", "900"}); 940062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori assertEquals(n, c1.getCount()); 941062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori c1.close(); 942062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori } 943062fc7ce369758d5a26f83f12b50b11cd88e5defVasu Nori 944b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa /** 945b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa * This test is available only when the platform has a locale with the language "ja". 946b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa * It finishes without failure when it is not available. 947b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa */ 948b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa @MediumTest 949b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa public void testCollateLocalizedForJapanese() throws Exception { 950b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa final String testName = "DatabaseGeneralTest#testCollateLocalizedForJapanese()"; 951b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa final Locale[] localeArray = Locale.getAvailableLocales(); 952b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa final String japanese = Locale.JAPANESE.getLanguage(); 953b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa final String english = Locale.ENGLISH.getLanguage(); 954b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Locale japaneseLocale = null; 955b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Locale englishLocale = null; 956b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa for (Locale locale : localeArray) { 957b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa if (locale != null) { 958b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa final String language = locale.getLanguage(); 959b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa if (language == null) { 960b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa continue; 961b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } else if (language.equals(japanese)) { 962b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa japaneseLocale = locale; 963b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } else if (language.equals(english)) { 964b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa englishLocale = locale; 965b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 966b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 967b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 968b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa if (japaneseLocale != null && englishLocale != null) { 969b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa break; 970b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 971b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 972b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 973b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa if (japaneseLocale == null || englishLocale == null) { 974b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Log.d(TAG, testName + "n is silently skipped since " + 975b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa (englishLocale == null ? 976b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa (japaneseLocale == null ? 977b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "Both English and Japanese locales do not exist." : 978b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "English locale does not exist.") : 979b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa (japaneseLocale == null ? 980b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "Japanese locale does not exist." : 981b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "...why?"))); 982b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa return; 983b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 984b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 985b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Locale originalLocale = Locale.getDefault(); 986b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa try { 987b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 988b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa final String dbName = "collate_localized_test"; 989b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa mDatabase.execSQL("CREATE TABLE " + dbName + " (" + 990b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "_id INTEGER PRIMARY KEY, " + 991b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "s TEXT COLLATE LOCALIZED) "); 992b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa DatabaseUtils.InsertHelper ih = 993b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa new DatabaseUtils.InsertHelper(mDatabase, dbName); 994b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa ContentValues cv = new ContentValues(); 995b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 996b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa cv = new ContentValues(); // 997b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa cv.put("s", "\uFF75\uFF77\uFF85\uFF9C"); // O-ki-na-wa in half-width Katakana 998b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa ih.insert(cv); 999b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 1000b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa cv = new ContentValues(); // 1001b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa cv.put("s", "\u306B\u307B\u3093"); // Ni-ho-n in Hiragana 1002b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa ih.insert(cv); 1003b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 1004b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa cv = new ContentValues(); // 1005b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa cv.put("s", "\u30A2\u30E1\u30EA\u30AB"); // A-me-ri-ca in hull-width Katakana 1006b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa ih.insert(cv); 1007b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 1008b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa // Assume setLocale() does REINDEX and an English locale does not consider 1009b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa // Japanese-specific LOCALIZED order. 1010b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Locale.setDefault(englishLocale); 1011b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Locale.setDefault(japaneseLocale); 1012b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa 1013b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Cursor cur = mDatabase.rawQuery( 1014b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa "SELECT * FROM " + dbName + " ORDER BY s", null); 1015b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa assertTrue(cur.moveToFirst()); 1016b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa assertEquals("\u30A2\u30E1\u30EA\u30AB", cur.getString(1)); 1017b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa assertTrue(cur.moveToNext()); 1018b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa assertEquals("\uFF75\uFF77\uFF85\uFF9C", cur.getString(1)); 1019b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa assertTrue(cur.moveToNext()); 1020b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa assertEquals("\u306B\u307B\u3093", cur.getString(1)); 1021b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } finally { 1022b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa if (originalLocale != null) { 1023b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa try { 1024b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa Locale.setDefault(originalLocale); 1025b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } catch (Exception e) { 1026b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 1027b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 1028b945639d0c3fa1850c07a2b80f476c8d242a8bdeDaisuke Miyakawa } 10299504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori } 10309504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori 10319504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori @SmallTest 10329504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori public void testSetMaxCahesize() { 10339504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori mDatabase.execSQL("CREATE TABLE test (i int, j int);"); 10349504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori mDatabase.execSQL("insert into test values(1,1);"); 10359504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori // set cache size 10369504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori int N = SQLiteDatabase.MAX_SQL_CACHE_SIZE; 10379504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori mDatabase.setMaxSqlCacheSize(N); 10389504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori 10399504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori // try reduce cachesize 10409504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori try { 10419504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori mDatabase.setMaxSqlCacheSize(1); 10429504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori } catch (IllegalStateException e) { 10439504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori assertTrue(e.getMessage().contains("cannot set cacheSize to a value less than")); 10449504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori } 10459504c70f8862f5ffc55b07bc374e0b18b78a2dc6Vasu Nori } 104685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori 104785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori @LargeTest 104885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori public void testDefaultDatabaseErrorHandler() { 104985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori DefaultDatabaseErrorHandler errorHandler = new DefaultDatabaseErrorHandler(); 105085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori 105185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // close the database. and call corruption handler. 105285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // it should delete the database file. 105385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori File dbfile = new File(mDatabase.getPath()); 105485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori mDatabase.close(); 105585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(mDatabase.isOpen()); 105685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbfile.exists()); 105785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori try { 105885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori errorHandler.onCorruption(mDatabase); 105985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(dbfile.exists()); 106085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } catch (Exception e) { 106185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori fail("unexpected"); 106285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 106385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori 106485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // create an in-memory database. and corruption handler shouldn't try to delete it 106585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori SQLiteDatabase memoryDb = SQLiteDatabase.openOrCreateDatabase(":memory:", null); 106685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertNotNull(memoryDb); 106785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori memoryDb.close(); 106885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(memoryDb.isOpen()); 106985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori try { 107085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori errorHandler.onCorruption(memoryDb); 107185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } catch (Exception e) { 107285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori fail("unexpected"); 107385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 107485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori 107585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // create a database, keep it open, call corruption handler. database file should be deleted 107685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori SQLiteDatabase dbObj = SQLiteDatabase.openOrCreateDatabase(mDatabase.getPath(), null); 107785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbfile.exists()); 107885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertNotNull(dbObj); 107985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbObj.isOpen()); 108085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori try { 108185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori errorHandler.onCorruption(dbObj); 108285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(dbfile.exists()); 108385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } catch (Exception e) { 108485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori fail("unexpected"); 108585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 108685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori 108785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // create a database, attach 2 more databases to it 108885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // attached database # 1: ":memory:" 108985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // attached database # 2: mDatabase.getPath() + "1"; 109085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // call corruption handler. database files including the one for attached database # 2 109185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // should be deleted 109285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori String attachedDb1File = mDatabase.getPath() + "1"; 109385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori dbObj = SQLiteDatabase.openOrCreateDatabase(mDatabase.getPath(), null); 109485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori dbObj.execSQL("ATTACH DATABASE ':memory:' as memoryDb"); 109585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori dbObj.execSQL("ATTACH DATABASE '" + attachedDb1File + "' as attachedDb1"); 109685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbfile.exists()); 109785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(new File(attachedDb1File).exists()); 109885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertNotNull(dbObj); 109985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbObj.isOpen()); 1100a017edace756956cd4b4789a85316e3681d04a7eVasu Nori List<Pair<String, String>> attachedDbs = dbObj.getAttachedDbs(); 110185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori try { 110285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori errorHandler.onCorruption(dbObj); 110385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(dbfile.exists()); 110485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(new File(attachedDb1File).exists()); 110585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } catch (Exception e) { 110685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori fail("unexpected"); 110785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 110885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori 110985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // same as above, except this is a bit of stress testing. attach 5 database files 111085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori // and make sure they are all removed. 111185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori int N = 5; 111285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori ArrayList<String> attachedDbFiles = new ArrayList<String>(N); 111385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori for (int i = 0; i < N; i++) { 111485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori attachedDbFiles.add(mDatabase.getPath() + i); 111585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 111685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori dbObj = SQLiteDatabase.openOrCreateDatabase(mDatabase.getPath(), null); 111785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori dbObj.execSQL("ATTACH DATABASE ':memory:' as memoryDb"); 111885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori for (int i = 0; i < N; i++) { 111985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori dbObj.execSQL("ATTACH DATABASE '" + attachedDbFiles.get(i) + "' as attachedDb" + i); 112085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 112185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbfile.exists()); 112285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori for (int i = 0; i < N; i++) { 112385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(new File(attachedDbFiles.get(i)).exists()); 112485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 112585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertNotNull(dbObj); 112685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertTrue(dbObj.isOpen()); 112785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori attachedDbs = dbObj.getAttachedDbs(); 112885f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori try { 112985f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori errorHandler.onCorruption(dbObj); 113085f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(dbfile.exists()); 113185f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori for (int i = 0; i < N; i++) { 113285f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori assertFalse(new File(attachedDbFiles.get(i)).exists()); 113385f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 113485f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } catch (Exception e) { 113585f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori fail("unexpected"); 113685f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 113785f08f9eaeae6b04c6ce42e5b9dc097ac3e70fc5Vasu Nori } 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1139