SQLite Android Bindings
Hex Artifact Content
Not logged in

Artifact 52f09cc89ab5d37baefb58488b740f029bcad38f:


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 31 31 20 54 68 65 20 41 6e 64  (C) 2011 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 23 69 6e 63 6c 75 64 65 20 22 61 6e 64 72 6f  .#include "andro
02e0: 69 64 5f 64 61 74 61 62 61 73 65 5f 53 51 4c 69  id_database_SQLi
02f0: 74 65 43 6f 6d 6d 6f 6e 2e 68 22 0a 0a 6e 61 6d  teCommon.h"..nam
0300: 65 73 70 61 63 65 20 61 6e 64 72 6f 69 64 20 7b  espace android {
0310: 0a 0a 2f 2a 20 74 68 72 6f 77 20 61 20 53 51 4c  ../* throw a SQL
0320: 69 74 65 45 78 63 65 70 74 69 6f 6e 20 77 69 74  iteException wit
0330: 68 20 61 20 6d 65 73 73 61 67 65 20 61 70 70 72  h a message appr
0340: 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
0350: 65 72 72 6f 72 20 69 6e 20 68 61 6e 64 6c 65 20  error in handle 
0360: 2a 2f 0a 76 6f 69 64 20 74 68 72 6f 77 5f 73 71  */.void throw_sq
0370: 6c 69 74 65 33 5f 65 78 63 65 70 74 69 6f 6e 28  lite3_exception(
0380: 4a 4e 49 45 6e 76 2a 20 65 6e 76 2c 20 73 71 6c  JNIEnv* env, sql
0390: 69 74 65 33 2a 20 68 61 6e 64 6c 65 29 20 7b 0a  ite3* handle) {.
03a0: 20 20 20 20 74 68 72 6f 77 5f 73 71 6c 69 74 65      throw_sqlite
03b0: 33 5f 65 78 63 65 70 74 69 6f 6e 28 65 6e 76 2c  3_exception(env,
03c0: 20 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 29 3b 0a   handle, NULL);.
03d0: 7d 0a 0a 2f 2a 20 74 68 72 6f 77 20 61 20 53 51  }../* throw a SQ
03e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 77 69  LiteException wi
03f0: 74 68 20 74 68 65 20 67 69 76 65 6e 20 6d 65 73  th the given mes
0400: 73 61 67 65 20 2a 2f 0a 76 6f 69 64 20 74 68 72  sage */.void thr
0410: 6f 77 5f 73 71 6c 69 74 65 33 5f 65 78 63 65 70  ow_sqlite3_excep
0420: 74 69 6f 6e 28 4a 4e 49 45 6e 76 2a 20 65 6e 76  tion(JNIEnv* env
0430: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 6d 65  , const char* me
0440: 73 73 61 67 65 29 20 7b 0a 20 20 20 20 74 68 72  ssage) {.    thr
0450: 6f 77 5f 73 71 6c 69 74 65 33 5f 65 78 63 65 70  ow_sqlite3_excep
0460: 74 69 6f 6e 28 65 6e 76 2c 20 4e 55 4c 4c 2c 20  tion(env, NULL, 
0470: 6d 65 73 73 61 67 65 29 3b 0a 7d 0a 0a 2f 2a 20  message);.}../* 
0480: 74 68 72 6f 77 20 61 20 53 51 4c 69 74 65 45 78  throw a SQLiteEx
0490: 63 65 70 74 69 6f 6e 20 77 69 74 68 20 61 20 6d  ception with a m
04a0: 65 73 73 61 67 65 20 61 70 70 72 6f 70 72 69 61  essage appropria
04b0: 74 65 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  te for the error
04c0: 20 69 6e 20 68 61 6e 64 6c 65 0a 20 20 20 63 6f   in handle.   co
04d0: 6e 63 61 74 65 6e 61 74 65 64 20 77 69 74 68 20  ncatenated with 
04e0: 74 68 65 20 67 69 76 65 6e 20 6d 65 73 73 61 67  the given messag
04f0: 65 0a 20 2a 2f 0a 76 6f 69 64 20 74 68 72 6f 77  e. */.void throw
0500: 5f 73 71 6c 69 74 65 33 5f 65 78 63 65 70 74 69  _sqlite3_excepti
0510: 6f 6e 28 4a 4e 49 45 6e 76 2a 20 65 6e 76 2c 20  on(JNIEnv* env, 
0520: 73 71 6c 69 74 65 33 2a 20 68 61 6e 64 6c 65 2c  sqlite3* handle,
0530: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 6d 65 73   const char* mes
0540: 73 61 67 65 29 20 7b 0a 20 20 20 20 69 66 20 28  sage) {.    if (
0550: 68 61 6e 64 6c 65 29 20 7b 0a 20 20 20 20 20 20  handle) {.      
0560: 20 20 2f 2f 20 67 65 74 20 74 68 65 20 65 72 72    // get the err
0570: 6f 72 20 63 6f 64 65 20 61 6e 64 20 6d 65 73 73  or code and mess
0580: 61 67 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  age from the SQL
0590: 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20  ite connection. 
05a0: 20 20 20 20 20 20 20 2f 2f 20 74 68 65 20 65 72         // the er
05b0: 72 6f 72 20 6d 65 73 73 61 67 65 20 6d 61 79 20  ror message may 
05c0: 63 6f 6e 74 61 69 6e 20 6d 6f 72 65 20 69 6e 66  contain more inf
05d0: 6f 72 6d 61 74 69 6f 6e 20 74 68 61 6e 20 74 68  ormation than th
05e0: 65 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20 20  e error code.   
05f0: 20 20 20 20 20 2f 2f 20 62 65 63 61 75 73 65 20       // because 
0600: 69 74 20 69 73 20 62 61 73 65 64 20 6f 6e 20 74  it is based on t
0610: 68 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  he extended erro
0620: 72 20 63 6f 64 65 20 72 61 74 68 65 72 20 74 68  r code rather th
0630: 61 6e 20 74 68 65 20 73 69 6d 70 6c 69 66 69 65  an the simplifie
0640: 64 0a 20 20 20 20 20 20 20 20 2f 2f 20 65 72 72  d.        // err
0650: 6f 72 20 63 6f 64 65 20 74 68 61 74 20 53 51 4c  or code that SQL
0660: 69 74 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 74  ite normally ret
0670: 75 72 6e 73 2e 0a 20 20 20 20 20 20 20 20 74 68  urns..        th
0680: 72 6f 77 5f 73 71 6c 69 74 65 33 5f 65 78 63 65  row_sqlite3_exce
0690: 70 74 69 6f 6e 28 65 6e 76 2c 20 73 71 6c 69 74  ption(env, sqlit
06a0: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
06b0: 6f 64 65 28 68 61 6e 64 6c 65 29 2c 0a 20 20 20  ode(handle),.   
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
06d0: 69 74 65 33 5f 65 72 72 6d 73 67 28 68 61 6e 64  ite3_errmsg(hand
06e0: 6c 65 29 2c 20 6d 65 73 73 61 67 65 29 3b 0a 20  le), message);. 
06f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
0700: 20 20 20 20 2f 2f 20 77 65 20 75 73 65 20 53 51      // we use SQ
0710: 4c 49 54 45 5f 4f 4b 20 73 6f 20 74 68 61 74 20  LITE_OK so that 
0720: 61 20 67 65 6e 65 72 69 63 20 53 51 4c 69 74 65  a generic SQLite
0730: 45 78 63 65 70 74 69 6f 6e 20 69 73 20 74 68 72  Exception is thr
0740: 6f 77 6e 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20  own;.        // 
0750: 61 6e 79 20 63 6f 64 65 20 6e 6f 74 20 73 70 65  any code not spe
0760: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 73 77  cified in the sw
0770: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 62  itch statement b
0780: 65 6c 6f 77 20 77 6f 75 6c 64 20 64 6f 2e 0a 20  elow would do.. 
0790: 20 20 20 20 20 20 20 74 68 72 6f 77 5f 73 71 6c         throw_sql
07a0: 69 74 65 33 5f 65 78 63 65 70 74 69 6f 6e 28 65  ite3_exception(e
07b0: 6e 76 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 22  nv, SQLITE_OK, "
07c0: 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 2c 20  unknown error", 
07d0: 6d 65 73 73 61 67 65 29 3b 0a 20 20 20 20 7d 0a  message);.    }.
07e0: 7d 0a 0a 2f 2a 20 74 68 72 6f 77 20 61 20 53 51  }../* throw a SQ
07f0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 66 6f  LiteException fo
0800: 72 20 61 20 67 69 76 65 6e 20 65 72 72 6f 72 20  r a given error 
0810: 63 6f 64 65 0a 20 2a 20 73 68 6f 75 6c 64 20 6f  code. * should o
0820: 6e 6c 79 20 62 65 20 75 73 65 64 20 77 68 65 6e  nly be used when
0830: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
0840: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nnection is not 
0850: 61 76 61 69 6c 61 62 6c 65 20 62 65 63 61 75 73  available becaus
0860: 65 20 74 68 65 0a 20 2a 20 65 72 72 6f 72 20 69  e the. * error i
0870: 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20  nformation will 
0880: 6e 6f 74 20 62 65 20 71 75 69 74 65 20 61 73 20  not be quite as 
0890: 72 69 63 68 20 2a 2f 0a 76 6f 69 64 20 74 68 72  rich */.void thr
08a0: 6f 77 5f 73 71 6c 69 74 65 33 5f 65 78 63 65 70  ow_sqlite3_excep
08b0: 74 69 6f 6e 5f 65 72 72 63 6f 64 65 28 4a 4e 49  tion_errcode(JNI
08c0: 45 6e 76 2a 20 65 6e 76 2c 20 69 6e 74 20 65 72  Env* env, int er
08d0: 72 63 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61  rcode, const cha
08e0: 72 2a 20 6d 65 73 73 61 67 65 29 20 7b 0a 20 20  r* message) {.  
08f0: 20 20 74 68 72 6f 77 5f 73 71 6c 69 74 65 33 5f    throw_sqlite3_
0900: 65 78 63 65 70 74 69 6f 6e 28 65 6e 76 2c 20 65  exception(env, e
0910: 72 72 63 6f 64 65 2c 20 22 75 6e 6b 6e 6f 77 6e  rrcode, "unknown
0920: 20 65 72 72 6f 72 22 2c 20 6d 65 73 73 61 67 65   error", message
0930: 29 3b 0a 7d 0a 0a 2f 2a 20 74 68 72 6f 77 20 61  );.}../* throw a
0940: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
0950: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 65 72 72   for a given err
0960: 6f 72 20 63 6f 64 65 2c 20 73 71 6c 69 74 65 33  or code, sqlite3
0970: 6d 65 73 73 61 67 65 2c 20 61 6e 64 0a 20 20 20  message, and.   
0980: 75 73 65 72 20 6d 65 73 73 61 67 65 0a 20 2a 2f  user message. */
0990: 0a 76 6f 69 64 20 74 68 72 6f 77 5f 73 71 6c 69  .void throw_sqli
09a0: 74 65 33 5f 65 78 63 65 70 74 69 6f 6e 28 4a 4e  te3_exception(JN
09b0: 49 45 6e 76 2a 20 65 6e 76 2c 20 69 6e 74 20 65  IEnv* env, int e
09c0: 72 72 63 6f 64 65 2c 0a 20 20 20 20 20 20 20 20  rrcode,.        
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
09f0: 20 73 71 6c 69 74 65 33 4d 65 73 73 61 67 65 2c   sqlite3Message,
0a00: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 6d 65 73   const char* mes
0a10: 73 61 67 65 29 20 7b 0a 20 20 20 20 63 6f 6e 73  sage) {.    cons
0a20: 74 20 63 68 61 72 2a 20 65 78 63 65 70 74 69 6f  t char* exceptio
0a30: 6e 43 6c 61 73 73 3b 0a 20 20 20 20 73 77 69 74  nClass;.    swit
0a40: 63 68 20 28 65 72 72 63 6f 64 65 20 26 20 30 78  ch (errcode & 0x
0a50: 66 66 29 20 7b 20 2f 2a 20 6d 61 73 6b 20 6f 66  ff) { /* mask of
0a60: 66 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  f extended error
0a70: 20 63 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 20   code */.       
0a80: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
0a90: 52 52 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  RR:.            
0aa0: 65 78 63 65 70 74 69 6f 6e 43 6c 61 73 73 20 3d  exceptionClass =
0ab0: 20 22 6f 72 67 2f 73 71 6c 69 74 65 2f 64 61 74   "org/sqlite/dat
0ac0: 61 62 61 73 65 2f 73 71 6c 69 74 65 2f 53 51 4c  abase/sqlite/SQL
0ad0: 69 74 65 44 69 73 6b 49 4f 45 78 63 65 70 74 69  iteDiskIOExcepti
0ae0: 6f 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  on";.           
0af0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
0b00: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  case SQLITE_CORR
0b10: 55 50 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73  UPT:.        cas
0b20: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a  e SQLITE_NOTADB:
0b30: 20 2f 2f 20 74 72 65 61 74 20 22 75 6e 73 75 70   // treat "unsup
0b40: 70 6f 72 74 65 64 20 66 69 6c 65 20 66 6f 72 6d  ported file form
0b50: 61 74 22 20 65 72 72 6f 72 20 61 73 20 63 6f 72  at" error as cor
0b60: 72 75 70 74 69 6f 6e 20 61 6c 73 6f 0a 20 20 20  ruption also.   
0b70: 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69           excepti
0b80: 6f 6e 43 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73  onClass = "org/s
0b90: 71 6c 69 74 65 2f 64 61 74 61 62 61 73 65 2f 73  qlite/database/s
0ba0: 71 6c 69 74 65 2f 53 51 4c 69 74 65 44 61 74 61  qlite/SQLiteData
0bb0: 62 61 73 65 43 6f 72 72 75 70 74 45 78 63 65 70  baseCorruptExcep
0bc0: 74 69 6f 6e 22 3b 0a 20 20 20 20 20 20 20 20 20  tion";.         
0bd0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
0be0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
0bf0: 4e 53 54 52 41 49 4e 54 3a 0a 20 20 20 20 20 20  NSTRAINT:.      
0c00: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43        exceptionC
0c10: 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73 71 6c 69  lass = "org/sqli
0c20: 74 65 2f 64 61 74 61 62 61 73 65 2f 73 71 6c 69  te/database/sqli
0c30: 74 65 2f 53 51 4c 69 74 65 43 6f 6e 73 74 72 61  te/SQLiteConstra
0c40: 69 6e 74 45 78 63 65 70 74 69 6f 6e 22 3b 0a 20  intException";. 
0c50: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0c60: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  ;.        case S
0c70: 51 4c 49 54 45 5f 41 42 4f 52 54 3a 0a 20 20 20  QLITE_ABORT:.   
0c80: 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69           excepti
0c90: 6f 6e 43 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73  onClass = "org/s
0ca0: 71 6c 69 74 65 2f 64 61 74 61 62 61 73 65 2f 73  qlite/database/s
0cb0: 71 6c 69 74 65 2f 53 51 4c 69 74 65 41 62 6f 72  qlite/SQLiteAbor
0cc0: 74 45 78 63 65 70 74 69 6f 6e 22 3b 0a 20 20 20  tException";.   
0cd0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
0ce0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
0cf0: 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20 20 20 20  ITE_DONE:.      
0d00: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43        exceptionC
0d10: 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73 71 6c 69  lass = "org/sqli
0d20: 74 65 2f 64 61 74 61 62 61 73 65 2f 73 71 6c 69  te/database/sqli
0d30: 74 65 2f 53 51 4c 69 74 65 44 6f 6e 65 45 78 63  te/SQLiteDoneExc
0d40: 65 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20 20 20  eption";.       
0d50: 20 20 20 20 20 73 71 6c 69 74 65 33 4d 65 73 73       sqlite3Mess
0d60: 61 67 65 20 3d 20 4e 55 4c 4c 3b 20 2f 2f 20 53  age = NULL; // S
0d70: 51 4c 69 74 65 20 65 72 72 6f 72 20 6d 65 73 73  QLite error mess
0d80: 61 67 65 20 69 73 20 69 72 72 65 6c 65 76 61 6e  age is irrelevan
0d90: 74 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 20  t in this case. 
0da0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0db0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  ;.        case S
0dc0: 51 4c 49 54 45 5f 46 55 4c 4c 3a 0a 20 20 20 20  QLITE_FULL:.    
0dd0: 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f          exceptio
0de0: 6e 43 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73 71  nClass = "org/sq
0df0: 6c 69 74 65 2f 64 61 74 61 62 61 73 65 2f 73 71  lite/database/sq
0e00: 6c 69 74 65 2f 53 51 4c 69 74 65 46 75 6c 6c 45  lite/SQLiteFullE
0e10: 78 63 65 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20  xception";.     
0e20: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0e30: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
0e40: 45 5f 4d 49 53 55 53 45 3a 0a 20 20 20 20 20 20  E_MISUSE:.      
0e50: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43        exceptionC
0e60: 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73 71 6c 69  lass = "org/sqli
0e70: 74 65 2f 64 61 74 61 62 61 73 65 2f 73 71 6c 69  te/database/sqli
0e80: 74 65 2f 53 51 4c 69 74 65 4d 69 73 75 73 65 45  te/SQLiteMisuseE
0e90: 78 63 65 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20  xception";.     
0ea0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0eb0: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
0ec0: 45 5f 50 45 52 4d 3a 0a 20 20 20 20 20 20 20 20  E_PERM:.        
0ed0: 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43 6c 61      exceptionCla
0ee0: 73 73 20 3d 20 22 6f 72 67 2f 73 71 6c 69 74 65  ss = "org/sqlite
0ef0: 2f 64 61 74 61 62 61 73 65 2f 73 71 6c 69 74 65  /database/sqlite
0f00: 2f 53 51 4c 69 74 65 41 63 63 65 73 73 50 65 72  /SQLiteAccessPer
0f10: 6d 45 78 63 65 70 74 69 6f 6e 22 3b 0a 20 20 20  mException";.   
0f20: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
0f30: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
0f40: 49 54 45 5f 42 55 53 59 3a 0a 20 20 20 20 20 20  ITE_BUSY:.      
0f50: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43        exceptionC
0f60: 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73 71 6c 69  lass = "org/sqli
0f70: 74 65 2f 64 61 74 61 62 61 73 65 2f 73 71 6c 69  te/database/sqli
0f80: 74 65 2f 53 51 4c 69 74 65 44 61 74 61 62 61 73  te/SQLiteDatabas
0f90: 65 4c 6f 63 6b 65 64 45 78 63 65 70 74 69 6f 6e  eLockedException
0fa0: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ";.            b
0fb0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
0fc0: 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  se SQLITE_LOCKED
0fd0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78  :.            ex
0fe0: 63 65 70 74 69 6f 6e 43 6c 61 73 73 20 3d 20 22  ceptionClass = "
0ff0: 6f 72 67 2f 73 71 6c 69 74 65 2f 64 61 74 61 62  org/sqlite/datab
1000: 61 73 65 2f 73 71 6c 69 74 65 2f 53 51 4c 69 74  ase/sqlite/SQLit
1010: 65 54 61 62 6c 65 4c 6f 63 6b 65 64 45 78 63 65  eTableLockedExce
1020: 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20 20 20 20  ption";.        
1030: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1040: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
1050: 45 41 44 4f 4e 4c 59 3a 0a 20 20 20 20 20 20 20  EADONLY:.       
1060: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43 6c       exceptionCl
1070: 61 73 73 20 3d 20 22 6f 72 67 2f 73 71 6c 69 74  ass = "org/sqlit
1080: 65 2f 64 61 74 61 62 61 73 65 2f 73 71 6c 69 74  e/database/sqlit
1090: 65 2f 53 51 4c 69 74 65 52 65 61 64 4f 6e 6c 79  e/SQLiteReadOnly
10a0: 44 61 74 61 62 61 73 65 45 78 63 65 70 74 69 6f  DatabaseExceptio
10b0: 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n";.            
10c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
10d0: 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ase SQLITE_CANTO
10e0: 50 45 4e 3a 0a 20 20 20 20 20 20 20 20 20 20 20  PEN:.           
10f0: 20 65 78 63 65 70 74 69 6f 6e 43 6c 61 73 73 20   exceptionClass 
1100: 3d 20 22 6f 72 67 2f 73 71 6c 69 74 65 2f 64 61  = "org/sqlite/da
1110: 74 61 62 61 73 65 2f 73 71 6c 69 74 65 2f 53 51  tabase/sqlite/SQ
1120: 4c 69 74 65 43 61 6e 74 4f 70 65 6e 44 61 74 61  LiteCantOpenData
1130: 62 61 73 65 45 78 63 65 70 74 69 6f 6e 22 3b 0a  baseException";.
1140: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1150: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
1160: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 0a 20  SQLITE_TOOBIG:. 
1170: 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70             excep
1180: 74 69 6f 6e 43 6c 61 73 73 20 3d 20 22 6f 72 67  tionClass = "org
1190: 2f 73 71 6c 69 74 65 2f 64 61 74 61 62 61 73 65  /sqlite/database
11a0: 2f 73 71 6c 69 74 65 2f 53 51 4c 69 74 65 42 6c  /sqlite/SQLiteBl
11b0: 6f 62 54 6f 6f 42 69 67 45 78 63 65 70 74 69 6f  obTooBigExceptio
11c0: 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n";.            
11d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
11e0: 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45  ase SQLITE_RANGE
11f0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78  :.            ex
1200: 63 65 70 74 69 6f 6e 43 6c 61 73 73 20 3d 20 22  ceptionClass = "
1210: 6f 72 67 2f 73 71 6c 69 74 65 2f 64 61 74 61 62  org/sqlite/datab
1220: 61 73 65 2f 73 71 6c 69 74 65 2f 53 51 4c 69 74  ase/sqlite/SQLit
1230: 65 42 69 6e 64 4f 72 43 6f 6c 75 6d 6e 49 6e 64  eBindOrColumnInd
1240: 65 78 4f 75 74 4f 66 52 61 6e 67 65 45 78 63 65  exOutOfRangeExce
1250: 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20 20 20 20  ption";.        
1260: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1270: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
1280: 4f 4d 45 4d 3a 0a 20 20 20 20 20 20 20 20 20 20  OMEM:.          
1290: 20 20 65 78 63 65 70 74 69 6f 6e 43 6c 61 73 73    exceptionClass
12a0: 20 3d 20 22 6f 72 67 2f 73 71 6c 69 74 65 2f 64   = "org/sqlite/d
12b0: 61 74 61 62 61 73 65 2f 73 71 6c 69 74 65 2f 53  atabase/sqlite/S
12c0: 51 4c 69 74 65 4f 75 74 4f 66 4d 65 6d 6f 72 79  QLiteOutOfMemory
12d0: 45 78 63 65 70 74 69 6f 6e 22 3b 0a 20 20 20 20  Exception";.    
12e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
12f0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
1300: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 0a 20 20 20  TE_MISMATCH:.   
1310: 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69           excepti
1320: 6f 6e 43 6c 61 73 73 20 3d 20 22 6f 72 67 2f 73  onClass = "org/s
1330: 71 6c 69 74 65 2f 64 61 74 61 62 61 73 65 2f 73  qlite/database/s
1340: 71 6c 69 74 65 2f 53 51 4c 69 74 65 44 61 74 61  qlite/SQLiteData
1350: 74 79 70 65 4d 69 73 6d 61 74 63 68 45 78 63 65  typeMismatchExce
1360: 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20 20 20 20  ption";.        
1370: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1380: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
1390: 4e 54 45 52 52 55 50 54 3a 0a 20 20 20 20 20 20  NTERRUPT:.      
13a0: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 43        exceptionC
13b0: 6c 61 73 73 20 3d 20 22 61 6e 64 72 6f 69 64 2f  lass = "android/
13c0: 6f 73 2f 4f 70 65 72 61 74 69 6f 6e 43 61 6e 63  os/OperationCanc
13d0: 65 6c 65 64 45 78 63 65 70 74 69 6f 6e 22 3b 0a  eledException";.
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
13f0: 6b 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75  k;.        defau
1400: 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  lt:.            
1410: 65 78 63 65 70 74 69 6f 6e 43 6c 61 73 73 20 3d  exceptionClass =
1420: 20 22 6f 72 67 2f 73 71 6c 69 74 65 2f 64 61 74   "org/sqlite/dat
1430: 61 62 61 73 65 2f 73 71 6c 69 74 65 2f 53 51 4c  abase/sqlite/SQL
1440: 69 74 65 45 78 63 65 70 74 69 6f 6e 22 3b 0a 20  iteException";. 
1450: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1460: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20  ;.    }..    if 
1470: 28 73 71 6c 69 74 65 33 4d 65 73 73 61 67 65 29  (sqlite3Message)
1480: 20 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20   {.        char 
1490: 2a 7a 46 75 6c 6c 6d 73 67 20 3d 20 73 71 6c 69  *zFullmsg = sqli
14a0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20  te3_mprintf(.   
14b0: 20 20 20 20 20 20 20 20 20 22 25 73 20 28 63 6f           "%s (co
14c0: 64 65 20 25 64 29 25 73 25 73 22 2c 20 73 71 6c  de %d)%s%s", sql
14d0: 69 74 65 33 4d 65 73 73 61 67 65 2c 20 65 72 72  ite3Message, err
14e0: 63 6f 64 65 2c 20 0a 20 20 20 20 20 20 20 20 20  code, .         
14f0: 20 20 20 28 6d 65 73 73 61 67 65 20 3f 20 22 3a     (message ? ":
1500: 20 22 20 3a 20 22 22 29 2c 20 28 6d 65 73 73 61   " : ""), (messa
1510: 67 65 20 3f 20 6d 65 73 73 61 67 65 20 3a 20 22  ge ? message : "
1520: 22 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  ").        );.  
1530: 20 20 20 20 20 20 6a 6e 69 54 68 72 6f 77 45 78        jniThrowEx
1540: 63 65 70 74 69 6f 6e 28 65 6e 76 2c 20 65 78 63  ception(env, exc
1550: 65 70 74 69 6f 6e 43 6c 61 73 73 2c 20 7a 46 75  eptionClass, zFu
1560: 6c 6c 6d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  llmsg);.        
1570: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 46 75  sqlite3_free(zFu
1580: 6c 6c 6d 73 67 29 3b 0a 20 20 20 20 7d 20 65 6c  llmsg);.    } el
1590: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 6a 6e 69  se {.        jni
15a0: 54 68 72 6f 77 45 78 63 65 70 74 69 6f 6e 28 65  ThrowException(e
15b0: 6e 76 2c 20 65 78 63 65 70 74 69 6f 6e 43 6c 61  nv, exceptionCla
15c0: 73 73 2c 20 6d 65 73 73 61 67 65 29 3b 0a 20 20  ss, message);.  
15d0: 20 20 7d 0a 7d 0a 0a 0a 7d 20 2f 2f 20 6e 61 6d    }.}...} // nam
15e0: 65 73 70 61 63 65 20 61 6e 64 72 6f 69 64 0a     espace android.