SQLite Android Bindings
Hex Artifact Content
Not logged in

Artifact 16bbb00f0ca20c49399a0671a6644e342c26ade3:


0000: 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20  /*. * Copyright 
0010: 28 43 29 20 32 30 30 37 20 54 68 65 20 41 6e 64  (C) 2007 The And
0020: 72 6f 69 64 20 4f 70 65 6e 20 53 6f 75 72 63 65  roid Open Source
0030: 20 50 72 6f 6a 65 63 74 0a 20 2a 0a 20 2a 20 4c   Project. *. * L
0040: 69 63 65 6e 73 65 64 20 75 6e 64 65 72 20 74 68  icensed under th
0050: 65 20 41 70 61 63 68 65 20 4c 69 63 65 6e 73 65  e Apache License
0060: 2c 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 28 74  , Version 2.0 (t
0070: 68 65 20 22 4c 69 63 65 6e 73 65 22 29 3b 0a 20  he "License");. 
0080: 2a 20 79 6f 75 20 6d 61 79 20 6e 6f 74 20 75 73  * you may not us
0090: 65 20 74 68 69 73 20 66 69 6c 65 20 65 78 63 65  e this file exce
00a0: 70 74 20 69 6e 20 63 6f 6d 70 6c 69 61 6e 63 65  pt in compliance
00b0: 20 77 69 74 68 20 74 68 65 20 4c 69 63 65 6e 73   with the Licens
00c0: 65 2e 0a 20 2a 20 59 6f 75 20 6d 61 79 20 6f 62  e.. * You may ob
00d0: 74 61 69 6e 20 61 20 63 6f 70 79 20 6f 66 20 74  tain a copy of t
00e0: 68 65 20 4c 69 63 65 6e 73 65 20 61 74 0a 20 2a  he License at. *
00f0: 0a 20 2a 20 20 20 20 20 20 68 74 74 70 3a 2f 2f  . *      http://
0100: 77 77 77 2e 61 70 61 63 68 65 2e 6f 72 67 2f 6c  www.apache.org/l
0110: 69 63 65 6e 73 65 73 2f 4c 49 43 45 4e 53 45 2d  icenses/LICENSE-
0120: 32 2e 30 0a 20 2a 0a 20 2a 20 55 6e 6c 65 73 73  2.0. *. * Unless
0130: 20 72 65 71 75 69 72 65 64 20 62 79 20 61 70 70   required by app
0140: 6c 69 63 61 62 6c 65 20 6c 61 77 20 6f 72 20 61  licable law or a
0150: 67 72 65 65 64 20 74 6f 20 69 6e 20 77 72 69 74  greed to in writ
0160: 69 6e 67 2c 20 73 6f 66 74 77 61 72 65 0a 20 2a  ing, software. *
0170: 20 64 69 73 74 72 69 62 75 74 65 64 20 75 6e 64   distributed und
0180: 65 72 20 74 68 65 20 4c 69 63 65 6e 73 65 20 69  er the License i
0190: 73 20 64 69 73 74 72 69 62 75 74 65 64 20 6f 6e  s distributed on
01a0: 20 61 6e 20 22 41 53 20 49 53 22 20 42 41 53 49   an "AS IS" BASI
01b0: 53 2c 0a 20 2a 20 57 49 54 48 4f 55 54 20 57 41  S,. * WITHOUT WA
01c0: 52 52 41 4e 54 49 45 53 20 4f 52 20 43 4f 4e 44  RRANTIES OR COND
01d0: 49 54 49 4f 4e 53 20 4f 46 20 41 4e 59 20 4b 49  ITIONS OF ANY KI
01e0: 4e 44 2c 20 65 69 74 68 65 72 20 65 78 70 72 65  ND, either expre
01f0: 73 73 20 6f 72 20 69 6d 70 6c 69 65 64 2e 0a 20  ss or implied.. 
0200: 2a 20 53 65 65 20 74 68 65 20 4c 69 63 65 6e 73  * See the Licens
0210: 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  e for the specif
0220: 69 63 20 6c 61 6e 67 75 61 67 65 20 67 6f 76 65  ic language gove
0230: 72 6e 69 6e 67 20 70 65 72 6d 69 73 73 69 6f 6e  rning permission
0240: 73 20 61 6e 64 0a 20 2a 20 6c 69 6d 69 74 61 74  s and. * limitat
0250: 69 6f 6e 73 20 75 6e 64 65 72 20 74 68 65 20 4c  ions under the L
0260: 69 63 65 6e 73 65 2e 0a 20 2a 2f 0a 0a 70 61 63  icense.. */..pac
0270: 6b 61 67 65 20 6f 72 67 2e 73 71 6c 69 74 65 2e  kage org.sqlite.
0280: 64 61 74 61 62 61 73 65 2e 64 61 74 61 62 61 73  database.databas
0290: 65 5f 63 74 73 3b 0a 0a 69 6d 70 6f 72 74 20 61  e_cts;..import a
02a0: 6e 64 72 6f 69 64 2e 63 6f 6e 74 65 6e 74 2e 43  ndroid.content.C
02b0: 6f 6e 74 65 6e 74 56 61 6c 75 65 73 3b 0a 69 6d  ontentValues;.im
02c0: 70 6f 72 74 20 61 6e 64 72 6f 69 64 2e 63 6f 6e  port android.con
02d0: 74 65 6e 74 2e 43 6f 6e 74 65 78 74 3b 0a 69 6d  tent.Context;.im
02e0: 70 6f 72 74 20 61 6e 64 72 6f 69 64 2e 64 61 74  port android.dat
02f0: 61 62 61 73 65 2e 43 75 72 73 6f 72 3b 0a 69 6d  abase.Cursor;.im
0300: 70 6f 72 74 20 61 6e 64 72 6f 69 64 2e 64 61 74  port android.dat
0310: 61 62 61 73 65 2e 43 75 72 73 6f 72 49 6e 64 65  abase.CursorInde
0320: 78 4f 75 74 4f 66 42 6f 75 6e 64 73 45 78 63 65  xOutOfBoundsExce
0330: 70 74 69 6f 6e 3b 0a 69 6d 70 6f 72 74 20 61 6e  ption;.import an
0340: 64 72 6f 69 64 2e 64 61 74 61 62 61 73 65 2e 43  droid.database.C
0350: 75 72 73 6f 72 57 72 61 70 70 65 72 3b 0a 69 6d  ursorWrapper;.im
0360: 70 6f 72 74 20 61 6e 64 72 6f 69 64 2e 64 61 74  port android.dat
0370: 61 62 61 73 65 2e 44 61 74 61 53 65 74 4f 62 73  abase.DataSetObs
0380: 65 72 76 65 72 3b 0a 69 6d 70 6f 72 74 20 6f 72  erver;.import or
0390: 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62 61 73  g.sqlite.databas
03a0: 65 2e 44 61 74 61 62 61 73 65 55 74 69 6c 73 3b  e.DatabaseUtils;
03b0: 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 73 71 6c 69  .import org.sqli
03c0: 74 65 2e 64 61 74 61 62 61 73 65 2e 73 71 6c 69  te.database.sqli
03d0: 74 65 2e 53 51 4c 69 74 65 43 75 72 73 6f 72 3b  te.SQLiteCursor;
03e0: 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 73 71 6c 69  .import org.sqli
03f0: 74 65 2e 64 61 74 61 62 61 73 65 2e 73 71 6c 69  te.database.sqli
0400: 74 65 2e 53 51 4c 69 74 65 43 75 72 73 6f 72 44  te.SQLiteCursorD
0410: 72 69 76 65 72 3b 0a 69 6d 70 6f 72 74 20 6f 72  river;.import or
0420: 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62 61 73  g.sqlite.databas
0430: 65 2e 73 71 6c 69 74 65 2e 53 51 4c 69 74 65 44  e.sqlite.SQLiteD
0440: 61 74 61 62 61 73 65 3b 0a 69 6d 70 6f 72 74 20  atabase;.import 
0450: 6f 72 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62  org.sqlite.datab
0460: 61 73 65 2e 73 71 6c 69 74 65 2e 53 51 4c 69 74  ase.sqlite.SQLit
0470: 65 51 75 65 72 79 3b 0a 69 6d 70 6f 72 74 20 6f  eQuery;.import o
0480: 72 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62 61  rg.sqlite.databa
0490: 73 65 2e 73 71 6c 69 74 65 2e 53 51 4c 69 74 65  se.sqlite.SQLite
04a0: 53 74 61 74 65 6d 65 6e 74 3b 0a 69 6d 70 6f 72  Statement;.impor
04b0: 74 20 61 6e 64 72 6f 69 64 2e 6f 73 2e 4c 6f 6f  t android.os.Loo
04c0: 70 65 72 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72  per;.import andr
04d0: 6f 69 64 2e 74 65 73 74 2e 41 6e 64 72 6f 69 64  oid.test.Android
04e0: 54 65 73 74 43 61 73 65 3b 0a 69 6d 70 6f 72 74  TestCase;.import
04f0: 20 61 6e 64 72 6f 69 64 2e 74 65 73 74 2e 50 65   android.test.Pe
0500: 72 66 6f 72 6d 61 6e 63 65 54 65 73 74 43 61 73  rformanceTestCas
0510: 65 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69  e;.import androi
0520: 64 2e 74 65 73 74 2e 73 75 69 74 65 62 75 69 6c  d.test.suitebuil
0530: 64 65 72 2e 61 6e 6e 6f 74 61 74 69 6f 6e 2e 4c  der.annotation.L
0540: 61 72 67 65 54 65 73 74 3b 0a 69 6d 70 6f 72 74  argeTest;.import
0550: 20 61 6e 64 72 6f 69 64 2e 74 65 73 74 2e 73 75   android.test.su
0560: 69 74 65 62 75 69 6c 64 65 72 2e 61 6e 6e 6f 74  itebuilder.annot
0570: 61 74 69 6f 6e 2e 4d 65 64 69 75 6d 54 65 73 74  ation.MediumTest
0580: 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69 64  ;.import android
0590: 2e 75 74 69 6c 2e 4c 6f 67 3b 0a 0a 69 6d 70 6f  .util.Log;..impo
05a0: 72 74 20 6a 61 76 61 2e 69 6f 2e 46 69 6c 65 3b  rt java.io.File;
05b0: 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75 74 69  .import java.uti
05c0: 6c 2e 41 72 72 61 79 73 3b 0a 69 6d 70 6f 72 74  l.Arrays;.import
05d0: 20 6a 61 76 61 2e 75 74 69 6c 2e 52 61 6e 64 6f   java.util.Rando
05e0: 6d 3b 0a 0a 70 75 62 6c 69 63 20 63 6c 61 73 73  m;..public class
05f0: 20 44 61 74 61 62 61 73 65 43 75 72 73 6f 72 54   DatabaseCursorT
0600: 65 73 74 20 65 78 74 65 6e 64 73 20 41 6e 64 72  est extends Andr
0610: 6f 69 64 54 65 73 74 43 61 73 65 20 69 6d 70 6c  oidTestCase impl
0620: 65 6d 65 6e 74 73 20 50 65 72 66 6f 72 6d 61 6e  ements Performan
0630: 63 65 54 65 73 74 43 61 73 65 20 7b 0a 20 20 20  ceTestCase {.   
0640: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
0650: 66 69 6e 61 6c 20 53 74 72 69 6e 67 20 73 53 74  final String sSt
0660: 72 69 6e 67 31 20 3d 20 22 74 68 69 73 20 69 73  ring1 = "this is
0670: 20 61 20 74 65 73 74 22 3b 0a 20 20 20 20 70 72   a test";.    pr
0680: 69 76 61 74 65 20 73 74 61 74 69 63 20 66 69 6e  ivate static fin
0690: 61 6c 20 53 74 72 69 6e 67 20 73 53 74 72 69 6e  al String sStrin
06a0: 67 32 20 3d 20 22 61 6e 64 20 79 65 74 20 61 6e  g2 = "and yet an
06b0: 6f 74 68 65 72 20 74 65 73 74 22 3b 0a 20 20 20  other test";.   
06c0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
06d0: 66 69 6e 61 6c 20 53 74 72 69 6e 67 20 73 53 74  final String sSt
06e0: 72 69 6e 67 33 20 3d 20 22 74 68 69 73 20 73 74  ring3 = "this st
06f0: 72 69 6e 67 20 69 73 20 61 20 6c 69 74 74 6c 65  ring is a little
0700: 20 6c 6f 6e 67 65 72 2c 20 62 75 74 20 73 74 69   longer, but sti
0710: 6c 6c 20 61 20 74 65 73 74 22 3b 0a 0a 20 20 20  ll a test";..   
0720: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
0730: 66 69 6e 61 6c 20 69 6e 74 20 43 55 52 52 45 4e  final int CURREN
0740: 54 5f 44 41 54 41 42 41 53 45 5f 56 45 52 53 49  T_DATABASE_VERSI
0750: 4f 4e 20 3d 20 34 32 3b 0a 20 20 20 20 70 72 69  ON = 42;.    pri
0760: 76 61 74 65 20 53 51 4c 69 74 65 44 61 74 61 62  vate SQLiteDatab
0770: 61 73 65 20 6d 44 61 74 61 62 61 73 65 3b 0a 20  ase mDatabase;. 
0780: 20 20 20 70 72 69 76 61 74 65 20 46 69 6c 65 20     private File 
0790: 6d 44 61 74 61 62 61 73 65 46 69 6c 65 3b 0a 20  mDatabaseFile;. 
07a0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
07b0: 74 69 63 20 66 69 6e 61 6c 20 69 6e 74 20 54 59  tic final int TY
07c0: 50 45 5f 43 55 52 53 4f 52 20 3d 20 30 3b 0a 20  PE_CURSOR = 0;. 
07d0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
07e0: 74 69 63 20 66 69 6e 61 6c 20 69 6e 74 20 54 59  tic final int TY
07f0: 50 45 5f 43 55 52 53 4f 52 57 52 41 50 50 45 52  PE_CURSORWRAPPER
0800: 20 3d 20 31 3b 0a 20 20 20 20 70 72 69 76 61 74   = 1;.    privat
0810: 65 20 69 6e 74 20 20 6d 54 65 73 74 54 79 70 65  e int  mTestType
0820: 20 3d 20 54 59 50 45 5f 43 55 52 53 4f 52 3b 0a   = TYPE_CURSOR;.
0830: 0a 20 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20  .    @Override. 
0840: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 6f 69     protected voi
0850: 64 20 73 65 74 55 70 28 29 20 74 68 72 6f 77 73  d setUp() throws
0860: 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20   Exception {.   
0870: 20 20 20 20 20 73 75 70 65 72 2e 73 65 74 55 70       super.setUp
0880: 28 29 3b 0a 20 20 20 20 20 20 20 20 53 79 73 74  ();.        Syst
0890: 65 6d 2e 6c 6f 61 64 4c 69 62 72 61 72 79 28 22  em.loadLibrary("
08a0: 73 71 6c 69 74 65 58 22 29 3b 0a 20 20 20 20 20  sqliteX");.     
08b0: 20 20 20 46 69 6c 65 20 64 62 44 69 72 20 3d 20     File dbDir = 
08c0: 67 65 74 43 6f 6e 74 65 78 74 28 29 2e 67 65 74  getContext().get
08d0: 44 69 72 28 22 74 65 73 74 73 22 2c 20 43 6f 6e  Dir("tests", Con
08e0: 74 65 78 74 2e 4d 4f 44 45 5f 50 52 49 56 41 54  text.MODE_PRIVAT
08f0: 45 29 3b 0a 20 20 20 20 20 20 20 20 6d 44 61 74  E);.        mDat
0900: 61 62 61 73 65 46 69 6c 65 20 3d 20 6e 65 77 20  abaseFile = new 
0910: 46 69 6c 65 28 64 62 44 69 72 2c 20 22 64 61 74  File(dbDir, "dat
0920: 61 62 61 73 65 5f 74 65 73 74 2e 64 62 22 29 3b  abase_test.db");
0930: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 44 61  .        if (mDa
0940: 74 61 62 61 73 65 46 69 6c 65 2e 65 78 69 73 74  tabaseFile.exist
0950: 73 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  s()) {.         
0960: 20 20 20 6d 44 61 74 61 62 61 73 65 46 69 6c 65     mDatabaseFile
0970: 2e 64 65 6c 65 74 65 28 29 3b 0a 20 20 20 20 20  .delete();.     
0980: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6d 44 61     }.        mDa
0990: 74 61 62 61 73 65 20 3d 20 53 51 4c 69 74 65 44  tabase = SQLiteD
09a0: 61 74 61 62 61 73 65 2e 6f 70 65 6e 4f 72 43 72  atabase.openOrCr
09b0: 65 61 74 65 44 61 74 61 62 61 73 65 28 6d 44 61  eateDatabase(mDa
09c0: 74 61 62 61 73 65 46 69 6c 65 2e 67 65 74 50 61  tabaseFile.getPa
09d0: 74 68 28 29 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20  th(), null);.   
09e0: 20 20 20 20 20 61 73 73 65 72 74 4e 6f 74 4e 75       assertNotNu
09f0: 6c 6c 28 6d 44 61 74 61 62 61 73 65 29 3b 0a 20  ll(mDatabase);. 
0a00: 20 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65         mDatabase
0a10: 2e 73 65 74 56 65 72 73 69 6f 6e 28 43 55 52 52  .setVersion(CURR
0a20: 45 4e 54 5f 44 41 54 41 42 41 53 45 5f 56 45 52  ENT_DATABASE_VER
0a30: 53 49 4f 4e 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  SION);.    }..  
0a40: 20 20 40 4f 76 65 72 72 69 64 65 0a 20 20 20 20    @Override.    
0a50: 70 72 6f 74 65 63 74 65 64 20 76 6f 69 64 20 74  protected void t
0a60: 65 61 72 44 6f 77 6e 28 29 20 74 68 72 6f 77 73  earDown() throws
0a70: 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20   Exception {.   
0a80: 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e 63       mDatabase.c
0a90: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
0aa0: 6d 44 61 74 61 62 61 73 65 46 69 6c 65 2e 64 65  mDatabaseFile.de
0ab0: 6c 65 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lete();.        
0ac0: 73 75 70 65 72 2e 74 65 61 72 44 6f 77 6e 28 29  super.tearDown()
0ad0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  ;.    }..    pub
0ae0: 6c 69 63 20 76 6f 69 64 20 73 65 74 75 70 54 65  lic void setupTe
0af0: 73 74 54 79 70 65 28 69 6e 74 20 74 65 73 74 54  stType(int testT
0b00: 79 70 65 29 20 7b 0a 20 20 20 20 20 20 20 20 6d  ype) {.        m
0b10: 54 65 73 74 54 79 70 65 20 3d 20 74 65 73 74 54  TestType = testT
0b20: 79 70 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ype;.    }..    
0b30: 70 72 69 76 61 74 65 20 43 75 72 73 6f 72 20 67  private Cursor g
0b40: 65 74 54 65 73 74 43 75 72 73 6f 72 28 43 75 72  etTestCursor(Cur
0b50: 73 6f 72 20 63 75 72 73 6f 72 29 20 7b 0a 20 20  sor cursor) {.  
0b60: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 6d 54        switch (mT
0b70: 65 73 74 54 79 70 65 29 20 7b 0a 20 20 20 20 20  estType) {.     
0b80: 20 20 20 63 61 73 65 20 54 59 50 45 5f 43 55 52     case TYPE_CUR
0b90: 53 4f 52 57 52 41 50 50 45 52 3a 0a 20 20 20 20  SORWRAPPER:.    
0ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
0bb0: 65 77 20 43 75 72 73 6f 72 57 72 61 70 70 65 72  ew CursorWrapper
0bc0: 28 63 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  (cursor);.      
0bd0: 20 20 63 61 73 65 20 54 59 50 45 5f 43 55 52 53    case TYPE_CURS
0be0: 4f 52 3a 0a 20 20 20 20 20 20 20 20 64 65 66 61  OR:.        defa
0bf0: 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ult:.           
0c00: 20 72 65 74 75 72 6e 20 63 75 72 73 6f 72 3b 0a   return cursor;.
0c10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
0c20: 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c  .    public bool
0c30: 65 61 6e 20 69 73 50 65 72 66 6f 72 6d 61 6e 63  ean isPerformanc
0c40: 65 4f 6e 6c 79 28 29 20 7b 0a 20 20 20 20 20 20  eOnly() {.      
0c50: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a    return false;.
0c60: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 20 54 68      }..    // Th
0c70: 65 73 65 20 74 65 73 74 20 63 61 6e 20 6f 6e 6c  ese test can onl
0c80: 79 20 62 65 20 72 75 6e 20 6f 6e 63 65 2e 0a 20  y be run once.. 
0c90: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 73 74     public int st
0ca0: 61 72 74 50 65 72 66 6f 72 6d 61 6e 63 65 28 49  artPerformance(I
0cb0: 6e 74 65 72 6d 65 64 69 61 74 65 73 20 69 6e 74  ntermediates int
0cc0: 65 72 6d 65 64 69 61 74 65 73 29 20 7b 0a 20 20  ermediates) {.  
0cd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
0ce0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
0cf0: 74 65 20 76 6f 69 64 20 70 6f 70 75 6c 61 74 65  te void populate
0d00: 44 65 66 61 75 6c 74 54 61 62 6c 65 28 29 20 7b  DefaultTable() {
0d10: 0a 20 20 20 20 20 20 20 20 6d 44 61 74 61 62 61  .        mDataba
0d20: 73 65 2e 65 78 65 63 53 51 4c 28 22 43 52 45 41  se.execSQL("CREA
0d30: 54 45 20 54 41 42 4c 45 20 74 65 73 74 20 28 5f  TE TABLE test (_
0d40: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  id INTEGER PRIMA
0d50: 52 59 20 4b 45 59 2c 20 64 61 74 61 20 54 45 58  RY KEY, data TEX
0d60: 54 29 3b 22 29 3b 0a 0a 20 20 20 20 20 20 20 20  T);");..        
0d70: 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63 53 51  mDatabase.execSQ
0d80: 4c 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  L("INSERT INTO t
0d90: 65 73 74 20 28 64 61 74 61 29 20 56 41 4c 55 45  est (data) VALUE
0da0: 53 20 28 27 22 20 2b 20 73 53 74 72 69 6e 67 31  S ('" + sString1
0db0: 20 2b 20 22 27 29 3b 22 29 3b 0a 20 20 20 20 20   + "');");.     
0dc0: 20 20 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65     mDatabase.exe
0dd0: 63 53 51 4c 28 22 49 4e 53 45 52 54 20 49 4e 54  cSQL("INSERT INT
0de0: 4f 20 74 65 73 74 20 28 64 61 74 61 29 20 56 41  O test (data) VA
0df0: 4c 55 45 53 20 28 27 22 20 2b 20 73 53 74 72 69  LUES ('" + sStri
0e00: 6e 67 32 20 2b 20 22 27 29 3b 22 29 3b 0a 20 20  ng2 + "');");.  
0e10: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e        mDatabase.
0e20: 65 78 65 63 53 51 4c 28 22 49 4e 53 45 52 54 20  execSQL("INSERT 
0e30: 49 4e 54 4f 20 74 65 73 74 20 28 64 61 74 61 29  INTO test (data)
0e40: 20 56 41 4c 55 45 53 20 28 27 22 20 2b 20 73 53   VALUES ('" + sS
0e50: 74 72 69 6e 67 33 20 2b 20 22 27 29 3b 22 29 3b  tring3 + "');");
0e60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40 4d 65 64  .    }..    @Med
0e70: 69 75 6d 54 65 73 74 0a 20 20 20 20 70 75 62 6c  iumTest.    publ
0e80: 69 63 20 76 6f 69 64 20 74 65 73 74 42 6c 6f 62  ic void testBlob
0e90: 28 29 20 74 68 72 6f 77 73 20 45 78 63 65 70 74  () throws Except
0ea0: 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f  ion {.        //
0eb0: 20 63 72 65 61 74 65 20 74 61 62 6c 65 0a 20 20   create table.  
0ec0: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e        mDatabase.
0ed0: 65 78 65 63 53 51 4c 28 0a 20 20 20 20 20 20 20  execSQL(.       
0ee0: 20 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45           "CREATE
0ef0: 20 54 41 42 4c 45 20 74 65 73 74 20 28 5f 69 64   TABLE test (_id
0f00: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
0f10: 20 4b 45 59 2c 20 73 20 54 45 58 54 2c 20 64 20   KEY, s TEXT, d 
0f20: 52 45 41 4c 2c 20 6c 20 49 4e 54 45 47 45 52 2c  REAL, l INTEGER,
0f30: 20 62 20 42 4c 4f 42 29 3b 22 29 3b 0a 20 20 20   b BLOB);");.   
0f40: 20 20 20 20 20 2f 2f 20 69 6e 73 65 72 74 20 62       // insert b
0f50: 6c 6f 62 0a 20 20 20 20 20 20 20 20 4f 62 6a 65  lob.        Obje
0f60: 63 74 5b 5d 20 61 72 67 73 20 3d 20 6e 65 77 20  ct[] args = new 
0f70: 4f 62 6a 65 63 74 5b 34 5d 3b 0a 0a 20 20 20 20  Object[4];..    
0f80: 20 20 20 20 62 79 74 65 5b 5d 20 62 6c 6f 62 20      byte[] blob 
0f90: 3d 20 6e 65 77 20 62 79 74 65 5b 31 30 30 30 5d  = new byte[1000]
0fa0: 3b 0a 20 20 20 20 20 20 20 20 62 79 74 65 20 76  ;.        byte v
0fb0: 61 6c 75 65 20 3d 20 39 39 3b 0a 20 20 20 20 20  alue = 99;.     
0fc0: 20 20 20 41 72 72 61 79 73 2e 66 69 6c 6c 28 62     Arrays.fill(b
0fd0: 6c 6f 62 2c 20 76 61 6c 75 65 29 3b 0a 20 20 20  lob, value);.   
0fe0: 20 20 20 20 20 61 72 67 73 5b 33 5d 20 3d 20 62       args[3] = b
0ff0: 6c 6f 62 3b 0a 0a 20 20 20 20 20 20 20 20 53 74  lob;..        St
1000: 72 69 6e 67 20 73 20 3d 20 6e 65 77 20 53 74 72  ring s = new Str
1010: 69 6e 67 28 22 74 65 78 74 22 29 3b 0a 20 20 20  ing("text");.   
1020: 20 20 20 20 20 61 72 67 73 5b 30 5d 20 3d 20 73       args[0] = s
1030: 3b 0a 20 20 20 20 20 20 20 20 44 6f 75 62 6c 65  ;.        Double
1040: 20 64 20 3d 20 39 39 2e 39 3b 0a 20 20 20 20 20   d = 99.9;.     
1050: 20 20 20 61 72 67 73 5b 31 5d 20 3d 20 64 3b 0a     args[1] = d;.
1060: 20 20 20 20 20 20 20 20 4c 6f 6e 67 20 6c 20 3d          Long l =
1070: 20 28 6c 6f 6e 67 29 20 31 30 30 30 3b 0a 20 20   (long) 1000;.  
1080: 20 20 20 20 20 20 61 72 67 73 5b 32 5d 20 3d 20        args[2] = 
1090: 6c 3b 0a 0a 20 20 20 20 20 20 20 20 53 74 72 69  l;..        Stri
10a0: 6e 67 20 73 71 6c 20 3d 20 22 49 4e 53 45 52 54  ng sql = "INSERT
10b0: 20 49 4e 54 4f 20 74 65 73 74 20 28 73 2c 20 64   INTO test (s, d
10c0: 2c 20 6c 2c 20 62 29 20 56 41 4c 55 45 53 20 28  , l, b) VALUES (
10d0: 3f 2c 3f 2c 3f 2c 3f 29 22 3b 0a 20 20 20 20 20  ?,?,?,?)";.     
10e0: 20 20 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65     mDatabase.exe
10f0: 63 53 51 4c 28 73 71 6c 2c 20 61 72 67 73 29 3b  cSQL(sql, args);
1100: 0a 20 20 20 20 20 20 20 20 2f 2f 20 75 73 65 20  .        // use 
1110: 63 75 72 73 6f 72 20 74 6f 20 61 63 63 65 73 73  cursor to access
1120: 20 62 6c 6f 62 0a 0a 20 20 20 20 20 20 20 20 43   blob..        C
1130: 75 72 73 6f 72 20 74 65 73 74 43 75 72 73 6f 72  ursor testCursor
1140: 20 3d 20 6d 44 61 74 61 62 61 73 65 2e 71 75 65   = mDatabase.que
1150: 72 79 28 22 74 65 73 74 22 2c 20 6e 75 6c 6c 2c  ry("test", null,
1160: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
1170: 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 29 3b 0a  l, null, null);.
1180: 0a 20 20 20 20 20 20 20 20 74 65 73 74 43 75 72  .        testCur
1190: 73 6f 72 2e 6d 6f 76 65 54 6f 4e 65 78 74 28 29  sor.moveToNext()
11a0: 3b 0a 20 20 20 20 20 20 20 20 43 6f 6e 74 65 6e  ;.        Conten
11b0: 74 56 61 6c 75 65 73 20 63 76 20 3d 20 6e 65 77  tValues cv = new
11c0: 20 43 6f 6e 74 65 6e 74 56 61 6c 75 65 73 28 29   ContentValues()
11d0: 3b 0a 20 20 20 20 20 20 20 20 44 61 74 61 62 61  ;.        Databa
11e0: 73 65 55 74 69 6c 73 2e 63 75 72 73 6f 72 52 6f  seUtils.cursorRo
11f0: 77 54 6f 43 6f 6e 74 65 6e 74 56 61 6c 75 65 73  wToContentValues
1200: 28 74 65 73 74 43 75 72 73 6f 72 2c 20 63 76 29  (testCursor, cv)
1210: 3b 0a 0a 20 20 20 20 20 20 20 20 69 6e 74 20 62  ;..        int b
1220: 43 6f 6c 20 3d 20 74 65 73 74 43 75 72 73 6f 72  Col = testCursor
1230: 2e 67 65 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f  .getColumnIndexO
1240: 72 54 68 72 6f 77 28 22 62 22 29 3b 0a 20 20 20  rThrow("b");.   
1250: 20 20 20 20 20 69 6e 74 20 73 43 6f 6c 20 3d 20       int sCol = 
1260: 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 43 6f  testCursor.getCo
1270: 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68 72 6f 77  lumnIndexOrThrow
1280: 28 22 73 22 29 3b 0a 20 20 20 20 20 20 20 20 69  ("s");.        i
1290: 6e 74 20 64 43 6f 6c 20 3d 20 74 65 73 74 43 75  nt dCol = testCu
12a0: 72 73 6f 72 2e 67 65 74 43 6f 6c 75 6d 6e 49 6e  rsor.getColumnIn
12b0: 64 65 78 4f 72 54 68 72 6f 77 28 22 64 22 29 3b  dexOrThrow("d");
12c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 43 6f  .        int lCo
12d0: 6c 20 3d 20 74 65 73 74 43 75 72 73 6f 72 2e 67  l = testCursor.g
12e0: 65 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f 72 54  etColumnIndexOrT
12f0: 68 72 6f 77 28 22 6c 22 29 3b 0a 20 20 20 20 20  hrow("l");.     
1300: 20 20 20 62 79 74 65 5b 5d 20 63 42 6c 6f 62 20     byte[] cBlob 
1310: 3d 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74  = testCursor.get
1320: 42 6c 6f 62 28 62 43 6f 6c 29 3b 0a 20 20 20 20  Blob(bCol);.    
1330: 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28 41      assertTrue(A
1340: 72 72 61 79 73 2e 65 71 75 61 6c 73 28 62 6c 6f  rrays.equals(blo
1350: 62 2c 20 63 42 6c 6f 62 29 29 3b 0a 20 20 20 20  b, cBlob));.    
1360: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
1370: 28 73 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67  (s, testCursor.g
1380: 65 74 53 74 72 69 6e 67 28 73 43 6f 6c 29 29 3b  etString(sCol));
1390: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45  .        assertE
13a0: 71 75 61 6c 73 28 28 64 6f 75 62 6c 65 29 20 64  quals((double) d
13b0: 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74  , testCursor.get
13c0: 44 6f 75 62 6c 65 28 64 43 6f 6c 29 29 3b 0a 20  Double(dCol));. 
13d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75         assertEqu
13e0: 61 6c 73 28 28 6c 6f 6e 67 29 20 6c 2c 20 74 65  als((long) l, te
13f0: 73 74 43 75 72 73 6f 72 2e 67 65 74 4c 6f 6e 67  stCursor.getLong
1400: 28 6c 43 6f 6c 29 29 3b 0a 20 20 20 20 7d 0a 0a  (lCol));.    }..
1410: 20 20 20 20 40 4d 65 64 69 75 6d 54 65 73 74 0a      @MediumTest.
1420: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
1430: 74 65 73 74 52 65 61 6c 43 6f 6c 75 6d 6e 73 28  testRealColumns(
1440: 29 20 74 68 72 6f 77 73 20 45 78 63 65 70 74 69  ) throws Excepti
1450: 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 6d 44 61  on {.        mDa
1460: 74 61 62 61 73 65 2e 65 78 65 63 53 51 4c 28 22  tabase.execSQL("
1470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
1480: 74 20 28 5f 69 64 20 49 4e 54 45 47 45 52 20 50  t (_id INTEGER P
1490: 52 49 4d 41 52 59 20 4b 45 59 2c 20 64 61 74 61  RIMARY KEY, data
14a0: 20 52 45 41 4c 29 3b 22 29 3b 0a 20 20 20 20 20   REAL);");.     
14b0: 20 20 20 43 6f 6e 74 65 6e 74 56 61 6c 75 65 73     ContentValues
14c0: 20 76 61 6c 75 65 73 20 3d 20 6e 65 77 20 43 6f   values = new Co
14d0: 6e 74 65 6e 74 56 61 6c 75 65 73 28 29 3b 0a 20  ntentValues();. 
14e0: 20 20 20 20 20 20 20 76 61 6c 75 65 73 2e 70 75         values.pu
14f0: 74 28 22 64 61 74 61 22 2c 20 34 32 2e 31 31 29  t("data", 42.11)
1500: 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 69  ;.        long i
1510: 64 20 3d 20 6d 44 61 74 61 62 61 73 65 2e 69 6e  d = mDatabase.in
1520: 73 65 72 74 28 22 74 65 73 74 22 2c 20 22 64 61  sert("test", "da
1530: 74 61 22 2c 20 76 61 6c 75 65 73 29 3b 0a 20 20  ta", values);.  
1540: 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65        assertTrue
1550: 28 69 64 20 3e 20 30 29 3b 0a 20 20 20 20 20 20  (id > 0);.      
1560: 20 20 43 75 72 73 6f 72 20 74 65 73 74 43 75 72    Cursor testCur
1570: 73 6f 72 20 3d 20 67 65 74 54 65 73 74 43 75 72  sor = getTestCur
1580: 73 6f 72 28 6d 44 61 74 61 62 61 73 65 2e 72 61  sor(mDatabase.ra
1590: 77 51 75 65 72 79 28 22 53 45 4c 45 43 54 20 64  wQuery("SELECT d
15a0: 61 74 61 20 46 52 4f 4d 20 74 65 73 74 22 2c 20  ata FROM test", 
15b0: 6e 75 6c 6c 29 29 3b 0a 20 20 20 20 20 20 20 20  null));.        
15c0: 61 73 73 65 72 74 4e 6f 74 4e 75 6c 6c 28 74 65  assertNotNull(te
15d0: 73 74 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  stCursor);.     
15e0: 20 20 20 61 73 73 65 72 74 54 72 75 65 28 74 65     assertTrue(te
15f0: 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65 54 6f 46  stCursor.moveToF
1600: 69 72 73 74 28 29 29 3b 0a 20 20 20 20 20 20 20  irst());.       
1610: 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 34 32   assertEquals(42
1620: 2e 31 31 2c 20 74 65 73 74 43 75 72 73 6f 72 2e  .11, testCursor.
1630: 67 65 74 44 6f 75 62 6c 65 28 30 29 29 3b 0a 20  getDouble(0));. 
1640: 20 20 20 20 20 20 20 74 65 73 74 43 75 72 73 6f         testCurso
1650: 72 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d  r.close();.    }
1660: 0a 0a 20 20 20 20 40 4d 65 64 69 75 6d 54 65 73  ..    @MediumTes
1670: 74 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  t.    public voi
1680: 64 20 74 65 73 74 43 75 72 73 6f 72 31 28 29 20  d testCursor1() 
1690: 74 68 72 6f 77 73 20 45 78 63 65 70 74 69 6f 6e  throws Exception
16a0: 20 7b 0a 20 20 20 20 20 20 20 20 70 6f 70 75 6c   {.        popul
16b0: 61 74 65 44 65 66 61 75 6c 74 54 61 62 6c 65 28  ateDefaultTable(
16c0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 43 75 72 73  );..        Curs
16d0: 6f 72 20 74 65 73 74 43 75 72 73 6f 72 20 3d 20  or testCursor = 
16e0: 67 65 74 54 65 73 74 43 75 72 73 6f 72 28 6d 44  getTestCursor(mD
16f0: 61 74 61 62 61 73 65 2e 71 75 65 72 79 28 22 74  atabase.query("t
1700: 65 73 74 22 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  est", null, null
1710: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75  , null, null, nu
1720: 6c 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll,.            
1730: 20 20 20 20 6e 75 6c 6c 29 29 3b 0a 0a 20 20 20      null));..   
1740: 20 20 20 20 20 69 6e 74 20 64 61 74 61 43 6f 6c       int dataCol
1750: 75 6d 6e 20 3d 20 74 65 73 74 43 75 72 73 6f 72  umn = testCursor
1760: 2e 67 65 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f  .getColumnIndexO
1770: 72 54 68 72 6f 77 28 22 64 61 74 61 22 29 3b 0a  rThrow("data");.
1780: 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 68 65 20  .        // The 
1790: 63 75 72 73 6f 72 20 73 68 6f 75 6c 64 20 69 67  cursor should ig
17a0: 6e 6f 72 65 20 74 65 78 74 20 62 65 66 6f 72 65  nore text before
17b0: 20 74 68 65 20 6c 61 73 74 20 70 65 72 69 6f 64   the last period
17c0: 20 77 68 65 6e 20 6c 6f 6f 6b 69 6e 67 20 66 6f   when looking fo
17d0: 72 20 61 20 63 6f 6c 75 6d 6e 2e 20 28 54 68 69  r a column. (Thi
17e0: 73 0a 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20  s.        // is 
17f0: 61 20 74 65 6d 70 6f 72 61 72 79 20 68 61 63 6b  a temporary hack
1800: 20 69 6e 20 61 6c 6c 20 69 6d 70 6c 65 6d 65 6e   in all implemen
1810: 74 61 74 69 6f 6e 73 20 6f 66 20 67 65 74 43 6f  tations of getCo
1820: 6c 75 6d 6e 49 6e 64 65 78 2e 29 0a 20 20 20 20  lumnIndex.).    
1830: 20 20 20 20 69 6e 74 20 64 61 74 61 43 6f 6c 75      int dataColu
1840: 6d 6e 32 20 3d 20 74 65 73 74 43 75 72 73 6f 72  mn2 = testCursor
1850: 2e 67 65 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f  .getColumnIndexO
1860: 72 54 68 72 6f 77 28 22 6a 75 6e 6b 2e 64 61 74  rThrow("junk.dat
1870: 61 22 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  a");.        ass
1880: 65 72 74 45 71 75 61 6c 73 28 64 61 74 61 43 6f  ertEquals(dataCo
1890: 6c 75 6d 6e 2c 20 64 61 74 61 43 6f 6c 75 6d 6e  lumn, dataColumn
18a0: 32 29 3b 0a 0a 20 20 20 20 20 20 20 20 61 73 73  2);..        ass
18b0: 65 72 74 53 61 6d 65 28 33 2c 20 74 65 73 74 43  ertSame(3, testC
18c0: 75 72 73 6f 72 2e 67 65 74 43 6f 75 6e 74 28 29  ursor.getCount()
18d0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 61 73 73 65  );..        asse
18e0: 72 74 54 72 75 65 28 74 65 73 74 43 75 72 73 6f  rtTrue(testCurso
18f0: 72 2e 69 73 42 65 66 6f 72 65 46 69 72 73 74 28  r.isBeforeFirst(
1900: 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 74 72 79  ));..        try
1910: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74   {.            t
1920: 65 73 74 43 75 72 73 6f 72 2e 67 65 74 49 6e 74  estCursor.getInt
1930: 28 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (0);.           
1940: 20 66 61 69 6c 28 22 43 75 72 73 6f 72 49 6e 64   fail("CursorInd
1950: 65 78 4f 75 74 4f 66 42 6f 75 6e 64 73 45 78 63  exOutOfBoundsExc
1960: 65 70 74 69 6f 6e 20 65 78 70 65 63 74 65 64 22  eption expected"
1970: 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 63 61 74  );.        } cat
1980: 63 68 20 28 43 75 72 73 6f 72 49 6e 64 65 78 4f  ch (CursorIndexO
1990: 75 74 4f 66 42 6f 75 6e 64 73 45 78 63 65 70 74  utOfBoundsExcept
19a0: 69 6f 6e 20 65 78 29 20 7b 0a 20 20 20 20 20 20  ion ex) {.      
19b0: 20 20 20 20 20 20 2f 2f 20 65 78 70 65 63 74 65        // expecte
19c0: 64 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  d.        }..   
19d0: 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72 2e       testCursor.
19e0: 6d 6f 76 65 54 6f 4e 65 78 74 28 29 3b 0a 20 20  moveToNext();.  
19f0: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
1a00: 6c 73 28 31 2c 20 74 65 73 74 43 75 72 73 6f 72  ls(1, testCursor
1a10: 2e 67 65 74 49 6e 74 28 30 29 29 3b 0a 0a 20 20  .getInt(0));..  
1a20: 20 20 20 20 20 20 53 74 72 69 6e 67 20 73 20 3d        String s =
1a30: 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 53   testCursor.getS
1a40: 74 72 69 6e 67 28 64 61 74 61 43 6f 6c 75 6d 6e  tring(dataColumn
1a50: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1a60: 74 45 71 75 61 6c 73 28 73 53 74 72 69 6e 67 31  tEquals(sString1
1a70: 2c 20 73 29 3b 0a 0a 20 20 20 20 20 20 20 20 74  , s);..        t
1a80: 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65 54 6f  estCursor.moveTo
1a90: 4e 65 78 74 28 29 3b 0a 20 20 20 20 20 20 20 20  Next();.        
1aa0: 73 20 3d 20 74 65 73 74 43 75 72 73 6f 72 2e 67  s = testCursor.g
1ab0: 65 74 53 74 72 69 6e 67 28 64 61 74 61 43 6f 6c  etString(dataCol
1ac0: 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 61 73  umn);.        as
1ad0: 73 65 72 74 45 71 75 61 6c 73 28 73 53 74 72 69  sertEquals(sStri
1ae0: 6e 67 32 2c 20 73 29 3b 0a 0a 20 20 20 20 20 20  ng2, s);..      
1af0: 20 20 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76    testCursor.mov
1b00: 65 54 6f 4e 65 78 74 28 29 3b 0a 20 20 20 20 20  eToNext();.     
1b10: 20 20 20 73 20 3d 20 74 65 73 74 43 75 72 73 6f     s = testCurso
1b20: 72 2e 67 65 74 53 74 72 69 6e 67 28 64 61 74 61  r.getString(data
1b30: 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20  Column);.       
1b40: 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 73 53   assertEquals(sS
1b50: 74 72 69 6e 67 33 2c 20 73 29 3b 0a 0a 20 20 20  tring3, s);..   
1b60: 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72 2e       testCursor.
1b70: 6d 6f 76 65 54 6f 50 6f 73 69 74 69 6f 6e 28 2d  moveToPosition(-
1b80: 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
1b90: 43 75 72 73 6f 72 2e 6d 6f 76 65 54 6f 4e 65 78  Cursor.moveToNex
1ba0: 74 28 29 3b 0a 20 20 20 20 20 20 20 20 73 20 3d  t();.        s =
1bb0: 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 53   testCursor.getS
1bc0: 74 72 69 6e 67 28 64 61 74 61 43 6f 6c 75 6d 6e  tring(dataColumn
1bd0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1be0: 74 45 71 75 61 6c 73 28 73 53 74 72 69 6e 67 31  tEquals(sString1
1bf0: 2c 20 73 29 3b 0a 0a 20 20 20 20 20 20 20 20 74  , s);..        t
1c00: 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65 54 6f  estCursor.moveTo
1c10: 50 6f 73 69 74 69 6f 6e 28 32 29 3b 0a 20 20 20  Position(2);.   
1c20: 20 20 20 20 20 73 20 3d 20 74 65 73 74 43 75 72       s = testCur
1c30: 73 6f 72 2e 67 65 74 53 74 72 69 6e 67 28 64 61  sor.getString(da
1c40: 74 61 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20  taColumn);.     
1c50: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
1c60: 73 53 74 72 69 6e 67 33 2c 20 73 29 3b 0a 0a 20  sString3, s);.. 
1c70: 20 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 0a 20         int i;.. 
1c80: 20 20 20 20 20 20 20 66 6f 72 20 28 74 65 73 74         for (test
1c90: 43 75 72 73 6f 72 2e 6d 6f 76 65 54 6f 46 69 72  Cursor.moveToFir
1ca0: 73 74 28 29 2c 20 69 20 3d 20 30 3b 20 21 74 65  st(), i = 0; !te
1cb0: 73 74 43 75 72 73 6f 72 2e 69 73 41 66 74 65 72  stCursor.isAfter
1cc0: 4c 61 73 74 28 29 3b 0a 20 20 20 20 20 20 20 20  Last();.        
1cd0: 20 20 20 20 20 20 20 20 74 65 73 74 43 75 72 73          testCurs
1ce0: 6f 72 2e 6d 6f 76 65 54 6f 4e 65 78 74 28 29 2c  or.moveToNext(),
1cf0: 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20   i++) {.        
1d00: 20 20 20 20 74 65 73 74 43 75 72 73 6f 72 2e 67      testCursor.g
1d10: 65 74 49 6e 74 28 30 29 3b 0a 20 20 20 20 20 20  etInt(0);.      
1d20: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 61 73 73    }..        ass
1d30: 65 72 74 45 71 75 61 6c 73 28 33 2c 20 69 29 3b  ertEquals(3, i);
1d40: 0a 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a  ..        try {.
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1d60: 43 75 72 73 6f 72 2e 67 65 74 49 6e 74 28 30 29  Cursor.getInt(0)
1d70: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 61  ;.            fa
1d80: 69 6c 28 22 43 75 72 73 6f 72 49 6e 64 65 78 4f  il("CursorIndexO
1d90: 75 74 4f 66 42 6f 75 6e 64 73 45 78 63 65 70 74  utOfBoundsExcept
1da0: 69 6f 6e 20 65 78 70 65 63 74 65 64 22 29 3b 0a  ion expected");.
1db0: 20 20 20 20 20 20 20 20 7d 20 63 61 74 63 68 20          } catch 
1dc0: 28 43 75 72 73 6f 72 49 6e 64 65 78 4f 75 74 4f  (CursorIndexOutO
1dd0: 66 42 6f 75 6e 64 73 45 78 63 65 70 74 69 6f 6e  fBoundsException
1de0: 20 65 78 29 20 7b 0a 20 20 20 20 20 20 20 20 20   ex) {.         
1df0: 20 20 20 2f 2f 20 65 78 70 65 63 74 65 64 0a 20     // expected. 
1e00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1e10: 20 74 65 73 74 43 75 72 73 6f 72 2e 63 6c 6f 73   testCursor.clos
1e20: 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e();.    }..    
1e30: 40 4d 65 64 69 75 6d 54 65 73 74 0a 20 20 20 20  @MediumTest.    
1e40: 70 75 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74  public void test
1e50: 43 75 72 73 6f 72 32 28 29 20 74 68 72 6f 77 73  Cursor2() throws
1e60: 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20   Exception {.   
1e70: 20 20 20 20 20 70 6f 70 75 6c 61 74 65 44 65 66       populateDef
1e80: 61 75 6c 74 54 61 62 6c 65 28 29 3b 0a 0a 20 20  aultTable();..  
1e90: 20 20 20 20 20 20 43 75 72 73 6f 72 20 74 65 73        Cursor tes
1ea0: 74 43 75 72 73 6f 72 20 3d 20 67 65 74 54 65 73  tCursor = getTes
1eb0: 74 43 75 72 73 6f 72 28 6d 44 61 74 61 62 61 73  tCursor(mDatabas
1ec0: 65 2e 71 75 65 72 79 28 22 74 65 73 74 22 2c 20  e.query("test", 
1ed0: 6e 75 6c 6c 2c 20 22 5f 69 64 20 3e 20 31 30 30  null, "_id > 100
1ee0: 30 22 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0a  0", null, null,.
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f00: 6e 75 6c 6c 2c 20 6e 75 6c 6c 29 29 3b 0a 20 20  null, null));.  
1f10: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
1f20: 6c 73 28 30 2c 20 74 65 73 74 43 75 72 73 6f 72  ls(0, testCursor
1f30: 2e 67 65 74 43 6f 75 6e 74 28 29 29 3b 0a 20 20  .getCount());.  
1f40: 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65        assertTrue
1f50: 28 74 65 73 74 43 75 72 73 6f 72 2e 69 73 42 65  (testCursor.isBe
1f60: 66 6f 72 65 46 69 72 73 74 28 29 29 3b 0a 0a 20  foreFirst());.. 
1f70: 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20         try {.   
1f80: 20 20 20 20 20 20 20 20 20 74 65 73 74 43 75 72           testCur
1f90: 73 6f 72 2e 67 65 74 49 6e 74 28 30 29 3b 0a 20  sor.getInt(0);. 
1fa0: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 28             fail(
1fb0: 22 43 75 72 73 6f 72 49 6e 64 65 78 4f 75 74 4f  "CursorIndexOutO
1fc0: 66 42 6f 75 6e 64 73 45 78 63 65 70 74 69 6f 6e  fBoundsException
1fd0: 20 65 78 70 65 63 74 65 64 22 29 3b 0a 20 20 20   expected");.   
1fe0: 20 20 20 20 20 7d 20 63 61 74 63 68 20 28 43 75       } catch (Cu
1ff0: 72 73 6f 72 49 6e 64 65 78 4f 75 74 4f 66 42 6f  rsorIndexOutOfBo
2000: 75 6e 64 73 45 78 63 65 70 74 69 6f 6e 20 65 78  undsException ex
2010: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2020: 2f 2f 20 65 78 70 65 63 74 65 64 0a 20 20 20 20  // expected.    
2030: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69      }..        i
2040: 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20 66 6f  nt i;.        fo
2050: 72 20 28 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f  r (testCursor.mo
2060: 76 65 54 6f 46 69 72 73 74 28 29 2c 20 69 20 3d  veToFirst(), i =
2070: 20 30 3b 20 21 74 65 73 74 43 75 72 73 6f 72 2e   0; !testCursor.
2080: 69 73 41 66 74 65 72 4c 61 73 74 28 29 3b 0a 20  isAfterLast();. 
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20a0: 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65 54 6f  estCursor.moveTo
20b0: 4e 65 78 74 28 29 2c 20 69 2b 2b 29 20 7b 0a 20  Next(), i++) {. 
20c0: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 43             testC
20d0: 75 72 73 6f 72 2e 67 65 74 49 6e 74 28 30 29 3b  ursor.getInt(0);
20e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
20f0: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
2100: 30 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 74  0, i);.        t
2110: 72 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ry {.           
2120: 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 49   testCursor.getI
2130: 6e 74 28 30 29 3b 0a 20 20 20 20 20 20 20 20 20  nt(0);.         
2140: 20 20 20 66 61 69 6c 28 22 43 75 72 73 6f 72 49     fail("CursorI
2150: 6e 64 65 78 4f 75 74 4f 66 42 6f 75 6e 64 73 45  ndexOutOfBoundsE
2160: 78 63 65 70 74 69 6f 6e 20 65 78 70 65 63 74 65  xception expecte
2170: 64 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 63  d");.        } c
2180: 61 74 63 68 20 28 43 75 72 73 6f 72 49 6e 64 65  atch (CursorInde
2190: 78 4f 75 74 4f 66 42 6f 75 6e 64 73 45 78 63 65  xOutOfBoundsExce
21a0: 70 74 69 6f 6e 20 65 78 29 20 7b 0a 20 20 20 20  ption ex) {.    
21b0: 20 20 20 20 20 20 20 20 2f 2f 20 65 78 70 65 63          // expec
21c0: 74 65 64 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ted.        }.  
21d0: 20 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72        testCursor
21e0: 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d 0a  .close();.    }.
21f0: 0a 20 20 20 20 40 4d 65 64 69 75 6d 54 65 73 74  .    @MediumTest
2200: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64  .    public void
2210: 20 74 65 73 74 4c 61 72 67 65 46 69 65 6c 64 28   testLargeField(
2220: 29 20 74 68 72 6f 77 73 20 45 78 63 65 70 74 69  ) throws Excepti
2230: 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 6d 44 61  on {.        mDa
2240: 74 61 62 61 73 65 2e 65 78 65 63 53 51 4c 28 22  tabase.execSQL("
2250: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
2260: 74 20 28 5f 69 64 20 49 4e 54 45 47 45 52 20 50  t (_id INTEGER P
2270: 52 49 4d 41 52 59 20 4b 45 59 2c 20 64 61 74 61  RIMARY KEY, data
2280: 20 54 45 58 54 29 3b 22 29 3b 0a 0a 20 20 20 20   TEXT);");..    
2290: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
22a0: 72 20 73 71 6c 20 3d 20 6e 65 77 20 53 74 72 69  r sql = new Stri
22b0: 6e 67 42 75 69 6c 64 65 72 28 32 31 30 30 29 3b  ngBuilder(2100);
22c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 2e 61 70 70  .        sql.app
22d0: 65 6e 64 28 22 49 4e 53 45 52 54 20 49 4e 54 4f  end("INSERT INTO
22e0: 20 74 65 73 74 20 28 64 61 74 61 29 20 56 41 4c   test (data) VAL
22f0: 55 45 53 20 28 27 22 29 3b 0a 20 20 20 20 20 20  UES ('");.      
2300: 20 20 52 61 6e 64 6f 6d 20 72 61 6e 64 6f 6d 20    Random random 
2310: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 53 79 73  = new Random(Sys
2320: 74 65 6d 2e 63 75 72 72 65 6e 74 54 69 6d 65 4d  tem.currentTimeM
2330: 69 6c 6c 69 73 28 29 29 3b 0a 20 20 20 20 20 20  illis());.      
2340: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
2350: 72 61 6e 64 6f 6d 53 74 72 69 6e 67 20 3d 20 6e  randomString = n
2360: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
2370: 28 31 39 37 39 29 3b 0a 20 20 20 20 20 20 20 20  (1979);.        
2380: 66 6f 72 20 28 69 6e 74 20 69 20 3d 20 30 3b 20  for (int i = 0; 
2390: 69 20 3c 20 31 39 37 39 3b 20 69 2b 2b 29 20 7b  i < 1979; i++) {
23a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 6e  .            ran
23b0: 64 6f 6d 53 74 72 69 6e 67 2e 61 70 70 65 6e 64  domString.append
23c0: 28 28 72 61 6e 64 6f 6d 2e 6e 65 78 74 49 6e 74  ((random.nextInt
23d0: 28 29 20 26 20 30 78 66 29 20 25 20 31 30 29 3b  () & 0xf) % 10);
23e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
23f0: 20 20 20 73 71 6c 2e 61 70 70 65 6e 64 28 72 61     sql.append(ra
2400: 6e 64 6f 6d 53 74 72 69 6e 67 29 3b 0a 20 20 20  ndomString);.   
2410: 20 20 20 20 20 73 71 6c 2e 61 70 70 65 6e 64 28       sql.append(
2420: 22 27 29 3b 22 29 3b 0a 20 20 20 20 20 20 20 20  "');");.        
2430: 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63 53 51  mDatabase.execSQ
2440: 4c 28 73 71 6c 2e 74 6f 53 74 72 69 6e 67 28 29  L(sql.toString()
2450: 29 3b 0a 0a 20 20 20 20 20 20 20 20 43 75 72 73  );..        Curs
2460: 6f 72 20 74 65 73 74 43 75 72 73 6f 72 20 3d 20  or testCursor = 
2470: 67 65 74 54 65 73 74 43 75 72 73 6f 72 28 6d 44  getTestCursor(mD
2480: 61 74 61 62 61 73 65 2e 71 75 65 72 79 28 22 74  atabase.query("t
2490: 65 73 74 22 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  est", null, null
24a0: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75  , null, null, nu
24b0: 6c 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll,.            
24c0: 20 20 20 20 6e 75 6c 6c 29 29 3b 0a 20 20 20 20      null));.    
24d0: 20 20 20 20 61 73 73 65 72 74 4e 6f 74 4e 75 6c      assertNotNul
24e0: 6c 28 74 65 73 74 43 75 72 73 6f 72 29 3b 0a 20  l(testCursor);. 
24f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75         assertEqu
2500: 61 6c 73 28 31 2c 20 74 65 73 74 43 75 72 73 6f  als(1, testCurso
2510: 72 2e 67 65 74 43 6f 75 6e 74 28 29 29 3b 0a 0a  r.getCount());..
2520: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72          assertTr
2530: 75 65 28 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f  ue(testCursor.mo
2540: 76 65 54 6f 46 69 72 73 74 28 29 29 3b 0a 20 20  veToFirst());.  
2550: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
2560: 6c 73 28 30 2c 20 74 65 73 74 43 75 72 73 6f 72  ls(0, testCursor
2570: 2e 67 65 74 50 6f 73 69 74 69 6f 6e 28 29 29 3b  .getPosition());
2580: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 20  .        String 
2590: 6c 61 72 67 65 53 74 72 69 6e 67 20 3d 20 74 65  largeString = te
25a0: 73 74 43 75 72 73 6f 72 2e 67 65 74 53 74 72 69  stCursor.getStri
25b0: 6e 67 28 74 65 73 74 43 75 72 73 6f 72 2e 67 65  ng(testCursor.ge
25c0: 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68  tColumnIndexOrTh
25d0: 72 6f 77 28 22 64 61 74 61 22 29 29 3b 0a 20 20  row("data"));.  
25e0: 20 20 20 20 20 20 61 73 73 65 72 74 4e 6f 74 4e        assertNotN
25f0: 75 6c 6c 28 6c 61 72 67 65 53 74 72 69 6e 67 29  ull(largeString)
2600: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
2610: 45 71 75 61 6c 73 28 72 61 6e 64 6f 6d 53 74 72  Equals(randomStr
2620: 69 6e 67 2e 74 6f 53 74 72 69 6e 67 28 29 2c 20  ing.toString(), 
2630: 6c 61 72 67 65 53 74 72 69 6e 67 29 3b 0a 20 20  largeString);.  
2640: 20 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72        testCursor
2650: 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d 0a  .close();.    }.
2660: 0a 20 20 20 20 70 72 69 76 61 74 65 20 63 6c 61  .    private cla
2670: 73 73 20 54 65 73 74 4f 62 73 65 72 76 65 72 20  ss TestObserver 
2680: 65 78 74 65 6e 64 73 20 44 61 74 61 53 65 74 4f  extends DataSetO
2690: 62 73 65 72 76 65 72 20 7b 0a 20 20 20 20 20 20  bserver {.      
26a0: 20 20 69 6e 74 20 74 6f 74 61 6c 3b 0a 20 20 20    int total;.   
26b0: 20 20 20 20 20 53 51 4c 69 74 65 43 75 72 73 6f       SQLiteCurso
26c0: 72 20 63 3b 0a 20 20 20 20 20 20 20 20 62 6f 6f  r c;.        boo
26d0: 6c 65 61 6e 20 71 75 69 74 20 3d 20 66 61 6c 73  lean quit = fals
26e0: 65 3b 0a 0a 20 20 20 20 20 20 20 20 70 75 62 6c  e;..        publ
26f0: 69 63 20 54 65 73 74 4f 62 73 65 72 76 65 72 28  ic TestObserver(
2700: 69 6e 74 20 74 6f 74 61 6c 5f 2c 20 53 51 4c 69  int total_, SQLi
2710: 74 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 29  teCursor cursor)
2720: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
2730: 20 3d 20 63 75 72 73 6f 72 3b 0a 20 20 20 20 20   = cursor;.     
2740: 20 20 20 20 20 20 20 74 6f 74 61 6c 20 3d 20 74         total = t
2750: 6f 74 61 6c 5f 3b 0a 20 20 20 20 20 20 20 20 7d  otal_;.        }
2760: 0a 0a 20 20 20 20 20 20 20 20 40 4f 76 65 72 72  ..        @Overr
2770: 69 64 65 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ide.        publ
2780: 69 63 20 76 6f 69 64 20 6f 6e 43 68 61 6e 67 65  ic void onChange
2790: 64 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  d() {.          
27a0: 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 63 2e    int count = c.
27b0: 67 65 74 43 6f 75 6e 74 28 29 3b 0a 20 20 20 20  getCount();.    
27c0: 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 74 61          if (tota
27d0: 6c 20 3d 3d 20 63 6f 75 6e 74 29 20 7b 0a 20 20  l == count) {.  
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
27f0: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  t i = 0;.       
2800: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
2810: 63 2e 6d 6f 76 65 54 6f 4e 65 78 74 28 29 29 20  c.moveToNext()) 
2820: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
2830: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
2840: 6c 73 28 69 2c 20 63 2e 67 65 74 49 6e 74 28 31  ls(i, c.getInt(1
2850: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
2860: 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2890: 73 73 65 72 74 45 71 75 61 6c 73 28 63 6f 75 6e  ssertEquals(coun
28a0: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
28b0: 20 20 20 20 20 20 20 71 75 69 74 20 3d 20 74 72         quit = tr
28c0: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue;.            
28d0: 20 20 20 20 4c 6f 6f 70 65 72 2e 6d 79 4c 6f 6f      Looper.myLoo
28e0: 70 65 72 28 29 2e 71 75 69 74 28 29 3b 0a 20 20  per().quit();.  
28f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2900: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 40      }..        @
2910: 4f 76 65 72 72 69 64 65 0a 20 20 20 20 20 20 20  Override.       
2920: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 6f 6e 49   public void onI
2930: 6e 76 61 6c 69 64 61 74 65 64 28 29 20 7b 0a 20  nvalidated() {. 
2940: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a         }.    }..
2950: 20 20 20 20 40 4c 61 72 67 65 54 65 73 74 0a 20      @LargeTest. 
2960: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 74     public void t
2970: 65 73 74 4d 61 6e 79 52 6f 77 73 4c 6f 6e 67 28  estManyRowsLong(
2980: 29 20 74 68 72 6f 77 73 20 45 78 63 65 70 74 69  ) throws Excepti
2990: 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 6d 44 61  on {.        mDa
29a0: 74 61 62 61 73 65 2e 62 65 67 69 6e 54 72 61 6e  tabase.beginTran
29b0: 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 20  saction();.     
29c0: 20 20 20 66 69 6e 61 6c 20 69 6e 74 20 63 6f 75     final int cou
29d0: 6e 74 20 3d 20 39 30 30 30 3b 0a 20 20 20 20 20  nt = 9000;.     
29e0: 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20     try {.       
29f0: 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e 65       mDatabase.e
2a00: 78 65 63 53 51 4c 28 22 43 52 45 41 54 45 20 54  xecSQL("CREATE T
2a10: 41 42 4c 45 20 74 65 73 74 20 28 5f 69 64 20 49  ABLE test (_id I
2a20: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
2a30: 45 59 2c 20 64 61 74 61 20 49 4e 54 29 3b 22 29  EY, data INT);")
2a40: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
2a50: 6f 72 20 28 69 6e 74 20 69 20 3d 20 30 3b 20 69  or (int i = 0; i
2a60: 20 3c 20 63 6f 75 6e 74 3b 20 69 2b 2b 29 20 7b   < count; i++) {
2a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a80: 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63 53   mDatabase.execS
2a90: 51 4c 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  QL("INSERT INTO 
2aa0: 74 65 73 74 20 28 64 61 74 61 29 20 56 41 4c 55  test (data) VALU
2ab0: 45 53 20 28 22 20 2b 20 69 20 2b 20 22 29 3b 22  ES (" + i + ");"
2ac0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
2ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 44 61  .            mDa
2ae0: 74 61 62 61 73 65 2e 73 65 74 54 72 61 6e 73 61  tabase.setTransa
2af0: 63 74 69 6f 6e 53 75 63 63 65 73 73 66 75 6c 28  ctionSuccessful(
2b00: 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e  );.        } fin
2b10: 61 6c 6c 79 20 7b 0a 20 20 20 20 20 20 20 20 20  ally {.         
2b20: 20 20 20 6d 44 61 74 61 62 61 73 65 2e 65 6e 64     mDatabase.end
2b30: 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20  Transaction();. 
2b40: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
2b50: 20 20 43 75 72 73 6f 72 20 74 65 73 74 43 75 72    Cursor testCur
2b60: 73 6f 72 20 3d 20 67 65 74 54 65 73 74 43 75 72  sor = getTestCur
2b70: 73 6f 72 28 6d 44 61 74 61 62 61 73 65 2e 71 75  sor(mDatabase.qu
2b80: 65 72 79 28 22 74 65 73 74 22 2c 20 6e 65 77 20  ery("test", new 
2b90: 53 74 72 69 6e 67 5b 5d 20 7b 20 22 64 61 74 61  String[] { "data
2ba0: 22 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  " },.           
2bb0: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
2bc0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
2bd0: 6c 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  l));.        ass
2be0: 65 72 74 4e 6f 74 4e 75 6c 6c 28 74 65 73 74 43  ertNotNull(testC
2bf0: 75 72 73 6f 72 29 3b 0a 0a 20 20 20 20 20 20 20  ursor);..       
2c00: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
2c10: 20 20 20 20 77 68 69 6c 65 20 28 74 65 73 74 43      while (testC
2c20: 75 72 73 6f 72 2e 6d 6f 76 65 54 6f 4e 65 78 74  ursor.moveToNext
2c30: 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ()) {.          
2c40: 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 69    assertEquals(i
2c50: 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74  , testCursor.get
2c60: 49 6e 74 28 30 29 29 3b 0a 20 20 20 20 20 20 20  Int(0));.       
2c70: 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
2c80: 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65    }.        asse
2c90: 72 74 45 71 75 61 6c 73 28 63 6f 75 6e 74 2c 20  rtEquals(count, 
2ca0: 69 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  i);.        asse
2cb0: 72 74 45 71 75 61 6c 73 28 63 6f 75 6e 74 2c 20  rtEquals(count, 
2cc0: 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 43 6f  testCursor.getCo
2cd0: 75 6e 74 28 29 29 3b 0a 0a 20 20 20 20 20 20 20  unt());..       
2ce0: 20 4c 6f 67 2e 64 28 22 74 65 73 74 4d 61 6e 79   Log.d("testMany
2cf0: 52 6f 77 73 22 2c 20 22 63 6f 75 6e 74 20 22 20  Rows", "count " 
2d00: 2b 20 49 6e 74 65 67 65 72 2e 74 6f 53 74 72 69  + Integer.toStri
2d10: 6e 67 28 69 29 29 3b 0a 20 20 20 20 20 20 20 20  ng(i));.        
2d20: 74 65 73 74 43 75 72 73 6f 72 2e 63 6c 6f 73 65  testCursor.close
2d30: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40  ();.    }..    @
2d40: 4c 61 72 67 65 54 65 73 74 0a 20 20 20 20 70 75  LargeTest.    pu
2d50: 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74 4d 61  blic void testMa
2d60: 6e 79 52 6f 77 73 54 78 74 28 29 20 74 68 72 6f  nyRowsTxt() thro
2d70: 77 73 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20  ws Exception {. 
2d80: 20 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65         mDatabase
2d90: 2e 65 78 65 63 53 51 4c 28 22 43 52 45 41 54 45  .execSQL("CREATE
2da0: 20 54 41 42 4c 45 20 74 65 73 74 20 28 5f 69 64   TABLE test (_id
2db0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
2dc0: 20 4b 45 59 2c 20 64 61 74 61 20 54 45 58 54 29   KEY, data TEXT)
2dd0: 3b 22 29 3b 0a 20 20 20 20 20 20 20 20 53 74 72  ;");.        Str
2de0: 69 6e 67 42 75 69 6c 64 65 72 20 73 71 6c 20 3d  ingBuilder sql =
2df0: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
2e00: 65 72 28 32 31 30 30 29 3b 0a 20 20 20 20 20 20  er(2100);.      
2e10: 20 20 73 71 6c 2e 61 70 70 65 6e 64 28 22 49 4e    sql.append("IN
2e20: 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 20 28  SERT INTO test (
2e30: 64 61 74 61 29 20 56 41 4c 55 45 53 20 28 27 22  data) VALUES ('"
2e40: 29 3b 0a 20 20 20 20 20 20 20 20 52 61 6e 64 6f  );.        Rando
2e50: 6d 20 72 61 6e 64 6f 6d 20 3d 20 6e 65 77 20 52  m random = new R
2e60: 61 6e 64 6f 6d 28 53 79 73 74 65 6d 2e 63 75 72  andom(System.cur
2e70: 72 65 6e 74 54 69 6d 65 4d 69 6c 6c 69 73 28 29  rentTimeMillis()
2e80: 29 3b 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  );.        Strin
2e90: 67 42 75 69 6c 64 65 72 20 72 61 6e 64 6f 6d 53  gBuilder randomS
2ea0: 74 72 69 6e 67 20 3d 20 6e 65 77 20 53 74 72 69  tring = new Stri
2eb0: 6e 67 42 75 69 6c 64 65 72 28 31 39 37 39 29 3b  ngBuilder(1979);
2ec0: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
2ed0: 74 20 69 20 3d 20 30 3b 20 69 20 3c 20 31 39 37  t i = 0; i < 197
2ee0: 39 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20  9; i++) {.      
2ef0: 20 20 20 20 20 20 72 61 6e 64 6f 6d 53 74 72 69        randomStri
2f00: 6e 67 2e 61 70 70 65 6e 64 28 28 72 61 6e 64 6f  ng.append((rando
2f10: 6d 2e 6e 65 78 74 49 6e 74 28 29 20 26 20 30 78  m.nextInt() & 0x
2f20: 66 29 20 25 20 31 30 29 3b 0a 20 20 20 20 20 20  f) % 10);.      
2f30: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 2e    }.        sql.
2f40: 61 70 70 65 6e 64 28 72 61 6e 64 6f 6d 53 74 72  append(randomStr
2f50: 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ing);.        sq
2f60: 6c 2e 61 70 70 65 6e 64 28 22 27 29 3b 22 29 3b  l.append("');");
2f70: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 69 66 20  ..        // if 
2f80: 63 75 72 73 6f 72 20 77 69 6e 64 6f 77 20 73 69  cursor window si
2f90: 7a 65 20 63 68 61 6e 67 65 64 2c 20 61 64 6a 75  ze changed, adju
2fa0: 73 74 20 74 68 69 73 20 76 61 6c 75 65 20 74 6f  st this value to
2fb0: 6f 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 20  o.        final 
2fc0: 69 6e 74 20 63 6f 75 6e 74 20 3d 20 36 30 30 3b  int count = 600;
2fd0: 20 2f 2f 20 6d 6f 72 65 20 74 68 61 6e 20 74 77   // more than tw
2fe0: 6f 20 66 69 6c 6c 57 69 6e 64 6f 77 20 6e 65 65  o fillWindow nee
2ff0: 64 65 64 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ded.        for 
3000: 28 69 6e 74 20 69 20 3d 20 30 3b 20 69 20 3c 20  (int i = 0; i < 
3010: 63 6f 75 6e 74 3b 20 69 2b 2b 29 20 7b 0a 20 20  count; i++) {.  
3020: 20 20 20 20 20 20 20 20 20 20 6d 44 61 74 61 62            mDatab
3030: 61 73 65 2e 65 78 65 63 53 51 4c 28 73 71 6c 2e  ase.execSQL(sql.
3040: 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a 20 20 20  toString());.   
3050: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
3060: 43 75 72 73 6f 72 20 74 65 73 74 43 75 72 73 6f  Cursor testCurso
3070: 72 20 3d 20 67 65 74 54 65 73 74 43 75 72 73 6f  r = getTestCurso
3080: 72 28 6d 44 61 74 61 62 61 73 65 2e 71 75 65 72  r(mDatabase.quer
3090: 79 28 22 74 65 73 74 22 2c 20 6e 65 77 20 53 74  y("test", new St
30a0: 72 69 6e 67 5b 5d 20 7b 20 22 64 61 74 61 22 20  ring[] { "data" 
30b0: 7d 2c 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20  }, null,.       
30c0: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e           null, n
30d0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 29  ull, null, null)
30e0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
30f0: 74 4e 6f 74 4e 75 6c 6c 28 74 65 73 74 43 75 72  tNotNull(testCur
3100: 73 6f 72 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  sor);..        i
3110: 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20  nt i = 0;.      
3120: 20 20 77 68 69 6c 65 20 28 74 65 73 74 43 75 72    while (testCur
3130: 73 6f 72 2e 6d 6f 76 65 54 6f 4e 65 78 74 28 29  sor.moveToNext()
3140: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3150: 61 73 73 65 72 74 45 71 75 61 6c 73 28 72 61 6e  assertEquals(ran
3160: 64 6f 6d 53 74 72 69 6e 67 2e 74 6f 53 74 72 69  domString.toStri
3170: 6e 67 28 29 2c 20 74 65 73 74 43 75 72 73 6f 72  ng(), testCursor
3180: 2e 67 65 74 53 74 72 69 6e 67 28 30 29 29 3b 0a  .getString(0));.
3190: 20 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b              i++;
31a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
31b0: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
31c0: 63 6f 75 6e 74 2c 20 69 29 3b 0a 20 20 20 20 20  count, i);.     
31d0: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
31e0: 63 6f 75 6e 74 2c 20 74 65 73 74 43 75 72 73 6f  count, testCurso
31f0: 72 2e 67 65 74 43 6f 75 6e 74 28 29 29 3b 0a 20  r.getCount());. 
3200: 20 20 20 20 20 20 20 74 65 73 74 43 75 72 73 6f         testCurso
3210: 72 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d  r.close();.    }
3220: 0a 0a 20 20 20 20 40 4c 61 72 67 65 54 65 73 74  ..    @LargeTest
3230: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64  .    public void
3240: 20 74 65 73 74 4d 61 6e 79 52 6f 77 73 54 78 74   testManyRowsTxt
3250: 4c 6f 6e 67 28 29 20 74 68 72 6f 77 73 20 45 78  Long() throws Ex
3260: 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20  ception {.      
3270: 20 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63    mDatabase.exec
3280: 53 51 4c 28 22 43 52 45 41 54 45 20 54 41 42 4c  SQL("CREATE TABL
3290: 45 20 74 65 73 74 20 28 5f 69 64 20 49 4e 54 45  E test (_id INTE
32a0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
32b0: 20 74 78 74 20 54 45 58 54 2c 20 64 61 74 61 20   txt TEXT, data 
32c0: 49 4e 54 29 3b 22 29 3b 0a 0a 20 20 20 20 20 20  INT);");..      
32d0: 20 20 52 61 6e 64 6f 6d 20 72 61 6e 64 6f 6d 20    Random random 
32e0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 53 79 73  = new Random(Sys
32f0: 74 65 6d 2e 63 75 72 72 65 6e 74 54 69 6d 65 4d  tem.currentTimeM
3300: 69 6c 6c 69 73 28 29 29 3b 0a 20 20 20 20 20 20  illis());.      
3310: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
3320: 72 61 6e 64 6f 6d 53 74 72 69 6e 67 20 3d 20 6e  randomString = n
3330: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
3340: 28 31 39 37 39 29 3b 0a 20 20 20 20 20 20 20 20  (1979);.        
3350: 66 6f 72 20 28 69 6e 74 20 69 20 3d 20 30 3b 20  for (int i = 0; 
3360: 69 20 3c 20 31 39 37 39 3b 20 69 2b 2b 29 20 7b  i < 1979; i++) {
3370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 6e  .            ran
3380: 64 6f 6d 53 74 72 69 6e 67 2e 61 70 70 65 6e 64  domString.append
3390: 28 28 72 61 6e 64 6f 6d 2e 6e 65 78 74 49 6e 74  ((random.nextInt
33a0: 28 29 20 26 20 30 78 66 29 20 25 20 31 30 29 3b  () & 0xf) % 10);
33b0: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
33c0: 20 20 20 20 2f 2f 20 69 66 20 63 75 72 73 6f 72      // if cursor
33d0: 20 77 69 6e 64 6f 77 20 73 69 7a 65 20 63 68 61   window size cha
33e0: 6e 67 65 64 2c 20 61 64 6a 75 73 74 20 74 68 69  nged, adjust thi
33f0: 73 20 76 61 6c 75 65 20 74 6f 6f 0a 20 20 20 20  s value too.    
3400: 20 20 20 20 66 69 6e 61 6c 20 69 6e 74 20 63 6f      final int co
3410: 75 6e 74 20 3d 20 36 30 30 3b 0a 20 20 20 20 20  unt = 600;.     
3420: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 20 3d 20     for (int i = 
3430: 30 3b 20 69 20 3c 20 63 6f 75 6e 74 3b 20 69 2b  0; i < count; i+
3440: 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  +) {.           
3450: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 73   StringBuilder s
3460: 71 6c 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  ql = new StringB
3470: 75 69 6c 64 65 72 28 32 31 30 30 29 3b 0a 20 20  uilder(2100);.  
3480: 20 20 20 20 20 20 20 20 20 20 73 71 6c 2e 61 70            sql.ap
3490: 70 65 6e 64 28 22 49 4e 53 45 52 54 20 49 4e 54  pend("INSERT INT
34a0: 4f 20 74 65 73 74 20 28 74 78 74 2c 20 64 61 74  O test (txt, dat
34b0: 61 29 20 56 41 4c 55 45 53 20 28 27 22 29 3b 0a  a) VALUES ('");.
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 2e              sql.
34d0: 61 70 70 65 6e 64 28 72 61 6e 64 6f 6d 53 74 72  append(randomStr
34e0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ing);.          
34f0: 20 20 73 71 6c 2e 61 70 70 65 6e 64 28 22 27 2c    sql.append("',
3500: 27 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  '");.           
3510: 20 73 71 6c 2e 61 70 70 65 6e 64 28 69 29 3b 0a   sql.append(i);.
3520: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 2e              sql.
3530: 61 70 70 65 6e 64 28 22 27 29 3b 22 29 3b 0a 20  append("');");. 
3540: 20 20 20 20 20 20 20 20 20 20 20 6d 44 61 74 61             mData
3550: 62 61 73 65 2e 65 78 65 63 53 51 4c 28 73 71 6c  base.execSQL(sql
3560: 2e 74 6f 53 74 72 69 6e 67 28 29 29 3b 0a 20 20  .toString());.  
3570: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
3580: 20 43 75 72 73 6f 72 20 74 65 73 74 43 75 72 73   Cursor testCurs
3590: 6f 72 20 3d 20 67 65 74 54 65 73 74 43 75 72 73  or = getTestCurs
35a0: 6f 72 28 6d 44 61 74 61 62 61 73 65 2e 71 75 65  or(mDatabase.que
35b0: 72 79 28 22 74 65 73 74 22 2c 20 6e 65 77 20 53  ry("test", new S
35c0: 74 72 69 6e 67 5b 5d 20 7b 20 22 74 78 74 22 2c  tring[] { "txt",
35d0: 20 22 64 61 74 61 22 20 7d 2c 0a 20 20 20 20 20   "data" },.     
35e0: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
35f0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
3600: 6c 2c 20 6e 75 6c 6c 29 29 3b 0a 20 20 20 20 20  l, null));.     
3610: 20 20 20 61 73 73 65 72 74 4e 6f 74 4e 75 6c 6c     assertNotNull
3620: 28 74 65 73 74 43 75 72 73 6f 72 29 3b 0a 0a 20  (testCursor);.. 
3630: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
3640: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  ;.        while 
3650: 28 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65  (testCursor.move
3660: 54 6f 4e 65 78 74 28 29 29 20 7b 0a 20 20 20 20  ToNext()) {.    
3670: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71          assertEq
3680: 75 61 6c 73 28 72 61 6e 64 6f 6d 53 74 72 69 6e  uals(randomStrin
3690: 67 2e 74 6f 53 74 72 69 6e 67 28 29 2c 20 74 65  g.toString(), te
36a0: 73 74 43 75 72 73 6f 72 2e 67 65 74 53 74 72 69  stCursor.getStri
36b0: 6e 67 28 30 29 29 3b 0a 20 20 20 20 20 20 20 20  ng(0));.        
36c0: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
36d0: 28 69 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67  (i, testCursor.g
36e0: 65 74 49 6e 74 28 31 29 29 3b 0a 20 20 20 20 20  etInt(1));.     
36f0: 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
3700: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73      }.        as
3710: 73 65 72 74 45 71 75 61 6c 73 28 63 6f 75 6e 74  sertEquals(count
3720: 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 61 73  , i);.        as
3730: 73 65 72 74 45 71 75 61 6c 73 28 63 6f 75 6e 74  sertEquals(count
3740: 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74  , testCursor.get
3750: 43 6f 75 6e 74 28 29 29 3b 0a 20 20 20 20 20 20  Count());.      
3760: 20 20 74 65 73 74 43 75 72 73 6f 72 2e 63 6c 6f    testCursor.clo
3770: 73 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  se();.    }..   
3780: 20 40 4d 65 64 69 75 6d 54 65 73 74 0a 20 20 20   @MediumTest.   
3790: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 74 65 73   public void tes
37a0: 74 52 65 71 75 65 72 79 28 29 20 74 68 72 6f 77  tRequery() throw
37b0: 73 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20  s Exception {.  
37c0: 20 20 20 20 20 20 70 6f 70 75 6c 61 74 65 44 65        populateDe
37d0: 66 61 75 6c 74 54 61 62 6c 65 28 29 3b 0a 0a 20  faultTable();.. 
37e0: 20 20 20 20 20 20 20 43 75 72 73 6f 72 20 74 65         Cursor te
37f0: 73 74 43 75 72 73 6f 72 20 3d 20 67 65 74 54 65  stCursor = getTe
3800: 73 74 43 75 72 73 6f 72 28 6d 44 61 74 61 62 61  stCursor(mDataba
3810: 73 65 2e 72 61 77 51 75 65 72 79 28 22 53 45 4c  se.rawQuery("SEL
3820: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 22  ECT * FROM test"
3830: 2c 20 6e 75 6c 6c 29 29 3b 0a 20 20 20 20 20 20  , null));.      
3840: 20 20 61 73 73 65 72 74 4e 6f 74 4e 75 6c 6c 28    assertNotNull(
3850: 74 65 73 74 43 75 72 73 6f 72 29 3b 0a 20 20 20  testCursor);.   
3860: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
3870: 73 28 33 2c 20 74 65 73 74 43 75 72 73 6f 72 2e  s(3, testCursor.
3880: 67 65 74 43 6f 75 6e 74 28 29 29 3b 0a 20 20 20  getCount());.   
3890: 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72 2e       testCursor.
38a0: 64 65 61 63 74 69 76 61 74 65 28 29 3b 0a 20 20  deactivate();.  
38b0: 20 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72        testCursor
38c0: 2e 72 65 71 75 65 72 79 28 29 3b 0a 20 20 20 20  .requery();.    
38d0: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
38e0: 28 33 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67  (3, testCursor.g
38f0: 65 74 43 6f 75 6e 74 28 29 29 3b 0a 20 20 20 20  etCount());.    
3900: 20 20 20 20 74 65 73 74 43 75 72 73 6f 72 2e 63      testCursor.c
3910: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20  lose();.    }.. 
3920: 20 20 20 40 4d 65 64 69 75 6d 54 65 73 74 0a 20     @MediumTest. 
3930: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 74     public void t
3940: 65 73 74 52 65 71 75 65 72 79 57 69 74 68 53 65  estRequeryWithSe
3950: 6c 65 63 74 69 6f 6e 28 29 20 74 68 72 6f 77 73  lection() throws
3960: 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20   Exception {.   
3970: 20 20 20 20 20 70 6f 70 75 6c 61 74 65 44 65 66       populateDef
3980: 61 75 6c 74 54 61 62 6c 65 28 29 3b 0a 0a 20 20  aultTable();..  
3990: 20 20 20 20 20 20 43 75 72 73 6f 72 20 74 65 73        Cursor tes
39a0: 74 43 75 72 73 6f 72 20 3d 20 67 65 74 54 65 73  tCursor = getTes
39b0: 74 43 75 72 73 6f 72 28 0a 20 20 20 20 20 20 20  tCursor(.       
39c0: 20 20 20 20 20 20 20 20 20 6d 44 61 74 61 62 61           mDataba
39d0: 73 65 2e 72 61 77 51 75 65 72 79 28 22 53 45 4c  se.rawQuery("SEL
39e0: 45 43 54 20 64 61 74 61 20 46 52 4f 4d 20 74 65  ECT data FROM te
39f0: 73 74 20 57 48 45 52 45 20 64 61 74 61 20 3d 20  st WHERE data = 
3a00: 27 22 20 2b 20 73 53 74 72 69 6e 67 31 20 2b 20  '" + sString1 + 
3a10: 22 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  "'",.           
3a20: 20 20 20 20 20 6e 75 6c 6c 29 29 3b 0a 20 20 20       null));.   
3a30: 20 20 20 20 20 61 73 73 65 72 74 4e 6f 74 4e 75       assertNotNu
3a40: 6c 6c 28 74 65 73 74 43 75 72 73 6f 72 29 3b 0a  ll(testCursor);.
3a50: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71          assertEq
3a60: 75 61 6c 73 28 31 2c 20 74 65 73 74 43 75 72 73  uals(1, testCurs
3a70: 6f 72 2e 67 65 74 43 6f 75 6e 74 28 29 29 3b 0a  or.getCount());.
3a80: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72          assertTr
3a90: 75 65 28 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f  ue(testCursor.mo
3aa0: 76 65 54 6f 46 69 72 73 74 28 29 29 3b 0a 20 20  veToFirst());.  
3ab0: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
3ac0: 6c 73 28 73 53 74 72 69 6e 67 31 2c 20 74 65 73  ls(sString1, tes
3ad0: 74 43 75 72 73 6f 72 2e 67 65 74 53 74 72 69 6e  tCursor.getStrin
3ae0: 67 28 30 29 29 3b 0a 20 20 20 20 20 20 20 20 74  g(0));.        t
3af0: 65 73 74 43 75 72 73 6f 72 2e 64 65 61 63 74 69  estCursor.deacti
3b00: 76 61 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20  vate();.        
3b10: 74 65 73 74 43 75 72 73 6f 72 2e 72 65 71 75 65  testCursor.reque
3b20: 72 79 28 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ry();.        as
3b30: 73 65 72 74 45 71 75 61 6c 73 28 31 2c 20 74 65  sertEquals(1, te
3b40: 73 74 43 75 72 73 6f 72 2e 67 65 74 43 6f 75 6e  stCursor.getCoun
3b50: 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  t());.        as
3b60: 73 65 72 74 54 72 75 65 28 74 65 73 74 43 75 72  sertTrue(testCur
3b70: 73 6f 72 2e 6d 6f 76 65 54 6f 46 69 72 73 74 28  sor.moveToFirst(
3b80: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ));.        asse
3b90: 72 74 45 71 75 61 6c 73 28 73 53 74 72 69 6e 67  rtEquals(sString
3ba0: 31 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65  1, testCursor.ge
3bb0: 74 53 74 72 69 6e 67 28 30 29 29 3b 0a 20 20 20  tString(0));.   
3bc0: 20 20 20 20 20 74 65 73 74 43 75 72 73 6f 72 2e       testCursor.
3bd0: 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d 0a 0a  close();.    }..
3be0: 20 20 20 20 40 4d 65 64 69 75 6d 54 65 73 74 0a      @MediumTest.
3bf0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
3c00: 74 65 73 74 52 65 71 75 65 72 79 57 69 74 68 53  testRequeryWithS
3c10: 65 6c 65 63 74 69 6f 6e 41 72 67 73 28 29 20 74  electionArgs() t
3c20: 68 72 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20  hrows Exception 
3c30: 7b 0a 20 20 20 20 20 20 20 20 70 6f 70 75 6c 61  {.        popula
3c40: 74 65 44 65 66 61 75 6c 74 54 61 62 6c 65 28 29  teDefaultTable()
3c50: 3b 0a 0a 20 20 20 20 20 20 20 20 43 75 72 73 6f  ;..        Curso
3c60: 72 20 74 65 73 74 43 75 72 73 6f 72 20 3d 20 67  r testCursor = g
3c70: 65 74 54 65 73 74 43 75 72 73 6f 72 28 6d 44 61  etTestCursor(mDa
3c80: 74 61 62 61 73 65 2e 72 61 77 51 75 65 72 79 28  tabase.rawQuery(
3c90: 22 53 45 4c 45 43 54 20 64 61 74 61 20 46 52 4f  "SELECT data FRO
3ca0: 4d 20 74 65 73 74 20 57 48 45 52 45 20 64 61 74  M test WHERE dat
3cb0: 61 20 3d 20 3f 22 2c 0a 20 20 20 20 20 20 20 20  a = ?",.        
3cc0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 74 72 69          new Stri
3cd0: 6e 67 5b 5d 20 7b 20 73 53 74 72 69 6e 67 31 20  ng[] { sString1 
3ce0: 7d 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  }));.        ass
3cf0: 65 72 74 4e 6f 74 4e 75 6c 6c 28 74 65 73 74 43  ertNotNull(testC
3d00: 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
3d10: 61 73 73 65 72 74 45 71 75 61 6c 73 28 31 2c 20  assertEquals(1, 
3d20: 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 43 6f  testCursor.getCo
3d30: 75 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20  unt());.        
3d40: 61 73 73 65 72 74 54 72 75 65 28 74 65 73 74 43  assertTrue(testC
3d50: 75 72 73 6f 72 2e 6d 6f 76 65 54 6f 46 69 72 73  ursor.moveToFirs
3d60: 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  t());.        as
3d70: 73 65 72 74 45 71 75 61 6c 73 28 73 53 74 72 69  sertEquals(sStri
3d80: 6e 67 31 2c 20 74 65 73 74 43 75 72 73 6f 72 2e  ng1, testCursor.
3d90: 67 65 74 53 74 72 69 6e 67 28 30 29 29 3b 0a 20  getString(0));. 
3da0: 20 20 20 20 20 20 20 74 65 73 74 43 75 72 73 6f         testCurso
3db0: 72 2e 64 65 61 63 74 69 76 61 74 65 28 29 3b 0a  r.deactivate();.
3dc0: 20 20 20 20 20 20 20 20 74 65 73 74 43 75 72 73          testCurs
3dd0: 6f 72 2e 72 65 71 75 65 72 79 28 29 3b 0a 20 20  or.requery();.  
3de0: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
3df0: 6c 73 28 31 2c 20 74 65 73 74 43 75 72 73 6f 72  ls(1, testCursor
3e00: 2e 67 65 74 43 6f 75 6e 74 28 29 29 3b 0a 20 20  .getCount());.  
3e10: 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65        assertTrue
3e20: 28 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65  (testCursor.move
3e30: 54 6f 46 69 72 73 74 28 29 29 3b 0a 20 20 20 20  ToFirst());.    
3e40: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
3e50: 28 73 53 74 72 69 6e 67 31 2c 20 74 65 73 74 43  (sString1, testC
3e60: 75 72 73 6f 72 2e 67 65 74 53 74 72 69 6e 67 28  ursor.getString(
3e70: 30 29 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  0));.        tes
3e80: 74 43 75 72 73 6f 72 2e 63 6c 6f 73 65 28 29 3b  tCursor.close();
3e90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40 4d 65 64  .    }..    @Med
3ea0: 69 75 6d 54 65 73 74 0a 20 20 20 20 70 75 62 6c  iumTest.    publ
3eb0: 69 63 20 76 6f 69 64 20 74 65 73 74 52 65 71 75  ic void testRequ
3ec0: 65 72 79 57 69 74 68 41 6c 74 65 72 65 64 53 65  eryWithAlteredSe
3ed0: 6c 65 63 74 69 6f 6e 41 72 67 73 28 29 20 74 68  lectionArgs() th
3ee0: 72 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20 7b  rows Exception {
3ef0: 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20  .        /**.   
3f00: 20 20 20 20 20 20 2a 20 54 65 73 74 20 74 68 65        * Test the
3f10: 20 61 62 69 6c 69 74 79 20 6f 66 20 61 20 73 75   ability of a su
3f20: 62 63 6c 61 73 73 20 6f 66 20 53 51 4c 69 74 65  bclass of SQLite
3f30: 43 75 72 73 6f 72 20 74 6f 20 63 68 61 6e 67 65  Cursor to change
3f40: 20 69 74 73 20 71 75 65 72 79 20 61 72 67 75 6d   its query argum
3f50: 65 6e 74 73 2e 0a 20 20 20 20 20 20 20 20 20 2a  ents..         *
3f60: 2f 0a 20 20 20 20 20 20 20 20 70 6f 70 75 6c 61  /.        popula
3f70: 74 65 44 65 66 61 75 6c 74 54 61 62 6c 65 28 29  teDefaultTable()
3f80: 3b 0a 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ;..        SQLit
3f90: 65 44 61 74 61 62 61 73 65 2e 43 75 72 73 6f 72  eDatabase.Cursor
3fa0: 46 61 63 74 6f 72 79 20 66 61 63 74 6f 72 79 20  Factory factory 
3fb0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 44 61 74 61  = new SQLiteData
3fc0: 62 61 73 65 2e 43 75 72 73 6f 72 46 61 63 74 6f  base.CursorFacto
3fd0: 72 79 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ry() {.         
3fe0: 20 20 20 70 75 62 6c 69 63 20 43 75 72 73 6f 72     public Cursor
3ff0: 20 6e 65 77 43 75 72 73 6f 72 28 53 51 4c 69 74   newCursor(SQLit
4000: 65 44 61 74 61 62 61 73 65 20 64 62 2c 20 53 51  eDatabase db, SQ
4010: 4c 69 74 65 43 75 72 73 6f 72 44 72 69 76 65 72  LiteCursorDriver
4020: 20 6d 61 73 74 65 72 51 75 65 72 79 2c 0a 20 20   masterQuery,.  
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 20 20 53 74 72 69 6e 67 20 65 64 69 74 54 61 62    String editTab
4050: 6c 65 2c 20 53 51 4c 69 74 65 51 75 65 72 79 20  le, SQLiteQuery 
4060: 71 75 65 72 79 29 20 7b 0a 20 20 20 20 20 20 20  query) {.       
4070: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4080: 6e 65 77 20 53 51 4c 69 74 65 43 75 72 73 6f 72  new SQLiteCursor
4090: 28 64 62 2c 20 6d 61 73 74 65 72 51 75 65 72 79  (db, masterQuery
40a0: 2c 20 65 64 69 74 54 61 62 6c 65 2c 20 71 75 65  , editTable, que
40b0: 72 79 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ry) {.          
40c0: 20 20 20 20 20 20 20 20 20 20 40 4f 76 65 72 72            @Overr
40d0: 69 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ide.            
40e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
40f0: 6f 6f 6c 65 61 6e 20 72 65 71 75 65 72 79 28 29  oolean requery()
4100: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
4110: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53 65             setSe
4120: 6c 65 63 74 69 6f 6e 41 72 67 75 6d 65 6e 74 73  lectionArguments
4130: 28 6e 65 77 20 53 74 72 69 6e 67 5b 5d 20 7b 20  (new String[] { 
4140: 22 32 22 20 7d 29 3b 0a 20 20 20 20 20 20 20 20  "2" });.        
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 72 65 74 75 72 6e 20 73 75 70 65 72 2e 72 65 71  return super.req
4170: 75 65 72 79 28 29 3b 0a 20 20 20 20 20 20 20 20  uery();.        
4180: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b                };
41a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
41b0: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
41c0: 20 20 43 75 72 73 6f 72 20 74 65 73 74 43 75 72    Cursor testCur
41d0: 73 6f 72 20 3d 20 67 65 74 54 65 73 74 43 75 72  sor = getTestCur
41e0: 73 6f 72 28 6d 44 61 74 61 62 61 73 65 2e 72 61  sor(mDatabase.ra
41f0: 77 51 75 65 72 79 57 69 74 68 46 61 63 74 6f 72  wQueryWithFactor
4200: 79 28 66 61 63 74 6f 72 79 2c 0a 20 20 20 20 20  y(factory,.     
4210: 20 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45             "SELE
4220: 43 54 20 64 61 74 61 20 46 52 4f 4d 20 74 65 73  CT data FROM tes
4230: 74 20 57 48 45 52 45 20 5f 69 64 20 3c 3d 20 3f  t WHERE _id <= ?
4240: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
4250: 20 20 20 6e 65 77 20 53 74 72 69 6e 67 5b 5d 20     new String[] 
4260: 7b 20 22 31 22 20 7d 2c 20 6e 75 6c 6c 29 29 3b  { "1" }, null));
4270: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 4e  .        assertN
4280: 6f 74 4e 75 6c 6c 28 74 65 73 74 43 75 72 73 6f  otNull(testCurso
4290: 72 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  r);.        asse
42a0: 72 74 45 71 75 61 6c 73 28 31 2c 20 74 65 73 74  rtEquals(1, test
42b0: 43 75 72 73 6f 72 2e 67 65 74 43 6f 75 6e 74 28  Cursor.getCount(
42c0: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ));.        asse
42d0: 72 74 54 72 75 65 28 74 65 73 74 43 75 72 73 6f  rtTrue(testCurso
42e0: 72 2e 6d 6f 76 65 54 6f 46 69 72 73 74 28 29 29  r.moveToFirst())
42f0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
4300: 45 71 75 61 6c 73 28 73 53 74 72 69 6e 67 31 2c  Equals(sString1,
4310: 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65 74 53   testCursor.getS
4320: 74 72 69 6e 67 28 30 29 29 3b 0a 0a 20 20 20 20  tring(0));..    
4330: 20 20 20 20 2f 2f 20 4f 75 72 20 68 61 63 6b 65      // Our hacke
4340: 64 20 72 65 71 75 65 72 79 28 29 20 63 68 61 6e  d requery() chan
4350: 67 65 73 20 74 68 65 20 71 75 65 72 79 20 61 72  ges the query ar
4360: 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  guments in the c
4370: 75 72 73 6f 72 2e 0a 20 20 20 20 20 20 20 20 74  ursor..        t
4380: 65 73 74 43 75 72 73 6f 72 2e 72 65 71 75 65 72  estCursor.requer
4390: 79 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 61 73  y();..        as
43a0: 73 65 72 74 45 71 75 61 6c 73 28 32 2c 20 74 65  sertEquals(2, te
43b0: 73 74 43 75 72 73 6f 72 2e 67 65 74 43 6f 75 6e  stCursor.getCoun
43c0: 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  t());.        as
43d0: 73 65 72 74 54 72 75 65 28 74 65 73 74 43 75 72  sertTrue(testCur
43e0: 73 6f 72 2e 6d 6f 76 65 54 6f 46 69 72 73 74 28  sor.moveToFirst(
43f0: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ));.        asse
4400: 72 74 45 71 75 61 6c 73 28 73 53 74 72 69 6e 67  rtEquals(sString
4410: 31 2c 20 74 65 73 74 43 75 72 73 6f 72 2e 67 65  1, testCursor.ge
4420: 74 53 74 72 69 6e 67 28 30 29 29 3b 0a 20 20 20  tString(0));.   
4430: 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28       assertTrue(
4440: 74 65 73 74 43 75 72 73 6f 72 2e 6d 6f 76 65 54  testCursor.moveT
4450: 6f 4e 65 78 74 28 29 29 3b 0a 20 20 20 20 20 20  oNext());.      
4460: 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 73    assertEquals(s
4470: 53 74 72 69 6e 67 32 2c 20 74 65 73 74 43 75 72  String2, testCur
4480: 73 6f 72 2e 67 65 74 53 74 72 69 6e 67 28 30 29  sor.getString(0)
4490: 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  );..        // T
44a0: 65 73 74 20 74 68 61 74 20 73 65 74 74 69 6e 67  est that setting
44b0: 20 71 75 65 72 79 20 61 72 67 73 20 6f 6e 20 61   query args on a
44c0: 20 64 65 61 63 74 69 76 61 74 65 64 20 63 75 72   deactivated cur
44d0: 73 6f 72 20 61 6c 73 6f 20 77 6f 72 6b 73 2e 0a  sor also works..
44e0: 20 20 20 20 20 20 20 20 74 65 73 74 43 75 72 73          testCurs
44f0: 6f 72 2e 64 65 61 63 74 69 76 61 74 65 28 29 3b  or.deactivate();
4500: 0a 20 20 20 20 20 20 20 20 74 65 73 74 43 75 72  .        testCur
4510: 73 6f 72 2e 72 65 71 75 65 72 79 28 29 3b 0a 20  sor.requery();. 
4520: 20 20 20 7d 0a 7d 0a                                }.}.