/ Hex Artifact Content
Login

Artifact a199d7683d60cef73089e892409113e69c23a99f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  /..#include "sql
0270: 69 74 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a  iteInt.h"../*.**
0280: 20 45 78 65 63 75 74 65 20 53 51 4c 20 63 6f 64   Execute SQL cod
0290: 65 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f  e.  Return one o
02a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 73 75  f the SQLITE_ su
02b0: 63 63 65 73 73 2f 66 61 69 6c 75 72 65 0a 2a 2a  ccess/failure.**
02c0: 20 63 6f 64 65 73 2e 20 20 41 6c 73 6f 20 77 72   codes.  Also wr
02d0: 69 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ite an error mes
02e0: 73 61 67 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79  sage into memory
02f0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a   obtained from.*
0300: 2a 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d  * malloc() and m
0310: 61 6b 65 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f  ake *pzErrMsg po
0320: 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 73 73  int to that mess
0330: 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  age..**.** If th
0340: 65 20 53 51 4c 20 69 73 20 61 20 71 75 65 72 79  e SQL is a query
0350: 2c 20 74 68 65 6e 20 66 6f 72 20 65 61 63 68 20  , then for each 
0360: 72 6f 77 20 69 6e 20 74 68 65 20 71 75 65 72 79  row in the query
0370: 20 72 65 73 75 6c 74 0a 2a 2a 20 74 68 65 20 78   result.** the x
0380: 43 61 6c 6c 62 61 63 6b 28 29 20 66 75 6e 63 74  Callback() funct
0390: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 2e 20 20  ion is called.  
03a0: 70 41 72 67 20 62 65 63 6f 6d 65 73 20 74 68 65  pArg becomes the
03b0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
03c0: 6e 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28  nt to xCallback(
03d0: 29 2e 20 20 49 66 20 78 43 61 6c 6c 62 61 63 6b  ).  If xCallback
03e0: 3d 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 63 61  =NULL then no ca
03f0: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 73 20 69 6e 76  llback.** is inv
0400: 6f 6b 65 64 2c 20 65 76 65 6e 20 66 6f 72 20 71  oked, even for q
0410: 75 65 72 69 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73  ueries..*/.int s
0420: 71 6c 69 74 65 33 5f 65 78 65 63 28 0a 20 20 73  qlite3_exec(.  s
0430: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
0440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0450: 65 20 64 61 74 61 62 61 73 65 20 6f 6e 20 77 68  e database on wh
0460: 69 63 68 20 74 68 65 20 53 51 4c 20 65 78 65 63  ich the SQL exec
0470: 75 74 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  utes */.  const 
0480: 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20  char *zSql,     
0490: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
04a0: 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
04b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 63 61 6c  */.  sqlite3_cal
04c0: 6c 62 61 63 6b 20 78 43 61 6c 6c 62 61 63 6b 2c  lback xCallback,
04d0: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 69 73 20   /* Invoke this 
04e0: 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  callback routine
04f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
0500: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0510: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
0520: 65 6e 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b  ent to xCallback
0530: 28 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  () */.  char **p
0540: 7a 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20  zErrMsg         
0550: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 65 72 72      /* Write err
0560: 6f 72 20 6d 65 73 73 61 67 65 73 20 68 65 72 65  or messages here
0570: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20   */.){.  int rc 
0580: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
0590: 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
05a0: 6f 64 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ode */.  const c
05b0: 68 61 72 20 2a 7a 4c 65 66 74 6f 76 65 72 3b 20  har *zLeftover; 
05c0: 20 20 20 20 20 2f 2a 20 54 61 69 6c 20 6f 66 20       /* Tail of 
05d0: 75 6e 70 72 6f 63 65 73 73 65 64 20 53 51 4c 20  unprocessed SQL 
05e0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
05f0: 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 20 20 20  t *pStmt = 0;   
0600: 20 2f 2a 20 54 68 65 20 63 75 72 72 65 6e 74 20   /* The current 
0610: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  SQL statement */
0620: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 73  .  char **azCols
0630: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
0640: 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65 73 75 6c  * Names of resul
0650: 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69  t columns */.  i
0660: 6e 74 20 6e 52 65 74 72 79 20 3d 20 30 3b 20 20  nt nRetry = 0;  
0670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
0680: 6d 62 65 72 20 6f 66 20 72 65 74 72 79 20 61 74  mber of retry at
0690: 74 65 6d 70 74 73 20 2a 2f 0a 20 20 69 6e 74 20  tempts */.  int 
06a0: 63 61 6c 6c 62 61 63 6b 49 73 49 6e 69 74 3b 20  callbackIsInit; 
06b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
06c0: 69 66 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  if callback data
06d0: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
06e0: 2a 2f 0a 0a 20 20 69 66 28 20 21 73 71 6c 69 74  */..  if( !sqlit
06f0: 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
0700: 64 62 29 20 29 20 72 65 74 75 72 6e 20 53 51 4c  db) ) return SQL
0710: 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
0720: 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29  .  if( zSql==0 )
0730: 20 7a 53 71 6c 20 3d 20 22 22 3b 0a 0a 20 20 73   zSql = "";..  s
0740: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
0750: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
0760: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
0770: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
0780: 0a 20 20 77 68 69 6c 65 28 20 28 72 63 3d 3d 53  .  while( (rc==S
0790: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 72 63 3d  QLITE_OK || (rc=
07a0: 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 26  =SQLITE_SCHEMA &
07b0: 26 20 28 2b 2b 6e 52 65 74 72 79 29 3c 32 29 29  & (++nRetry)<2))
07c0: 20 26 26 20 7a 53 71 6c 5b 30 5d 20 29 7b 0a 20   && zSql[0] ){. 
07d0: 20 20 20 69 6e 74 20 6e 43 6f 6c 3b 0a 20 20 20     int nCol;.   
07e0: 20 63 68 61 72 20 2a 2a 61 7a 56 61 6c 73 20 3d   char **azVals =
07f0: 20 30 3b 0a 0a 20 20 20 20 70 53 74 6d 74 20 3d   0;..    pStmt =
0800: 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   0;.    rc = sql
0810: 69 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c  ite3_prepare(db,
0820: 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
0830: 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72 29 3b 0a  t, &zLeftover);.
0840: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
0850: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 53 74  SQLITE_OK || pSt
0860: 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  mt==0 );.    if(
0870: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
0880: 7b 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  {.      continue
0890: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
08a0: 21 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20  !pStmt ){.      
08b0: 2f 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 20  /* this happens 
08c0: 66 6f 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72  for a comment or
08d0: 20 77 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a   white-space */.
08e0: 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65        zSql = zLe
08f0: 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 63 6f  ftover;.      co
0900: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 0a 20  ntinue;.    }.. 
0910: 20 20 20 63 61 6c 6c 62 61 63 6b 49 73 49 6e 69     callbackIsIni
0920: 74 20 3d 20 30 3b 0a 20 20 20 20 6e 43 6f 6c 20  t = 0;.    nCol 
0930: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
0940: 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 0a  _count(pStmt);..
0950: 20 20 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a      while( 1 ){.
0960: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
0970: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
0980: 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 0a 20 20  step(pStmt);..  
0990: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68      /* Invoke th
09a0: 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  e callback funct
09b0: 69 6f 6e 20 69 66 20 72 65 71 75 69 72 65 64 20  ion if required 
09c0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 78 43 61  */.      if( xCa
09d0: 6c 6c 62 61 63 6b 20 26 26 20 28 53 51 4c 49 54  llback && (SQLIT
09e0: 45 5f 52 4f 57 3d 3d 72 63 20 7c 7c 20 0a 20 20  E_ROW==rc || .  
09f0: 20 20 20 20 20 20 20 20 28 53 51 4c 49 54 45 5f          (SQLITE_
0a00: 44 4f 4e 45 3d 3d 72 63 20 26 26 20 21 63 61 6c  DONE==rc && !cal
0a10: 6c 62 61 63 6b 49 73 49 6e 69 74 0a 20 20 20 20  lbackIsInit.    
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a30: 20 20 20 20 20 20 20 26 26 20 64 62 2d 3e 66 6c         && db->fl
0a40: 61 67 73 26 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ags&SQLITE_NullC
0a50: 61 6c 6c 62 61 63 6b 29 29 20 29 7b 0a 20 20 20  allback)) ){.   
0a60: 20 20 20 20 20 69 66 28 20 21 63 61 6c 6c 62 61       if( !callba
0a70: 63 6b 49 73 49 6e 69 74 20 29 7b 0a 20 20 20 20  ckIsInit ){.    
0a80: 20 20 20 20 20 20 61 7a 43 6f 6c 73 20 3d 20 73        azCols = s
0a90: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
0aa0: 72 6f 28 64 62 2c 20 32 2a 6e 43 6f 6c 2a 73 69  ro(db, 2*nCol*si
0ab0: 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  zeof(const char*
0ac0: 29 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20  ) + 1);.        
0ad0: 20 20 69 66 28 20 61 7a 43 6f 6c 73 3d 3d 30 20    if( azCols==0 
0ae0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
0af0: 6f 74 6f 20 65 78 65 63 5f 6f 75 74 3b 0a 20 20  oto exec_out;.  
0b00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0b10: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
0b20: 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Col; i++){.     
0b30: 20 20 20 20 20 20 20 61 7a 43 6f 6c 73 5b 69 5d         azCols[i]
0b40: 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
0b50: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70  e3_column_name(p
0b60: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
0b70: 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
0b80: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 29  VdbeSetColName()
0b90: 20 69 6e 73 74 61 6c 6c 73 20 63 6f 6c 75 6d 6e   installs column
0ba0: 20 6e 61 6d 65 73 20 61 73 20 55 54 46 38 0a 20   names as UTF8. 
0bb0: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 74             ** st
0bc0: 72 69 6e 67 73 20 73 6f 20 74 68 65 72 65 20 69  rings so there i
0bd0: 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 73 71 6c  s no way for sql
0be0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
0bf0: 28 29 20 74 6f 20 66 61 69 6c 2e 20 2a 2f 0a 20  () to fail. */. 
0c00: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
0c10: 74 28 20 61 7a 43 6f 6c 73 5b 69 5d 21 3d 30 20  t( azCols[i]!=0 
0c20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
0c30: 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
0c40: 6b 49 73 49 6e 69 74 20 3d 20 31 3b 0a 20 20 20  kIsInit = 1;.   
0c50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
0c60: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f  f( rc==SQLITE_RO
0c70: 57 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  W ){.          a
0c80: 7a 56 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b  zVals = &azCols[
0c90: 6e 43 6f 6c 5d 3b 0a 20 20 20 20 20 20 20 20 20  nCol];.         
0ca0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c   for(i=0; i<nCol
0cb0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
0cc0: 20 20 20 20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20      azVals[i] = 
0cd0: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f  (char *)sqlite3_
0ce0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
0cf0: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
0d00: 20 20 20 69 66 28 20 21 61 7a 56 61 6c 73 5b 69     if( !azVals[i
0d10: 5d 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ] && sqlite3_col
0d20: 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20  umn_type(pStmt, 
0d30: 69 29 21 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 20  i)!=SQLITE_NULL 
0d40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
0d50: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
0d60: 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  d = 1;.         
0d70: 20 20 20 20 20 67 6f 74 6f 20 65 78 65 63 5f 6f       goto exec_o
0d80: 75 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut;.            
0d90: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
0da0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0db0: 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 28 70 41  if( xCallback(pA
0dc0: 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a 56 61 6c 73  rg, nCol, azVals
0dd0: 2c 20 61 7a 43 6f 6c 73 29 20 29 7b 0a 20 20 20  , azCols) ){.   
0de0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
0df0: 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20 20  TE_ABORT;.      
0e00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46      sqlite3VdbeF
0e10: 69 6e 61 6c 69 7a 65 28 28 56 64 62 65 20 2a 29  inalize((Vdbe *)
0e20: 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20  pStmt);.        
0e30: 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
0e40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
0e50: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  ror(db, SQLITE_A
0e60: 42 4f 52 54 2c 20 30 29 3b 0a 20 20 20 20 20 20  BORT, 0);.      
0e70: 20 20 20 20 67 6f 74 6f 20 65 78 65 63 5f 6f 75      goto exec_ou
0e80: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
0e90: 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
0ea0: 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  rc!=SQLITE_ROW )
0eb0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
0ec0: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
0ed0: 7a 65 28 28 56 64 62 65 20 2a 29 70 53 74 6d 74  ze((Vdbe *)pStmt
0ee0: 29 3b 0a 20 20 20 20 20 20 20 20 70 53 74 6d 74  );.        pStmt
0ef0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   = 0;.        if
0f00: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 53 43 48  ( rc!=SQLITE_SCH
0f10: 45 4d 41 20 29 7b 0a 20 20 20 20 20 20 20 20 20  EMA ){.         
0f20: 20 6e 52 65 74 72 79 20 3d 20 30 3b 0a 20 20 20   nRetry = 0;.   
0f30: 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c         zSql = zL
0f40: 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20  eftover;.       
0f50: 20 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65     while( sqlite
0f60: 33 49 73 73 70 61 63 65 28 7a 53 71 6c 5b 30 5d  3Isspace(zSql[0]
0f70: 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20  ) ) zSql++;.    
0f80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72      }.        br
0f90: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
0fa0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 44   }..    sqlite3D
0fb0: 62 46 72 65 65 28 64 62 2c 20 61 7a 43 6f 6c 73  bFree(db, azCols
0fc0: 29 3b 0a 20 20 20 20 61 7a 43 6f 6c 73 20 3d 20  );.    azCols = 
0fd0: 30 3b 0a 20 20 7d 0a 0a 65 78 65 63 5f 6f 75 74  0;.  }..exec_out
0fe0: 3a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 20  :.  if( pStmt ) 
0ff0: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
1000: 69 7a 65 28 28 56 64 62 65 20 2a 29 70 53 74 6d  ize((Vdbe *)pStm
1010: 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  t);.  sqlite3DbF
1020: 72 65 65 28 64 62 2c 20 61 7a 43 6f 6c 73 29 3b  ree(db, azCols);
1030: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
1040: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
1050: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1060: 45 5f 4f 4b 20 26 26 20 41 4c 57 41 59 53 28 72  E_OK && ALWAYS(r
1070: 63 3d 3d 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  c==sqlite3_errco
1080: 64 65 28 64 62 29 29 20 26 26 20 70 7a 45 72 72  de(db)) && pzErr
1090: 4d 73 67 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e  Msg ){.    int n
10a0: 45 72 72 4d 73 67 20 3d 20 31 20 2b 20 73 71 6c  ErrMsg = 1 + sql
10b0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 73 71 6c  ite3Strlen30(sql
10c0: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
10d0: 3b 0a 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20  ;.    *pzErrMsg 
10e0: 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28  = sqlite3Malloc(
10f0: 6e 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  nErrMsg);.    if
1100: 28 20 2a 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  ( *pzErrMsg ){. 
1110: 20 20 20 20 20 6d 65 6d 63 70 79 28 2a 70 7a 45       memcpy(*pzE
1120: 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 33 5f 65  rrMsg, sqlite3_e
1130: 72 72 6d 73 67 28 64 62 29 2c 20 6e 45 72 72 4d  rrmsg(db), nErrM
1140: 73 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  sg);.    }else{.
1150: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1160: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 73  E_NOMEM;.      s
1170: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
1180: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29  SQLITE_NOMEM, 0)
1190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
11a0: 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a  if( pzErrMsg ){.
11b0: 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20      *pzErrMsg = 
11c0: 30 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  0;.  }..  assert
11d0: 28 20 28 72 63 26 64 62 2d 3e 65 72 72 4d 61 73  ( (rc&db->errMas
11e0: 6b 29 3d 3d 72 63 20 29 3b 0a 20 20 73 71 6c 69  k)==rc );.  sqli
11f0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
1200: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
1210: 74 75 72 6e 20 72 63 3b 0a 7d 0a                 turn rc;.}.