SQLite Android Bindings
Hex Artifact Content
Not logged in

Artifact fa2336efe8ec393a7d95c9a639cf84ba2a7f49c7:


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 36 20 54 68 65 20 41 6e 64  (C) 2006 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 2f 2a 0a 2a  icense.. */./*.*
0270: 2a 20 4d 6f 64 69 66 69 65 64 20 74 6f 20 73 75  * Modified to su
0280: 70 70 6f 72 74 20 53 51 4c 69 74 65 20 65 78 74  pport SQLite ext
0290: 65 6e 73 69 6f 6e 73 20 62 79 20 74 68 65 20 53  ensions by the S
02a0: 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 65 72 73  QLite developers
02b0: 3a 20 0a 2a 2a 20 73 71 6c 69 74 65 2d 64 65 76  : .** sqlite-dev
02c0: 40 73 71 6c 69 74 65 2e 6f 72 67 2e 0a 2a 2f 0a  @sqlite.org..*/.
02d0: 0a 70 61 63 6b 61 67 65 20 6f 72 67 2e 73 71 6c  .package org.sql
02e0: 69 74 65 2e 64 61 74 61 62 61 73 65 2e 73 71 6c  ite.database.sql
02f0: 69 74 65 3b 0a 0a 69 6d 70 6f 72 74 20 61 6e 64  ite;..import and
0300: 72 6f 69 64 2e 64 61 74 61 62 61 73 65 2e 43 75  roid.database.Cu
0310: 72 73 6f 72 57 69 6e 64 6f 77 3b 0a 69 6d 70 6f  rsorWindow;.impo
0320: 72 74 20 61 6e 64 72 6f 69 64 2e 6f 73 2e 43 61  rt android.os.Ca
0330: 6e 63 65 6c 6c 61 74 69 6f 6e 53 69 67 6e 61 6c  ncellationSignal
0340: 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69 64  ;.import android
0350: 2e 6f 73 2e 4f 70 65 72 61 74 69 6f 6e 43 61 6e  .os.OperationCan
0360: 63 65 6c 65 64 45 78 63 65 70 74 69 6f 6e 3b 0a  celedException;.
0370: 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69 64 2e 75  import android.u
0380: 74 69 6c 2e 4c 6f 67 3b 0a 0a 2f 2a 2a 0a 20 2a  til.Log;../**. *
0390: 20 52 65 70 72 65 73 65 6e 74 73 20 61 20 71 75   Represents a qu
03a0: 65 72 79 20 74 68 61 74 20 72 65 61 64 73 20 74  ery that reads t
03b0: 68 65 20 72 65 73 75 6c 74 69 6e 67 20 72 6f 77  he resulting row
03c0: 73 20 69 6e 74 6f 20 61 20 7b 40 6c 69 6e 6b 20  s into a {@link 
03d0: 53 51 4c 69 74 65 51 75 65 72 79 7d 2e 0a 20 2a  SQLiteQuery}.. *
03e0: 20 54 68 69 73 20 63 6c 61 73 73 20 69 73 20 75   This class is u
03f0: 73 65 64 20 62 79 20 7b 40 6c 69 6e 6b 20 53 51  sed by {@link SQ
0400: 4c 69 74 65 43 75 72 73 6f 72 7d 20 61 6e 64 20  LiteCursor} and 
0410: 69 73 6e 27 74 20 75 73 65 66 75 6c 20 69 74 73  isn't useful its
0420: 65 6c 66 2e 0a 20 2a 20 3c 70 3e 0a 20 2a 20 54  elf.. * <p>. * T
0430: 68 69 73 20 63 6c 61 73 73 20 69 73 20 6e 6f 74  his class is not
0440: 20 74 68 72 65 61 64 2d 73 61 66 65 2e 0a 20 2a   thread-safe.. *
0450: 20 3c 2f 70 3e 0a 20 2a 2f 0a 70 75 62 6c 69 63   </p>. */.public
0460: 20 66 69 6e 61 6c 20 63 6c 61 73 73 20 53 51 4c   final class SQL
0470: 69 74 65 51 75 65 72 79 20 65 78 74 65 6e 64 73  iteQuery extends
0480: 20 53 51 4c 69 74 65 50 72 6f 67 72 61 6d 20 7b   SQLiteProgram {
0490: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
04a0: 74 69 63 20 66 69 6e 61 6c 20 53 74 72 69 6e 67  tic final String
04b0: 20 54 41 47 20 3d 20 22 53 51 4c 69 74 65 51 75   TAG = "SQLiteQu
04c0: 65 72 79 22 3b 0a 0a 20 20 20 20 70 72 69 76 61  ery";..    priva
04d0: 74 65 20 66 69 6e 61 6c 20 43 61 6e 63 65 6c 6c  te final Cancell
04e0: 61 74 69 6f 6e 53 69 67 6e 61 6c 20 6d 43 61 6e  ationSignal mCan
04f0: 63 65 6c 6c 61 74 69 6f 6e 53 69 67 6e 61 6c 3b  cellationSignal;
0500: 0a 0a 20 20 20 20 53 51 4c 69 74 65 51 75 65 72  ..    SQLiteQuer
0510: 79 28 53 51 4c 69 74 65 44 61 74 61 62 61 73 65  y(SQLiteDatabase
0520: 20 64 62 2c 20 53 74 72 69 6e 67 20 71 75 65 72   db, String quer
0530: 79 2c 20 43 61 6e 63 65 6c 6c 61 74 69 6f 6e 53  y, CancellationS
0540: 69 67 6e 61 6c 20 63 61 6e 63 65 6c 6c 61 74 69  ignal cancellati
0550: 6f 6e 53 69 67 6e 61 6c 29 20 7b 0a 20 20 20 20  onSignal) {.    
0560: 20 20 20 20 73 75 70 65 72 28 64 62 2c 20 71 75      super(db, qu
0570: 65 72 79 2c 20 6e 75 6c 6c 2c 20 63 61 6e 63 65  ery, null, cance
0580: 6c 6c 61 74 69 6f 6e 53 69 67 6e 61 6c 29 3b 0a  llationSignal);.
0590: 0a 20 20 20 20 20 20 20 20 6d 43 61 6e 63 65 6c  .        mCancel
05a0: 6c 61 74 69 6f 6e 53 69 67 6e 61 6c 20 3d 20 63  lationSignal = c
05b0: 61 6e 63 65 6c 6c 61 74 69 6f 6e 53 69 67 6e 61  ancellationSigna
05c0: 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  l;.    }..    /*
05d0: 2a 0a 20 20 20 20 20 2a 20 52 65 61 64 73 20 72  *.     * Reads r
05e0: 6f 77 73 20 69 6e 74 6f 20 61 20 62 75 66 66 65  ows into a buffe
05f0: 72 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a  r..     *.     *
0600: 20 40 70 61 72 61 6d 20 77 69 6e 64 6f 77 20 54   @param window T
0610: 68 65 20 77 69 6e 64 6f 77 20 74 6f 20 66 69 6c  he window to fil
0620: 6c 20 69 6e 74 6f 0a 20 20 20 20 20 2a 20 40 70  l into.     * @p
0630: 61 72 61 6d 20 73 74 61 72 74 50 6f 73 20 54 68  aram startPos Th
0640: 65 20 73 74 61 72 74 20 70 6f 73 69 74 69 6f 6e  e start position
0650: 20 66 6f 72 20 66 69 6c 6c 69 6e 67 20 74 68 65   for filling the
0660: 20 77 69 6e 64 6f 77 2e 0a 20 20 20 20 20 2a 20   window..     * 
0670: 40 70 61 72 61 6d 20 72 65 71 75 69 72 65 64 50  @param requiredP
0680: 6f 73 20 54 68 65 20 70 6f 73 69 74 69 6f 6e 20  os The position 
0690: 6f 66 20 61 20 72 6f 77 20 74 68 61 74 20 4d 55  of a row that MU
06a0: 53 54 20 62 65 20 69 6e 20 74 68 65 20 77 69 6e  ST be in the win
06b0: 64 6f 77 2e 0a 20 20 20 20 20 2a 20 49 66 20 69  dow..     * If i
06c0: 74 20 77 6f 6e 27 74 20 66 69 74 2c 20 74 68 65  t won't fit, the
06d0: 6e 20 74 68 65 20 71 75 65 72 79 20 73 68 6f 75  n the query shou
06e0: 6c 64 20 64 69 73 63 61 72 64 20 70 61 72 74 20  ld discard part 
06f0: 6f 66 20 77 68 61 74 20 69 74 20 66 69 6c 6c 65  of what it fille
0700: 64 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d  d..     * @param
0710: 20 63 6f 75 6e 74 41 6c 6c 52 6f 77 73 20 54 72   countAllRows Tr
0720: 75 65 20 74 6f 20 63 6f 75 6e 74 20 61 6c 6c 20  ue to count all 
0730: 72 6f 77 73 20 74 68 61 74 20 74 68 65 20 71 75  rows that the qu
0740: 65 72 79 20 77 6f 75 6c 64 0a 20 20 20 20 20 2a  ery would.     *
0750: 20 72 65 74 75 72 6e 20 72 65 67 61 72 64 6c 65   return regardle
0760: 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
0770: 65 79 20 66 69 74 20 69 6e 20 74 68 65 20 77 69  ey fit in the wi
0780: 6e 64 6f 77 2e 0a 20 20 20 20 20 2a 20 40 72 65  ndow..     * @re
0790: 74 75 72 6e 20 4e 75 6d 62 65 72 20 6f 66 20 72  turn Number of r
07a0: 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 65 6e  ows that were en
07b0: 75 6d 65 72 61 74 65 64 2e 20 20 4d 69 67 68 74  umerated.  Might
07c0: 20 6e 6f 74 20 62 65 20 61 6c 6c 20 72 6f 77 73   not be all rows
07d0: 0a 20 20 20 20 20 2a 20 75 6e 6c 65 73 73 20 63  .     * unless c
07e0: 6f 75 6e 74 41 6c 6c 52 6f 77 73 20 69 73 20 74  ountAllRows is t
07f0: 72 75 65 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20  rue..     *.    
0800: 20 2a 20 40 74 68 72 6f 77 73 20 53 51 4c 69 74   * @throws SQLit
0810: 65 45 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6e  eException if an
0820: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 20   error occurs.. 
0830: 20 20 20 20 2a 20 40 74 68 72 6f 77 73 20 4f 70      * @throws Op
0840: 65 72 61 74 69 6f 6e 43 61 6e 63 65 6c 65 64 45  erationCanceledE
0850: 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20  xception if the 
0860: 6f 70 65 72 61 74 69 6f 6e 20 77 61 73 20 63 61  operation was ca
0870: 6e 63 65 6c 65 64 2e 0a 20 20 20 20 20 2a 2f 0a  nceled..     */.
0880: 20 20 20 20 69 6e 74 20 66 69 6c 6c 57 69 6e 64      int fillWind
0890: 6f 77 28 43 75 72 73 6f 72 57 69 6e 64 6f 77 20  ow(CursorWindow 
08a0: 77 69 6e 64 6f 77 2c 20 69 6e 74 20 73 74 61 72  window, int star
08b0: 74 50 6f 73 2c 20 69 6e 74 20 72 65 71 75 69 72  tPos, int requir
08c0: 65 64 50 6f 73 2c 20 62 6f 6f 6c 65 61 6e 20 63  edPos, boolean c
08d0: 6f 75 6e 74 41 6c 6c 52 6f 77 73 29 20 7b 0a 20  ountAllRows) {. 
08e0: 20 20 20 20 20 20 20 61 63 71 75 69 72 65 52 65         acquireRe
08f0: 66 65 72 65 6e 63 65 28 29 3b 0a 20 20 20 20 20  ference();.     
0900: 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20     try {.       
0910: 20 20 20 20 20 77 69 6e 64 6f 77 2e 61 63 71 75       window.acqu
0920: 69 72 65 52 65 66 65 72 65 6e 63 65 28 29 3b 0a  ireReference();.
0930: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 20              try 
0940: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
0950: 20 20 69 6e 74 20 6e 75 6d 52 6f 77 73 20 3d 20    int numRows = 
0960: 67 65 74 53 65 73 73 69 6f 6e 28 29 2e 65 78 65  getSession().exe
0970: 63 75 74 65 46 6f 72 43 75 72 73 6f 72 57 69 6e  cuteForCursorWin
0980: 64 6f 77 28 67 65 74 53 71 6c 28 29 2c 20 67 65  dow(getSql(), ge
0990: 74 42 69 6e 64 41 72 67 73 28 29 2c 0a 20 20 20  tBindArgs(),.   
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 20 20 20 20 77 69 6e 64 6f 77 2c 20 73 74 61       window, sta
09c0: 72 74 50 6f 73 2c 20 72 65 71 75 69 72 65 64 50  rtPos, requiredP
09d0: 6f 73 2c 20 63 6f 75 6e 74 41 6c 6c 52 6f 77 73  os, countAllRows
09e0: 2c 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46  , getConnectionF
09f0: 6c 61 67 73 28 29 2c 0a 20 20 20 20 20 20 20 20  lags(),.        
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 6d 43 61 6e 63 65 6c 6c 61 74 69 6f 6e 53 69 67  mCancellationSig
0a20: 6e 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  nal);.          
0a30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6d        return num
0a40: 52 6f 77 73 3b 0a 20 20 20 20 20 20 20 20 20 20  Rows;.          
0a50: 20 20 7d 20 63 61 74 63 68 20 28 53 51 4c 69 74    } catch (SQLit
0a60: 65 44 61 74 61 62 61 73 65 43 6f 72 72 75 70 74  eDatabaseCorrupt
0a70: 45 78 63 65 70 74 69 6f 6e 20 65 78 29 20 7b 0a  Exception ex) {.
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a90: 6f 6e 43 6f 72 72 75 70 74 69 6f 6e 28 29 3b 0a  onCorruption();.
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 74 68 72 6f 77 20 65 78 3b 0a 20 20 20 20 20 20  throw ex;.      
0ac0: 20 20 20 20 20 20 7d 20 63 61 74 63 68 20 28 53        } catch (S
0ad0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65  QLiteException e
0ae0: 78 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  x) {.           
0af0: 20 20 20 20 20 4c 6f 67 2e 65 28 54 41 47 2c 20       Log.e(TAG, 
0b00: 22 65 78 63 65 70 74 69 6f 6e 3a 20 22 20 2b 20  "exception: " + 
0b10: 65 78 2e 67 65 74 4d 65 73 73 61 67 65 28 29 20  ex.getMessage() 
0b20: 2b 20 22 3b 20 71 75 65 72 79 3a 20 22 20 2b 20  + "; query: " + 
0b30: 67 65 74 53 71 6c 28 29 29 3b 0a 20 20 20 20 20  getSql());.     
0b40: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
0b50: 20 65 78 3b 0a 20 20 20 20 20 20 20 20 20 20 20   ex;.           
0b60: 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0a 20 20 20   } finally {.   
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 69 6e               win
0b80: 64 6f 77 2e 72 65 6c 65 61 73 65 52 65 66 65 72  dow.releaseRefer
0b90: 65 6e 63 65 28 29 3b 0a 20 20 20 20 20 20 20 20  ence();.        
0ba0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20      }.        } 
0bb0: 66 69 6e 61 6c 6c 79 20 7b 0a 20 20 20 20 20 20  finally {.      
0bc0: 20 20 20 20 20 20 72 65 6c 65 61 73 65 52 65 66        releaseRef
0bd0: 65 72 65 6e 63 65 28 29 3b 0a 20 20 20 20 20 20  erence();.      
0be0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 40    }.    }..    @
0bf0: 4f 76 65 72 72 69 64 65 0a 20 20 20 20 70 75 62  Override.    pub
0c00: 6c 69 63 20 53 74 72 69 6e 67 20 74 6f 53 74 72  lic String toStr
0c10: 69 6e 67 28 29 20 7b 0a 20 20 20 20 20 20 20 20  ing() {.        
0c20: 72 65 74 75 72 6e 20 22 53 51 4c 69 74 65 51 75  return "SQLiteQu
0c30: 65 72 79 3a 20 22 20 2b 20 67 65 74 53 71 6c 28  ery: " + getSql(
0c40: 29 3b 0a 20 20 20 20 7d 0a 7d 0a                 );.    }.}.