/ Hex Artifact Content
Login

Artifact 1199b96a82d5c41509b5e24fc9faa1852b7f3135:


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 41 6e 20 74 6f 6b  ******.** An tok
0180: 65 6e 69 7a 65 72 20 66 6f 72 20 53 51 4c 0a 2a  enizer for SQL.*
0190: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
01a0: 6f 6e 74 61 69 6e 73 20 43 20 63 6f 64 65 20 74  ontains C code t
01b0: 68 61 74 20 73 70 6c 69 74 73 20 61 6e 20 53 51  hat splits an SQ
01c0: 4c 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 75  L input string u
01d0: 70 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  p into.** indivi
01e0: 64 75 61 6c 20 74 6f 6b 65 6e 73 20 61 6e 64 20  dual tokens and 
01f0: 73 65 6e 64 73 20 74 68 6f 73 65 20 74 6f 6b 65  sends those toke
0200: 6e 73 20 6f 6e 65 2d 62 79 2d 6f 6e 65 20 6f 76  ns one-by-one ov
0210: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 70 61 72  er to the.** par
0220: 73 65 72 20 66 6f 72 20 61 6e 61 6c 79 73 69 73  ser for analysis
0230: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 74 6f 6b  ..**.** $Id: tok
0240: 65 6e 69 7a 65 2e 63 2c 76 20 31 2e 33 33 20 32  enize.c,v 1.33 2
0250: 30 30 32 2f 30 31 2f 32 39 20 31 38 3a 34 31 3a  002/01/29 18:41:
0260: 32 35 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a  25 drh Exp $.*/.
0270: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0280: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
0290: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
02a0: 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e 63 6c 75  <ctype.h>.#inclu
02b0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 0a 2f  de <stdlib.h>../
02c0: 2a 0a 2a 2a 20 41 6c 6c 20 74 68 65 20 6b 65 79  *.** All the key
02d0: 77 6f 72 64 73 20 6f 66 20 74 68 65 20 53 51 4c  words of the SQL
02e0: 20 6c 61 6e 67 75 61 67 65 20 61 72 65 20 73 74   language are st
02f0: 6f 72 65 64 20 61 73 20 69 6e 20 61 20 68 61 73  ored as in a has
0300: 68 0a 2a 2a 20 74 61 62 6c 65 20 63 6f 6d 70 6f  h.** table compo
0310: 73 65 64 20 6f 66 20 69 6e 73 74 61 6e 63 65 73  sed of instances
0320: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
0330: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
0340: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
0350: 65 79 77 6f 72 64 20 4b 65 79 77 6f 72 64 3b 0a  eyword Keyword;.
0360: 73 74 72 75 63 74 20 4b 65 79 77 6f 72 64 20 7b  struct Keyword {
0370: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
0380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
0390: 68 65 20 6b 65 79 77 6f 72 64 20 6e 61 6d 65 20  he keyword name 
03a0: 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
03c0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
03d0: 63 74 65 72 73 20 69 6e 20 74 68 65 20 6b 65 79  cters in the key
03e0: 77 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 74 6f  word */.  int to
03f0: 6b 65 6e 54 79 70 65 3b 20 20 20 20 20 20 20 20  kenType;        
0400: 20 20 20 2f 2a 20 54 68 65 20 74 6f 6b 65 6e 20     /* The token 
0410: 76 61 6c 75 65 20 66 6f 72 20 74 68 69 73 20 6b  value for this k
0420: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 4b 65 79 77  eyword */.  Keyw
0430: 6f 72 64 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ord *pNext;     
0440: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 6b 65 79       /* Next key
0450: 77 6f 72 64 20 77 69 74 68 20 74 68 65 20 73 61  word with the sa
0460: 6d 65 20 68 61 73 68 20 2a 2f 0a 7d 3b 0a 0a 2f  me hash */.};../
0470: 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74  *.** These are t
0480: 68 65 20 6b 65 79 77 6f 72 64 73 0a 2a 2f 0a 73  he keywords.*/.s
0490: 74 61 74 69 63 20 4b 65 79 77 6f 72 64 20 61 4b  tatic Keyword aK
04a0: 65 79 77 6f 72 64 54 61 62 6c 65 5b 5d 20 3d 20  eywordTable[] = 
04b0: 7b 0a 20 20 7b 20 22 41 42 4f 52 54 22 2c 20 20  {.  { "ABORT",  
04c0: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
04d0: 5f 41 42 4f 52 54 2c 20 20 20 20 20 20 20 20 20  _ABORT,         
04e0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 41 4c 4c     0 },.  { "ALL
04f0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0500: 20 30 2c 20 54 4b 5f 41 4c 4c 2c 20 20 20 20 20   0, TK_ALL,     
0510: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0520: 7b 20 22 41 4e 44 22 2c 20 20 20 20 20 20 20 20  { "AND",        
0530: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 41 4e 44         0, TK_AND
0540: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ,              0
0550: 20 7d 2c 0a 20 20 7b 20 22 41 53 22 2c 20 20 20   },.  { "AS",   
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
0570: 54 4b 5f 41 53 2c 20 20 20 20 20 20 20 20 20 20  TK_AS,          
0580: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 41       0 },.  { "A
0590: 53 43 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  SC",            
05a0: 20 20 20 30 2c 20 54 4b 5f 41 53 43 2c 20 20 20     0, TK_ASC,   
05b0: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
05c0: 20 20 7b 20 22 42 45 47 49 4e 22 2c 20 20 20 20    { "BEGIN",    
05d0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 42           0, TK_B
05e0: 45 47 49 4e 2c 20 20 20 20 20 20 20 20 20 20 20  EGIN,           
05f0: 20 30 20 7d 2c 0a 20 20 7b 20 22 42 45 54 57 45   0 },.  { "BETWE
0600: 45 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20 30  EN",           0
0610: 2c 20 54 4b 5f 42 45 54 57 45 45 4e 2c 20 20 20  , TK_BETWEEN,   
0620: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0630: 22 42 59 22 2c 20 20 20 20 20 20 20 20 20 20 20  "BY",           
0640: 20 20 20 20 20 30 2c 20 54 4b 5f 42 59 2c 20 20       0, TK_BY,  
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d               0 }
0660: 2c 0a 20 20 7b 20 22 43 48 45 43 4b 22 2c 20 20  ,.  { "CHECK",  
0670: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0680: 5f 43 48 45 43 4b 2c 20 20 20 20 20 20 20 20 20  _CHECK,         
0690: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 43 4c 55     0 },.  { "CLU
06a0: 53 54 45 52 22 2c 20 20 20 20 20 20 20 20 20 20  STER",          
06b0: 20 30 2c 20 54 4b 5f 43 4c 55 53 54 45 52 2c 20   0, TK_CLUSTER, 
06c0: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
06d0: 7b 20 22 43 4f 4d 4d 49 54 22 2c 20 20 20 20 20  { "COMMIT",     
06e0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 43 4f 4d         0, TK_COM
06f0: 4d 49 54 2c 20 20 20 20 20 20 20 20 20 20 20 30  MIT,           0
0700: 20 7d 2c 0a 20 20 7b 20 22 43 4f 4e 46 4c 49 43   },.  { "CONFLIC
0710: 54 22 2c 20 20 20 20 20 20 20 20 20 20 30 2c 20  T",          0, 
0720: 54 4b 5f 43 4f 4e 46 4c 49 43 54 2c 20 20 20 20  TK_CONFLICT,    
0730: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 43       0 },.  { "C
0740: 4f 4e 53 54 52 41 49 4e 54 22 2c 20 20 20 20 20  ONSTRAINT",     
0750: 20 20 20 30 2c 20 54 4b 5f 43 4f 4e 53 54 52 41     0, TK_CONSTRA
0760: 49 4e 54 2c 20 20 20 20 20 20 20 30 20 7d 2c 0a  INT,       0 },.
0770: 20 20 7b 20 22 43 4f 50 59 22 2c 20 20 20 20 20    { "COPY",     
0780: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 43           0, TK_C
0790: 4f 50 59 2c 20 20 20 20 20 20 20 20 20 20 20 20  OPY,            
07a0: 20 30 20 7d 2c 0a 20 20 7b 20 22 43 52 45 41 54   0 },.  { "CREAT
07b0: 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  E",            0
07c0: 2c 20 54 4b 5f 43 52 45 41 54 45 2c 20 20 20 20  , TK_CREATE,    
07d0: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
07e0: 22 44 45 46 41 55 4c 54 22 2c 20 20 20 20 20 20  "DEFAULT",      
07f0: 20 20 20 20 20 30 2c 20 54 4b 5f 44 45 46 41 55       0, TK_DEFAU
0800: 4c 54 2c 20 20 20 20 20 20 20 20 20 20 30 20 7d  LT,          0 }
0810: 2c 0a 20 20 7b 20 22 44 45 4c 45 54 45 22 2c 20  ,.  { "DELETE", 
0820: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0830: 5f 44 45 4c 45 54 45 2c 20 20 20 20 20 20 20 20  _DELETE,        
0840: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 44 45 4c     0 },.  { "DEL
0850: 49 4d 49 54 45 52 53 22 2c 20 20 20 20 20 20 20  IMITERS",       
0860: 20 30 2c 20 54 4b 5f 44 45 4c 49 4d 49 54 45 52   0, TK_DELIMITER
0870: 53 2c 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20  S,       0 },.  
0880: 7b 20 22 44 45 53 43 22 2c 20 20 20 20 20 20 20  { "DESC",       
0890: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 44 45 53         0, TK_DES
08a0: 43 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  C,             0
08b0: 20 7d 2c 0a 20 20 7b 20 22 44 49 53 54 49 4e 43   },.  { "DISTINC
08c0: 54 22 2c 20 20 20 20 20 20 20 20 20 20 30 2c 20  T",          0, 
08d0: 54 4b 5f 44 49 53 54 49 4e 43 54 2c 20 20 20 20  TK_DISTINCT,    
08e0: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 44       0 },.  { "D
08f0: 52 4f 50 22 2c 20 20 20 20 20 20 20 20 20 20 20  ROP",           
0900: 20 20 20 30 2c 20 54 4b 5f 44 52 4f 50 2c 20 20     0, TK_DROP,  
0910: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0920: 20 20 7b 20 22 45 4e 44 22 2c 20 20 20 20 20 20    { "END",      
0930: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 45           0, TK_E
0940: 4e 44 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ND,             
0950: 20 30 20 7d 2c 0a 20 20 7b 20 22 45 58 43 45 50   0 },.  { "EXCEP
0960: 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  T",            0
0970: 2c 20 54 4b 5f 45 58 43 45 50 54 2c 20 20 20 20  , TK_EXCEPT,    
0980: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0990: 22 45 58 50 4c 41 49 4e 22 2c 20 20 20 20 20 20  "EXPLAIN",      
09a0: 20 20 20 20 20 30 2c 20 54 4b 5f 45 58 50 4c 41       0, TK_EXPLA
09b0: 49 4e 2c 20 20 20 20 20 20 20 20 20 20 30 20 7d  IN,          0 }
09c0: 2c 0a 20 20 7b 20 22 46 52 4f 4d 22 2c 20 20 20  ,.  { "FROM",   
09d0: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
09e0: 5f 46 52 4f 4d 2c 20 20 20 20 20 20 20 20 20 20  _FROM,          
09f0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 47 4c 4f     0 },.  { "GLO
0a00: 42 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  B",             
0a10: 20 30 2c 20 54 4b 5f 47 4c 4f 42 2c 20 20 20 20   0, TK_GLOB,    
0a20: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0a30: 7b 20 22 47 52 4f 55 50 22 2c 20 20 20 20 20 20  { "GROUP",      
0a40: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 47 52 4f         0, TK_GRO
0a50: 55 50 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  UP,            0
0a60: 20 7d 2c 0a 20 20 7b 20 22 48 41 56 49 4e 47 22   },.  { "HAVING"
0a70: 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20  ,            0, 
0a80: 54 4b 5f 48 41 56 49 4e 47 2c 20 20 20 20 20 20  TK_HAVING,      
0a90: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 49       0 },.  { "I
0aa0: 47 4e 4f 52 45 22 2c 20 20 20 20 20 20 20 20 20  GNORE",         
0ab0: 20 20 20 30 2c 20 54 4b 5f 49 47 4e 4f 52 45 2c     0, TK_IGNORE,
0ac0: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0ad0: 20 20 7b 20 22 49 4e 22 2c 20 20 20 20 20 20 20    { "IN",       
0ae0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 49           0, TK_I
0af0: 4e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  N,              
0b00: 20 30 20 7d 2c 0a 20 20 7b 20 22 49 4e 44 45 58   0 },.  { "INDEX
0b10: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ",             0
0b20: 2c 20 54 4b 5f 49 4e 44 45 58 2c 20 20 20 20 20  , TK_INDEX,     
0b30: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0b40: 22 49 4e 53 45 52 54 22 2c 20 20 20 20 20 20 20  "INSERT",       
0b50: 20 20 20 20 20 30 2c 20 54 4b 5f 49 4e 53 45 52       0, TK_INSER
0b60: 54 2c 20 20 20 20 20 20 20 20 20 20 20 30 20 7d  T,           0 }
0b70: 2c 0a 20 20 7b 20 22 49 4e 54 45 52 53 45 43 54  ,.  { "INTERSECT
0b80: 22 2c 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b  ",         0, TK
0b90: 5f 49 4e 54 45 52 53 45 43 54 2c 20 20 20 20 20  _INTERSECT,     
0ba0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 49 4e 54     0 },.  { "INT
0bb0: 4f 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  O",             
0bc0: 20 30 2c 20 54 4b 5f 49 4e 54 4f 2c 20 20 20 20   0, TK_INTO,    
0bd0: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0be0: 7b 20 22 49 53 22 2c 20 20 20 20 20 20 20 20 20  { "IS",         
0bf0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 49 53 2c         0, TK_IS,
0c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
0c10: 20 7d 2c 0a 20 20 7b 20 22 49 53 4e 55 4c 4c 22   },.  { "ISNULL"
0c20: 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20  ,            0, 
0c30: 54 4b 5f 49 53 4e 55 4c 4c 2c 20 20 20 20 20 20  TK_ISNULL,      
0c40: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4b       0 },.  { "K
0c50: 45 59 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  EY",            
0c60: 20 20 20 30 2c 20 54 4b 5f 4b 45 59 2c 20 20 20     0, TK_KEY,   
0c70: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0c80: 20 20 7b 20 22 4c 49 4b 45 22 2c 20 20 20 20 20    { "LIKE",     
0c90: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 4c           0, TK_L
0ca0: 49 4b 45 2c 20 20 20 20 20 20 20 20 20 20 20 20  IKE,            
0cb0: 20 30 20 7d 2c 0a 20 20 7b 20 22 4c 49 4d 49 54   0 },.  { "LIMIT
0cc0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ",             0
0cd0: 2c 20 54 4b 5f 4c 49 4d 49 54 2c 20 20 20 20 20  , TK_LIMIT,     
0ce0: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0cf0: 22 4e 4f 54 22 2c 20 20 20 20 20 20 20 20 20 20  "NOT",          
0d00: 20 20 20 20 20 30 2c 20 54 4b 5f 4e 4f 54 2c 20       0, TK_NOT, 
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d               0 }
0d20: 2c 0a 20 20 7b 20 22 4e 4f 54 4e 55 4c 4c 22 2c  ,.  { "NOTNULL",
0d30: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0d40: 5f 4e 4f 54 4e 55 4c 4c 2c 20 20 20 20 20 20 20  _NOTNULL,       
0d50: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4e 55 4c     0 },.  { "NUL
0d60: 4c 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  L",             
0d70: 20 30 2c 20 54 4b 5f 4e 55 4c 4c 2c 20 20 20 20   0, TK_NULL,    
0d80: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0d90: 7b 20 22 4f 46 46 53 45 54 22 2c 20 20 20 20 20  { "OFFSET",     
0da0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 4f 46 46         0, TK_OFF
0db0: 53 45 54 2c 20 20 20 20 20 20 20 20 20 20 20 30  SET,           0
0dc0: 20 7d 2c 0a 20 20 7b 20 22 4f 4e 22 2c 20 20 20   },.  { "ON",   
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
0de0: 54 4b 5f 4f 4e 2c 20 20 20 20 20 20 20 20 20 20  TK_ON,          
0df0: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4f       0 },.  { "O
0e00: 52 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  R",             
0e10: 20 20 20 30 2c 20 54 4b 5f 4f 52 2c 20 20 20 20     0, TK_OR,    
0e20: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0e30: 20 20 7b 20 22 4f 52 44 45 52 22 2c 20 20 20 20    { "ORDER",    
0e40: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 4f           0, TK_O
0e50: 52 44 45 52 2c 20 20 20 20 20 20 20 20 20 20 20  RDER,           
0e60: 20 30 20 7d 2c 0a 20 20 7b 20 22 50 52 41 47 4d   0 },.  { "PRAGM
0e70: 41 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  A",            0
0e80: 2c 20 54 4b 5f 50 52 41 47 4d 41 2c 20 20 20 20  , TK_PRAGMA,    
0e90: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0ea0: 22 50 52 49 4d 41 52 59 22 2c 20 20 20 20 20 20  "PRIMARY",      
0eb0: 20 20 20 20 20 30 2c 20 54 4b 5f 50 52 49 4d 41       0, TK_PRIMA
0ec0: 52 59 2c 20 20 20 20 20 20 20 20 20 20 30 20 7d  RY,          0 }
0ed0: 2c 0a 20 20 7b 20 22 52 45 50 4c 41 43 45 22 2c  ,.  { "REPLACE",
0ee0: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0ef0: 5f 52 45 50 4c 41 43 45 2c 20 20 20 20 20 20 20  _REPLACE,       
0f00: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 52 4f 4c     0 },.  { "ROL
0f10: 4c 42 41 43 4b 22 2c 20 20 20 20 20 20 20 20 20  LBACK",         
0f20: 20 30 2c 20 54 4b 5f 52 4f 4c 4c 42 41 43 4b 2c   0, TK_ROLLBACK,
0f30: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0f40: 7b 20 22 53 45 4c 45 43 54 22 2c 20 20 20 20 20  { "SELECT",     
0f50: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 53 45 4c         0, TK_SEL
0f60: 45 43 54 2c 20 20 20 20 20 20 20 20 20 20 20 30  ECT,           0
0f70: 20 7d 2c 0a 20 20 7b 20 22 53 45 54 22 2c 20 20   },.  { "SET",  
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
0f90: 54 4b 5f 53 45 54 2c 20 20 20 20 20 20 20 20 20  TK_SET,         
0fa0: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 54       0 },.  { "T
0fb0: 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 20  ABLE",          
0fc0: 20 20 20 30 2c 20 54 4b 5f 54 41 42 4c 45 2c 20     0, TK_TABLE, 
0fd0: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0fe0: 20 20 7b 20 22 54 45 4d 50 22 2c 20 20 20 20 20    { "TEMP",     
0ff0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 54           0, TK_T
1000: 45 4d 50 2c 20 20 20 20 20 20 20 20 20 20 20 20  EMP,            
1010: 20 30 20 7d 2c 0a 20 20 7b 20 22 54 45 4d 50 4f   0 },.  { "TEMPO
1020: 52 41 52 59 22 2c 20 20 20 20 20 20 20 20 20 30  RARY",         0
1030: 2c 20 54 4b 5f 54 45 4d 50 2c 20 20 20 20 20 20  , TK_TEMP,      
1040: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
1050: 22 54 52 41 4e 53 41 43 54 49 4f 4e 22 2c 20 20  "TRANSACTION",  
1060: 20 20 20 20 20 30 2c 20 54 4b 5f 54 52 41 4e 53       0, TK_TRANS
1070: 41 43 54 49 4f 4e 2c 20 20 20 20 20 20 30 20 7d  ACTION,      0 }
1080: 2c 0a 20 20 7b 20 22 55 4e 49 4f 4e 22 2c 20 20  ,.  { "UNION",  
1090: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
10a0: 5f 55 4e 49 4f 4e 2c 20 20 20 20 20 20 20 20 20  _UNION,         
10b0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 55 4e 49     0 },.  { "UNI
10c0: 51 55 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  QUE",           
10d0: 20 30 2c 20 54 4b 5f 55 4e 49 51 55 45 2c 20 20   0, TK_UNIQUE,  
10e0: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
10f0: 7b 20 22 55 50 44 41 54 45 22 2c 20 20 20 20 20  { "UPDATE",     
1100: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 55 50 44         0, TK_UPD
1110: 41 54 45 2c 20 20 20 20 20 20 20 20 20 20 20 30  ATE,           0
1120: 20 7d 2c 0a 20 20 7b 20 22 55 53 49 4e 47 22 2c   },.  { "USING",
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
1140: 54 4b 5f 55 53 49 4e 47 2c 20 20 20 20 20 20 20  TK_USING,       
1150: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 56       0 },.  { "V
1160: 41 43 55 55 4d 22 2c 20 20 20 20 20 20 20 20 20  ACUUM",         
1170: 20 20 20 30 2c 20 54 4b 5f 56 41 43 55 55 4d 2c     0, TK_VACUUM,
1180: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
1190: 20 20 7b 20 22 56 41 4c 55 45 53 22 2c 20 20 20    { "VALUES",   
11a0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 56           0, TK_V
11b0: 41 4c 55 45 53 2c 20 20 20 20 20 20 20 20 20 20  ALUES,          
11c0: 20 30 20 7d 2c 0a 20 20 7b 20 22 57 48 45 52 45   0 },.  { "WHERE
11d0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ",             0
11e0: 2c 20 54 4b 5f 57 48 45 52 45 2c 20 20 20 20 20  , TK_WHERE,     
11f0: 20 20 20 20 20 20 20 30 20 7d 2c 0a 7d 3b 0a 0a         0 },.};..
1200: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
1210: 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2f 0a  e hash table.*/.
1220: 23 64 65 66 69 6e 65 20 4b 45 59 5f 48 41 53 48  #define KEY_HASH
1230: 5f 53 49 5a 45 20 37 31 0a 73 74 61 74 69 63 20  _SIZE 71.static 
1240: 4b 65 79 77 6f 72 64 20 2a 61 70 48 61 73 68 54  Keyword *apHashT
1250: 61 62 6c 65 5b 4b 45 59 5f 48 41 53 48 5f 53 49  able[KEY_HASH_SI
1260: 5a 45 5d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  ZE];.../*.** Thi
1270: 73 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 6f 6b 73  s function looks
1280: 20 75 70 20 61 6e 20 69 64 65 6e 74 69 66 69 65   up an identifie
1290: 72 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  r to determine i
12a0: 66 20 69 74 20 69 73 20 61 0a 2a 2a 20 6b 65 79  f it is a.** key
12b0: 77 6f 72 64 2e 20 20 49 66 20 69 74 20 69 73 20  word.  If it is 
12c0: 61 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 74  a keyword, the t
12d0: 6f 6b 65 6e 20 63 6f 64 65 20 6f 66 20 74 68 61  oken code of tha
12e0: 74 20 6b 65 79 77 6f 72 64 20 69 73 20 0a 2a 2a  t keyword is .**
12f0: 20 72 65 74 75 72 6e 65 64 2e 20 20 49 66 20 74   returned.  If t
1300: 68 65 20 69 6e 70 75 74 20 69 73 20 6e 6f 74 20  he input is not 
1310: 61 20 6b 65 79 77 6f 72 64 2c 20 54 4b 5f 49 44  a keyword, TK_ID
1320: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
1330: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
1340: 74 65 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  teKeywordCode(co
1350: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
1360: 20 6e 29 7b 0a 20 20 69 6e 74 20 68 3b 0a 20 20   n){.  int h;.  
1370: 4b 65 79 77 6f 72 64 20 2a 70 3b 0a 20 20 69 66  Keyword *p;.  if
1380: 28 20 61 4b 65 79 77 6f 72 64 54 61 62 6c 65 5b  ( aKeywordTable[
1390: 30 5d 2e 6c 65 6e 3d 3d 30 20 29 7b 0a 20 20 20  0].len==0 ){.   
13a0: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
13b0: 68 65 20 6b 65 79 77 6f 72 64 20 68 61 73 68 20  he keyword hash 
13c0: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 73 71 6c  table */.    sql
13d0: 69 74 65 4f 73 45 6e 74 65 72 4d 75 74 65 78 28  iteOsEnterMutex(
13e0: 29 3b 0a 20 20 20 20 69 66 28 20 61 4b 65 79 77  );.    if( aKeyw
13f0: 6f 72 64 54 61 62 6c 65 5b 30 5d 2e 6c 65 6e 3d  ordTable[0].len=
1400: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1410: 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0a  i;.      int n;.
1420: 20 20 20 20 20 20 6e 20 3d 20 73 69 7a 65 6f 66        n = sizeof
1430: 28 61 4b 65 79 77 6f 72 64 54 61 62 6c 65 29 2f  (aKeywordTable)/
1440: 73 69 7a 65 6f 66 28 61 4b 65 79 77 6f 72 64 54  sizeof(aKeywordT
1450: 61 62 6c 65 5b 30 5d 29 3b 0a 20 20 20 20 20 20  able[0]);.      
1460: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
1470: 2b 29 7b 0a 20 20 20 20 20 20 20 20 61 4b 65 79  +){.        aKey
1480: 77 6f 72 64 54 61 62 6c 65 5b 69 5d 2e 6c 65 6e  wordTable[i].len
1490: 20 3d 20 73 74 72 6c 65 6e 28 61 4b 65 79 77 6f   = strlen(aKeywo
14a0: 72 64 54 61 62 6c 65 5b 69 5d 2e 7a 4e 61 6d 65  rdTable[i].zName
14b0: 29 3b 0a 20 20 20 20 20 20 20 20 68 20 3d 20 73  );.        h = s
14c0: 71 6c 69 74 65 48 61 73 68 4e 6f 43 61 73 65 28  qliteHashNoCase(
14d0: 61 4b 65 79 77 6f 72 64 54 61 62 6c 65 5b 69 5d  aKeywordTable[i]
14e0: 2e 7a 4e 61 6d 65 2c 20 61 4b 65 79 77 6f 72 64  .zName, aKeyword
14f0: 54 61 62 6c 65 5b 69 5d 2e 6c 65 6e 29 3b 0a 20  Table[i].len);. 
1500: 20 20 20 20 20 20 20 68 20 25 3d 20 4b 45 59 5f         h %= KEY_
1510: 48 41 53 48 5f 53 49 5a 45 3b 0a 20 20 20 20 20  HASH_SIZE;.     
1520: 20 20 20 61 4b 65 79 77 6f 72 64 54 61 62 6c 65     aKeywordTable
1530: 5b 69 5d 2e 70 4e 65 78 74 20 3d 20 61 70 48 61  [i].pNext = apHa
1540: 73 68 54 61 62 6c 65 5b 68 5d 3b 0a 20 20 20 20  shTable[h];.    
1550: 20 20 20 20 61 70 48 61 73 68 54 61 62 6c 65 5b      apHashTable[
1560: 68 5d 20 3d 20 26 61 4b 65 79 77 6f 72 64 54 61  h] = &aKeywordTa
1570: 62 6c 65 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a  ble[i];.      }.
1580: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
1590: 4f 73 4c 65 61 76 65 4d 75 74 65 78 28 29 3b 0a  OsLeaveMutex();.
15a0: 20 20 7d 0a 20 20 68 20 3d 20 73 71 6c 69 74 65    }.  h = sqlite
15b0: 48 61 73 68 4e 6f 43 61 73 65 28 7a 2c 20 6e 29  HashNoCase(z, n)
15c0: 20 25 20 4b 45 59 5f 48 41 53 48 5f 53 49 5a 45   % KEY_HASH_SIZE
15d0: 3b 0a 20 20 66 6f 72 28 70 3d 61 70 48 61 73 68  ;.  for(p=apHash
15e0: 54 61 62 6c 65 5b 68 5d 3b 20 70 3b 20 70 3d 70  Table[h]; p; p=p
15f0: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
1600: 28 20 70 2d 3e 6c 65 6e 3d 3d 6e 20 26 26 20 73  ( p->len==n && s
1610: 71 6c 69 74 65 53 74 72 4e 49 43 6d 70 28 70 2d  qliteStrNICmp(p-
1620: 3e 7a 4e 61 6d 65 2c 20 7a 2c 20 6e 29 3d 3d 30  >zName, z, n)==0
1630: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
1640: 20 70 2d 3e 74 6f 6b 65 6e 54 79 70 65 3b 0a 20   p->tokenType;. 
1650: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
1660: 6e 20 54 4b 5f 49 44 3b 0a 7d 0a 0a 0a 2f 2a 0a  n TK_ID;.}.../*.
1670: 2a 2a 20 49 66 20 58 20 69 73 20 61 20 63 68 61  ** If X is a cha
1680: 72 61 63 74 65 72 20 74 68 61 74 20 63 61 6e 20  racter that can 
1690: 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 69 64  be used in an id
16a0: 65 6e 74 69 66 69 65 72 20 74 68 65 6e 0a 2a 2a  entifier then.**
16b0: 20 69 73 49 64 43 68 61 72 5b 58 5d 20 77 69 6c   isIdChar[X] wil
16c0: 6c 20 62 65 20 31 2e 20 20 4f 74 68 65 72 77 69  l be 1.  Otherwi
16d0: 73 65 20 69 73 49 64 43 68 61 72 5b 58 5d 20 77  se isIdChar[X] w
16e0: 69 6c 6c 20 62 65 20 30 2e 0a 2a 2a 0a 2a 2a 20  ill be 0..**.** 
16f0: 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e  In this implemen
1700: 74 61 74 69 6f 6e 2c 20 61 6e 20 69 64 65 6e 74  tation, an ident
1710: 69 66 69 65 72 20 63 61 6e 20 62 65 20 61 20 73  ifier can be a s
1720: 74 72 69 6e 67 20 6f 66 0a 2a 2a 20 61 6c 70 68  tring of.** alph
1730: 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72  abetic character
1740: 73 2c 20 64 69 67 69 74 73 2c 20 61 6e 64 20 22  s, digits, and "
1750: 5f 22 20 70 6c 75 73 20 61 6e 79 20 63 68 61 72  _" plus any char
1760: 61 63 74 65 72 0a 2a 2a 20 77 69 74 68 20 74 68  acter.** with th
1770: 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1780: 20 73 65 74 2e 20 20 54 68 65 20 6c 61 74 74 65   set.  The latte
1790: 72 20 72 75 6c 65 20 6d 65 61 6e 73 20 74 68 61  r rule means tha
17a0: 74 0a 2a 2a 20 61 6e 79 20 73 65 71 75 65 6e 63  t.** any sequenc
17b0: 65 20 6f 66 20 55 54 46 2d 38 20 63 68 61 72 61  e of UTF-8 chara
17c0: 63 74 65 72 73 20 6f 72 20 63 68 61 72 61 63 74  cters or charact
17d0: 65 72 73 20 74 61 6b 65 6e 20 66 72 6f 6d 0a 2a  ers taken from.*
17e0: 2a 20 61 6e 20 65 78 74 65 6e 64 65 64 20 49 53  * an extended IS
17f0: 4f 38 38 35 39 20 63 68 61 72 61 63 74 65 72 20  O8859 character 
1800: 73 65 74 20 63 61 6e 20 66 6f 72 6d 20 61 6e 20  set can form an 
1810: 69 64 65 6e 74 69 66 69 65 72 2e 0a 2a 2f 0a 73  identifier..*/.s
1820: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
1830: 20 69 73 49 64 43 68 61 72 5b 5d 20 3d 20 7b 0a   isIdChar[] = {.
1840: 2f 2a 20 78 30 20 78 31 20 78 32 20 78 33 20 78  /* x0 x1 x2 x3 x
1850: 34 20 78 35 20 78 36 20 78 37 20 78 38 20 78 39  4 x5 x6 x7 x8 x9
1860: 20 78 41 20 78 42 20 78 43 20 78 44 20 78 45 20   xA xB xC xD xE 
1870: 78 46 20 2a 2f 0a 20 20 20 20 30 2c 20 30 2c 20  xF */.    0, 0, 
1880: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
1890: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
18a0: 20 30 2c 20 30 2c 20 30 2c 20 20 2f 2a 20 30 78   0, 0, 0,  /* 0x
18b0: 20 2a 2f 0a 20 20 20 20 30 2c 20 30 2c 20 30 2c   */.    0, 0, 0,
18c0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
18d0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
18e0: 2c 20 30 2c 20 30 2c 20 20 2f 2a 20 31 78 20 2a  , 0, 0,  /* 1x *
18f0: 2f 0a 20 20 20 20 30 2c 20 30 2c 20 30 2c 20 30  /.    0, 0, 0, 0
1900: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
1910: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
1920: 30 2c 20 30 2c 20 20 2f 2a 20 32 78 20 2a 2f 0a  0, 0,  /* 2x */.
1930: 20 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20      1, 1, 1, 1, 
1940: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1950: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
1960: 20 30 2c 20 20 2f 2a 20 33 78 20 2a 2f 0a 20 20   0,  /* 3x */.  
1970: 20 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    0, 1, 1, 1, 1,
1980: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1990: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
19a0: 2c 20 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 20  ,  /* 4x */.    
19b0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
19c0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
19d0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
19e0: 20 2f 2a 20 35 78 20 2a 2f 0a 20 20 20 20 30 2c   /* 5x */.    0,
19f0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1a00: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1a10: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f  , 1, 1, 1, 1,  /
1a20: 2a 20 36 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31  * 6x */.    1, 1
1a30: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1a40: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20   1, 1, 1, 1, 0, 
1a50: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 2f 2a 20  0, 0, 0, 0,  /* 
1a60: 37 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31 2c 20  7x */.    1, 1, 
1a70: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1a80: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1a90: 20 31 2c 20 31 2c 20 31 2c 20 20 2f 2a 20 38 78   1, 1, 1,  /* 8x
1aa0: 20 2a 2f 0a 20 20 20 20 31 2c 20 31 2c 20 31 2c   */.    1, 1, 1,
1ab0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1ac0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1ad0: 2c 20 31 2c 20 31 2c 20 20 2f 2a 20 39 78 20 2a  , 1, 1,  /* 9x *
1ae0: 2f 0a 20 20 20 20 31 2c 20 31 2c 20 31 2c 20 31  /.    1, 1, 1, 1
1af0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1b00: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1b10: 31 2c 20 31 2c 20 20 2f 2a 20 41 78 20 2a 2f 0a  1, 1,  /* Ax */.
1b20: 20 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20      1, 1, 1, 1, 
1b30: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1b40: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1b50: 20 31 2c 20 20 2f 2a 20 42 78 20 2a 2f 0a 20 20   1,  /* Bx */.  
1b60: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
1b70: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1b80: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1b90: 2c 20 20 2f 2a 20 43 78 20 2a 2f 0a 20 20 20 20  ,  /* Cx */.    
1ba0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1bb0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1bc0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1bd0: 20 2f 2a 20 44 78 20 2a 2f 0a 20 20 20 20 31 2c   /* Dx */.    1,
1be0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1bf0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1c00: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f  , 1, 1, 1, 1,  /
1c10: 2a 20 45 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31  * Ex */.    1, 1
1c20: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1c30: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1c40: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f 2a 20  1, 1, 1, 1,  /* 
1c50: 46 78 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  Fx */.};.../*.**
1c60: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
1c70: 74 68 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 20  th of the token 
1c80: 74 68 61 74 20 62 65 67 69 6e 73 20 61 74 20 7a  that begins at z
1c90: 5b 30 5d 2e 20 20 52 65 74 75 72 6e 0a 2a 2a 20  [0].  Return.** 
1ca0: 2d 31 20 69 66 20 74 68 65 20 74 6f 6b 65 6e 20  -1 if the token 
1cb0: 69 73 20 28 6f 72 20 6d 69 67 68 74 20 62 65 29  is (or might be)
1cc0: 20 69 6e 63 6f 6d 70 6c 65 74 65 2e 20 20 53 74   incomplete.  St
1cd0: 6f 72 65 20 74 68 65 20 74 6f 6b 65 6e 0a 2a 2a  ore the token.**
1ce0: 20 74 79 70 65 20 69 6e 20 2a 74 6f 6b 65 6e 54   type in *tokenT
1cf0: 79 70 65 20 62 65 66 6f 72 65 20 72 65 74 75 72  ype before retur
1d00: 6e 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ning..*/.static 
1d10: 69 6e 74 20 73 71 6c 69 74 65 47 65 74 54 6f 6b  int sqliteGetTok
1d20: 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
1d30: 64 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a  d char *z, int *
1d40: 74 6f 6b 65 6e 54 79 70 65 29 7b 0a 20 20 69 6e  tokenType){.  in
1d50: 74 20 69 3b 0a 20 20 73 77 69 74 63 68 28 20 2a  t i;.  switch( *
1d60: 7a 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27 20  z ){.    case ' 
1d70: 27 3a 20 63 61 73 65 20 27 5c 74 27 3a 20 63 61  ': case '\t': ca
1d80: 73 65 20 27 5c 6e 27 3a 20 63 61 73 65 20 27 5c  se '\n': case '\
1d90: 66 27 3a 20 63 61 73 65 20 27 5c 72 27 3a 20 7b  f': case '\r': {
1da0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  .      for(i=1; 
1db0: 7a 5b 69 5d 20 26 26 20 69 73 73 70 61 63 65 28  z[i] && isspace(
1dc0: 7a 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20  z[i]); i++){}.  
1dd0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
1de0: 20 54 4b 5f 53 50 41 43 45 3b 0a 20 20 20 20 20   TK_SPACE;.     
1df0: 20 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d   return i;.    }
1e00: 0a 20 20 20 20 63 61 73 65 20 27 2d 27 3a 20 7b  .    case '-': {
1e10: 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d  .      if( z[1]=
1e20: 3d 30 20 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a  =0 ) return -1;.
1e30: 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d        if( z[1]==
1e40: 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 66  '-' ){.        f
1e50: 6f 72 28 69 3d 32 3b 20 7a 5b 69 5d 20 26 26 20  or(i=2; z[i] && 
1e60: 7a 5b 69 5d 21 3d 27 5c 6e 27 3b 20 69 2b 2b 29  z[i]!='\n'; i++)
1e70: 7b 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  {}.        *toke
1e80: 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f 4d 4d 45  nType = TK_COMME
1e90: 4e 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  NT;.        retu
1ea0: 72 6e 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn i;.      }.  
1eb0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
1ec0: 20 54 4b 5f 4d 49 4e 55 53 3b 0a 20 20 20 20 20   TK_MINUS;.     
1ed0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
1ee0: 0a 20 20 20 20 63 61 73 65 20 27 28 27 3a 20 7b  .    case '(': {
1ef0: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
1f00: 65 20 3d 20 54 4b 5f 4c 50 3b 0a 20 20 20 20 20  e = TK_LP;.     
1f10: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
1f20: 0a 20 20 20 20 63 61 73 65 20 27 29 27 3a 20 7b  .    case ')': {
1f30: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
1f40: 65 20 3d 20 54 4b 5f 52 50 3b 0a 20 20 20 20 20  e = TK_RP;.     
1f50: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
1f60: 0a 20 20 20 20 63 61 73 65 20 27 3b 27 3a 20 7b  .    case ';': {
1f70: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
1f80: 65 20 3d 20 54 4b 5f 53 45 4d 49 3b 0a 20 20 20  e = TK_SEMI;.   
1f90: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
1fa0: 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2b 27 3a   }.    case '+':
1fb0: 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54   {.      *tokenT
1fc0: 79 70 65 20 3d 20 54 4b 5f 50 4c 55 53 3b 0a 20  ype = TK_PLUS;. 
1fd0: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
1fe0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2a     }.    case '*
1ff0: 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65  ': {.      *toke
2000: 6e 54 79 70 65 20 3d 20 54 4b 5f 53 54 41 52 3b  nType = TK_STAR;
2010: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
2020: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
2030: 27 2f 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '/': {.      *to
2040: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 53 4c 41  kenType = TK_SLA
2050: 53 48 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  SH;.      return
2060: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61   1;.    }.    ca
2070: 73 65 20 27 25 27 3a 20 7b 0a 20 20 20 20 20 20  se '%': {.      
2080: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
2090: 52 45 4d 3b 0a 20 20 20 20 20 20 72 65 74 75 72  REM;.      retur
20a0: 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  n 1;.    }.    c
20b0: 61 73 65 20 27 3d 27 3a 20 7b 0a 20 20 20 20 20  ase '=': {.     
20c0: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
20d0: 5f 45 51 3b 0a 20 20 20 20 20 20 72 65 74 75 72  _EQ;.      retur
20e0: 6e 20 31 20 2b 20 28 7a 5b 31 5d 3d 3d 27 3d 27  n 1 + (z[1]=='='
20f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  );.    }.    cas
2100: 65 20 27 3c 27 3a 20 7b 0a 20 20 20 20 20 20 69  e '<': {.      i
2110: 66 28 20 7a 5b 31 5d 3d 3d 27 3d 27 20 29 7b 0a  f( z[1]=='=' ){.
2120: 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79          *tokenTy
2130: 70 65 20 3d 20 54 4b 5f 4c 45 3b 0a 20 20 20 20  pe = TK_LE;.    
2140: 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20      return 2;.  
2150: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b      }else if( z[
2160: 31 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20 20 20  1]=='>' ){.     
2170: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
2180: 54 4b 5f 4e 45 3b 0a 20 20 20 20 20 20 20 20 72  TK_NE;.        r
2190: 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d  eturn 2;.      }
21a0: 65 6c 73 65 20 69 66 28 20 7a 5b 31 5d 3d 3d 27  else if( z[1]=='
21b0: 3c 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74  <' ){.        *t
21c0: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 53  okenType = TK_LS
21d0: 48 49 46 54 3b 0a 20 20 20 20 20 20 20 20 72 65  HIFT;.        re
21e0: 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65  turn 2;.      }e
21f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  lse{.        *to
2200: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 54 3b  kenType = TK_LT;
2210: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2220: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
2230: 0a 20 20 20 20 63 61 73 65 20 27 3e 27 3a 20 7b  .    case '>': {
2240: 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d  .      if( z[1]=
2250: 3d 27 3d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='=' ){.        
2260: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
2270: 47 45 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  GE;.        retu
2280: 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73  rn 2;.      }els
2290: 65 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 3e 27 20  e if( z[1]=='>' 
22a0: 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  ){.        *toke
22b0: 6e 54 79 70 65 20 3d 20 54 4b 5f 52 53 48 49 46  nType = TK_RSHIF
22c0: 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  T;.        retur
22d0: 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n 2;.      }else
22e0: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
22f0: 54 79 70 65 20 3d 20 54 4b 5f 47 54 3b 0a 20 20  Type = TK_GT;.  
2300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
2310: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2320: 20 20 63 61 73 65 20 27 21 27 3a 20 7b 0a 20 20    case '!': {.  
2330: 20 20 20 20 69 66 28 20 7a 5b 31 5d 21 3d 27 3d      if( z[1]!='=
2340: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  ' ){.        *to
2350: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c  kenType = TK_ILL
2360: 45 47 41 4c 3b 0a 20 20 20 20 20 20 20 20 72 65  EGAL;.        re
2370: 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65  turn 2;.      }e
2380: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  lse{.        *to
2390: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4e 45 3b  kenType = TK_NE;
23a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
23b0: 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  2;.      }.    }
23c0: 0a 20 20 20 20 63 61 73 65 20 27 7c 27 3a 20 7b  .    case '|': {
23d0: 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 21  .      if( z[1]!
23e0: 3d 27 7c 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='|' ){.        
23f0: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
2400: 42 49 54 4f 52 3b 0a 20 20 20 20 20 20 20 20 72  BITOR;.        r
2410: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d  eturn 1;.      }
2420: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74  else{.        *t
2430: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f  okenType = TK_CO
2440: 4e 43 41 54 3b 0a 20 20 20 20 20 20 20 20 72 65  NCAT;.        re
2450: 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 0a  turn 2;.      }.
2460: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27      }.    case '
2470: 2c 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b  ,': {.      *tok
2480: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f 4d 4d  enType = TK_COMM
2490: 41 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  A;.      return 
24a0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  1;.    }.    cas
24b0: 65 20 27 26 27 3a 20 7b 0a 20 20 20 20 20 20 2a  e '&': {.      *
24c0: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 42  tokenType = TK_B
24d0: 49 54 41 4e 44 3b 0a 20 20 20 20 20 20 72 65 74  ITAND;.      ret
24e0: 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
24f0: 20 63 61 73 65 20 27 7e 27 3a 20 7b 0a 20 20 20   case '~': {.   
2500: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
2510: 54 4b 5f 42 49 54 4e 4f 54 3b 0a 20 20 20 20 20  TK_BITNOT;.     
2520: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
2530: 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a 20  .    case '\'': 
2540: 63 61 73 65 20 27 22 27 3a 20 7b 0a 20 20 20 20  case '"': {.    
2550: 20 20 69 6e 74 20 64 65 6c 69 6d 20 3d 20 7a 5b    int delim = z[
2560: 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  0];.      for(i=
2570: 31 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20  1; z[i]; i++){. 
2580: 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d         if( z[i]=
2590: 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20  =delim ){.      
25a0: 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3d 3d      if( z[i+1]==
25b0: 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20 20  delim ){.       
25c0: 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
25d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
25f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2600: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
2610: 20 20 69 66 28 20 7a 5b 69 5d 20 29 20 69 2b 2b    if( z[i] ) i++
2620: 3b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79  ;.      *tokenTy
2630: 70 65 20 3d 20 54 4b 5f 53 54 52 49 4e 47 3b 0a  pe = TK_STRING;.
2640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b 0a        return i;.
2650: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27      }.    case '
2660: 2e 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  .': {.      if( 
2670: 21 69 73 64 69 67 69 74 28 7a 5b 31 5d 29 20 29  !isdigit(z[1]) )
2680: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
2690: 54 79 70 65 20 3d 20 54 4b 5f 44 4f 54 3b 0a 20  Type = TK_DOT;. 
26a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
26b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
26c0: 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f  * Fall thru into
26d0: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 20 2a   the next case *
26e0: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  /.    }.    case
26f0: 20 27 30 27 3a 20 63 61 73 65 20 27 31 27 3a 20   '0': case '1': 
2700: 63 61 73 65 20 27 32 27 3a 20 63 61 73 65 20 27  case '2': case '
2710: 33 27 3a 20 63 61 73 65 20 27 34 27 3a 0a 20 20  3': case '4':.  
2720: 20 20 63 61 73 65 20 27 35 27 3a 20 63 61 73 65    case '5': case
2730: 20 27 36 27 3a 20 63 61 73 65 20 27 37 27 3a 20   '6': case '7': 
2740: 63 61 73 65 20 27 38 27 3a 20 63 61 73 65 20 27  case '8': case '
2750: 39 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b  9': {.      *tok
2760: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4e 54 45  enType = TK_INTE
2770: 47 45 52 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  GER;.      for(i
2780: 3d 31 3b 20 7a 5b 69 5d 20 26 26 20 69 73 64 69  =1; z[i] && isdi
2790: 67 69 74 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29 7b  git(z[i]); i++){
27a0: 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d  }.      if( z[i]
27b0: 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20  =='.' ){.       
27c0: 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77 68   i++;.        wh
27d0: 69 6c 65 28 20 7a 5b 69 5d 20 26 26 20 69 73 64  ile( z[i] && isd
27e0: 69 67 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69 2b  igit(z[i]) ){ i+
27f0: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f  +; }.        *to
2800: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f  kenType = TK_FLO
2810: 41 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  AT;.      }.    
2820: 20 20 69 66 28 20 28 7a 5b 69 5d 3d 3d 27 65 27    if( (z[i]=='e'
2830: 20 7c 7c 20 7a 5b 69 5d 3d 3d 27 45 27 29 20 26   || z[i]=='E') &
2840: 26 0a 20 20 20 20 20 20 20 20 20 20 20 28 20 69  &.           ( i
2850: 73 64 69 67 69 74 28 7a 5b 69 2b 31 5d 29 20 0a  sdigit(z[i+1]) .
2860: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
2870: 28 7a 5b 69 2b 31 5d 3d 3d 27 2b 27 20 7c 7c 20  (z[i+1]=='+' || 
2880: 7a 5b 69 2b 31 5d 3d 3d 27 2d 27 29 20 26 26 20  z[i+1]=='-') && 
2890: 69 73 64 69 67 69 74 28 7a 5b 69 2b 32 5d 29 29  isdigit(z[i+2]))
28a0: 0a 20 20 20 20 20 20 20 20 20 20 20 29 0a 20 20  .           ).  
28b0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
28c0: 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 77   += 2;.        w
28d0: 68 69 6c 65 28 20 7a 5b 69 5d 20 26 26 20 69 73  hile( z[i] && is
28e0: 64 69 67 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69  digit(z[i]) ){ i
28f0: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 2a 74  ++; }.        *t
2900: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c  okenType = TK_FL
2910: 4f 41 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  OAT;.      }else
2920: 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20 29   if( z[0]=='.' )
2930: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
2940: 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f 41 54 3b  Type = TK_FLOAT;
2950: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2960: 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20  eturn i;.    }. 
2970: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
2980: 20 20 20 20 69 66 28 20 21 69 73 49 64 43 68 61      if( !isIdCha
2990: 72 5b 2a 7a 5d 20 29 7b 0a 20 20 20 20 20 20 20  r[*z] ){.       
29a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
29b0: 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
29c0: 73 49 64 43 68 61 72 5b 7a 5b 69 5d 5d 3b 20 69  sIdChar[z[i]]; i
29d0: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f 6b  ++){}.      *tok
29e0: 65 6e 54 79 70 65 20 3d 20 73 71 6c 69 74 65 4b  enType = sqliteK
29f0: 65 79 77 6f 72 64 43 6f 64 65 28 28 63 68 61 72  eywordCode((char
2a00: 2a 29 7a 2c 20 69 29 3b 0a 20 20 20 20 20 20 72  *)z, i);.      r
2a10: 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20  eturn i;.    }. 
2a20: 20 7d 0a 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20   }.  *tokenType 
2a30: 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20  = TK_ILLEGAL;.  
2a40: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a  return 1;.}../*.
2a50: 2a 2a 20 52 75 6e 20 74 68 65 20 70 61 72 73 65  ** Run the parse
2a60: 72 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 53  r on the given S
2a70: 51 4c 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20  QL string.  The 
2a80: 70 61 72 73 65 72 20 73 74 72 75 63 74 75 72 65  parser structure
2a90: 20 69 73 0a 2a 2a 20 70 61 73 73 65 64 20 69 6e   is.** passed in
2aa0: 2e 20 20 41 6e 20 53 51 4c 49 54 45 5f 20 73 74  .  An SQLITE_ st
2ab0: 61 74 75 73 20 63 6f 64 65 20 69 73 20 72 65 74  atus code is ret
2ac0: 75 72 6e 65 64 2e 20 20 49 66 20 61 6e 20 65 72  urned.  If an er
2ad0: 72 6f 72 20 6f 63 63 75 72 73 0a 2a 2a 20 61 6e  ror occurs.** an
2ae0: 64 20 70 7a 45 72 72 4d 73 67 21 3d 4e 55 4c 4c  d pzErrMsg!=NULL
2af0: 20 74 68 65 6e 20 61 6e 20 65 72 72 6f 72 20 6d   then an error m
2b00: 65 73 73 61 67 65 20 6d 69 67 68 74 20 62 65 20  essage might be 
2b10: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 0a 2a 2a  written into .**
2b20: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
2b30: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61   from malloc() a
2b40: 6e 64 20 2a 70 7a 45 72 72 4d 73 67 20 6d 61 64  nd *pzErrMsg mad
2b50: 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  e to point to th
2b60: 61 74 0a 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73  at.** error mess
2b70: 61 67 65 2e 20 20 4f 72 20 6d 61 79 62 65 20 6e  age.  Or maybe n
2b80: 6f 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ot..*/.int sqlit
2b90: 65 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  eRunParser(Parse
2ba0: 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2bb0: 63 68 61 72 20 2a 7a 53 71 6c 2c 20 63 68 61 72  char *zSql, char
2bc0: 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20   **pzErrMsg){.  
2bd0: 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b 0a 20 20  int nErr = 0;.  
2be0: 69 6e 74 20 69 3b 0a 20 20 76 6f 69 64 20 2a 70  int i;.  void *p
2bf0: 45 6e 67 69 6e 65 3b 0a 20 20 69 6e 74 20 6f 6e  Engine;.  int on
2c00: 63 65 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ce = 1;.  sqlite
2c10: 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64   *db = pParse->d
2c20: 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69 64  b;.  extern void
2c30: 20 2a 73 71 6c 69 74 65 50 61 72 73 65 72 41 6c   *sqliteParserAl
2c40: 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 69 6e 74  loc(void*(*)(int
2c50: 29 29 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69  ));.  extern voi
2c60: 64 20 73 71 6c 69 74 65 50 61 72 73 65 72 46 72  d sqliteParserFr
2c70: 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
2c80: 29 28 76 6f 69 64 2a 29 29 3b 0a 20 20 65 78 74  )(void*));.  ext
2c90: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 50 61  ern int sqlitePa
2ca0: 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
2cb0: 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
2cc0: 0a 0a 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d  ..  db->flags &=
2cd0: 20 7e 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75   ~SQLITE_Interru
2ce0: 70 74 3b 0a 20 20 70 50 61 72 73 65 2d 3e 72 63  pt;.  pParse->rc
2cf0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2d00: 69 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 50  i = 0;.  sqliteP
2d10: 61 72 73 65 49 6e 66 6f 52 65 73 65 74 28 70 50  arseInfoReset(pP
2d20: 61 72 73 65 29 3b 0a 20 20 70 45 6e 67 69 6e 65  arse);.  pEngine
2d30: 20 3d 20 73 71 6c 69 74 65 50 61 72 73 65 72 41   = sqliteParserA
2d40: 6c 6c 6f 63 28 28 76 6f 69 64 2a 28 2a 29 28 69  lloc((void*(*)(i
2d50: 6e 74 29 29 6d 61 6c 6c 6f 63 29 3b 0a 20 20 69  nt))malloc);.  i
2d60: 66 28 20 70 45 6e 67 69 6e 65 3d 3d 30 20 29 7b  f( pEngine==0 ){
2d70: 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74  .    sqliteSetSt
2d80: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2d90: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20  out of memory", 
2da0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  0);.    return 1
2db0: 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 73  ;.  }.  while( s
2dc0: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
2dd0: 6c 65 64 3d 3d 30 20 26 26 20 6e 45 72 72 3d 3d  led==0 && nErr==
2de0: 30 20 26 26 20 69 3e 3d 30 20 26 26 20 7a 53 71  0 && i>=0 && zSq
2df0: 6c 5b 69 5d 21 3d 30 20 29 7b 0a 20 20 20 20 69  l[i]!=0 ){.    i
2e00: 6e 74 20 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20  nt tokenType;.  
2e10: 20 20 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e    .    if( (db->
2e20: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
2e30: 6e 74 65 72 72 75 70 74 29 21 3d 30 20 29 7b 0a  nterrupt)!=0 ){.
2e40: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63        pParse->rc
2e50: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
2e60: 55 50 54 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  UPT;.      sqlit
2e70: 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  eSetString(pzErr
2e80: 4d 73 67 2c 20 22 69 6e 74 65 72 72 75 70 74 22  Msg, "interrupt"
2e90: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 0);.      brea
2ea0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61  k;.    }.    pPa
2eb0: 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e  rse->sLastToken.
2ec0: 7a 20 3d 20 26 7a 53 71 6c 5b 69 5d 3b 0a 20 20  z = &zSql[i];.  
2ed0: 20 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54    pParse->sLastT
2ee0: 6f 6b 65 6e 2e 6e 20 3d 20 73 71 6c 69 74 65 47  oken.n = sqliteG
2ef0: 65 74 54 6f 6b 65 6e 28 28 75 6e 73 69 67 6e 65  etToken((unsigne
2f00: 64 20 63 68 61 72 2a 29 26 7a 53 71 6c 5b 69 5d  d char*)&zSql[i]
2f10: 2c 20 26 74 6f 6b 65 6e 54 79 70 65 29 3b 0a 20  , &tokenType);. 
2f20: 20 20 20 69 20 2b 3d 20 70 50 61 72 73 65 2d 3e     i += pParse->
2f30: 73 4c 61 73 74 54 6f 6b 65 6e 2e 6e 3b 0a 20 20  sLastToken.n;.  
2f40: 20 20 69 66 28 20 6f 6e 63 65 20 29 7b 0a 20 20    if( once ){.  
2f50: 20 20 20 20 70 50 61 72 73 65 2d 3e 73 46 69 72      pParse->sFir
2f60: 73 74 54 6f 6b 65 6e 20 3d 20 70 50 61 72 73 65  stToken = pParse
2f70: 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 3b 0a 20 20  ->sLastToken;.  
2f80: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
2f90: 20 20 7d 0a 20 20 20 20 73 77 69 74 63 68 28 20    }.    switch( 
2fa0: 74 6f 6b 65 6e 54 79 70 65 20 29 7b 0a 20 20 20  tokenType ){.   
2fb0: 20 20 20 63 61 73 65 20 54 4b 5f 53 50 41 43 45     case TK_SPACE
2fc0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f  :.      case TK_
2fd0: 43 4f 4d 4d 45 4e 54 3a 20 7b 0a 20 20 20 20 20  COMMENT: {.     
2fe0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2ff0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f  }.      case TK_
3000: 49 4c 4c 45 47 41 4c 3a 0a 20 20 20 20 20 20 20  ILLEGAL:.       
3010: 20 73 71 6c 69 74 65 53 65 74 4e 53 74 72 69 6e   sqliteSetNStrin
3020: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 72  g(pzErrMsg, "unr
3030: 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 3a  ecognized token:
3040: 20 5c 22 22 2c 20 2d 31 2c 20 0a 20 20 20 20 20   \"", -1, .     
3050: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 73 4c        pParse->sL
3060: 61 73 74 54 6f 6b 65 6e 2e 7a 2c 20 70 50 61 72  astToken.z, pPar
3070: 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e 6e  se->sLastToken.n
3080: 2c 20 22 5c 22 22 2c 20 31 2c 20 30 29 3b 0a 20  , "\"", 1, 0);. 
3090: 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20         nErr++;. 
30a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
30b0: 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20      default:.   
30c0: 20 20 20 20 20 73 71 6c 69 74 65 50 61 72 73 65       sqliteParse
30d0: 72 28 70 45 6e 67 69 6e 65 2c 20 74 6f 6b 65 6e  r(pEngine, token
30e0: 54 79 70 65 2c 20 70 50 61 72 73 65 2d 3e 73 4c  Type, pParse->sL
30f0: 61 73 74 54 6f 6b 65 6e 2c 20 70 50 61 72 73 65  astToken, pParse
3100: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
3110: 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 26  Parse->zErrMsg &
3120: 26 20 70 50 61 72 73 65 2d 3e 73 45 72 72 54 6f  & pParse->sErrTo
3130: 6b 65 6e 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20  ken.z ){.       
3140: 20 20 20 73 71 6c 69 74 65 53 65 74 4e 53 74 72     sqliteSetNStr
3150: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6e  ing(pzErrMsg, "n
3160: 65 61 72 20 5c 22 22 2c 20 2d 31 2c 20 0a 20 20  ear \"", -1, .  
3170: 20 20 20 20 20 20 20 20 20 20 20 70 50 61 72 73             pPars
3180: 65 2d 3e 73 45 72 72 54 6f 6b 65 6e 2e 7a 2c 20  e->sErrToken.z, 
3190: 70 50 61 72 73 65 2d 3e 73 45 72 72 54 6f 6b 65  pParse->sErrToke
31a0: 6e 2e 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  n.n,.           
31b0: 20 20 22 5c 22 3a 20 22 2c 20 2d 31 2c 0a 20 20    "\": ", -1,.  
31c0: 20 20 20 20 20 20 20 20 20 20 20 70 50 61 72 73             pPars
31d0: 65 2d 3e 7a 45 72 72 4d 73 67 2c 20 2d 31 2c 0a  e->zErrMsg, -1,.
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 29 3b               0);
31f0: 0a 20 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b  .          nErr+
3200: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  +;.          sql
3210: 69 74 65 46 72 65 65 28 70 50 61 72 73 65 2d 3e  iteFree(pParse->
3220: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
3230: 20 20 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72      pParse->zErr
3240: 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  Msg = 0;.       
3250: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 61 72 73   }else if( pPars
3260: 65 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  e->rc!=SQLITE_OK
3270: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
3280: 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a  liteSetString(pz
3290: 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 5f 65  ErrMsg, sqlite_e
32a0: 72 72 6f 72 5f 73 74 72 69 6e 67 28 70 50 61 72  rror_string(pPar
32b0: 73 65 2d 3e 72 63 29 2c 20 30 29 3b 0a 20 20 20  se->rc), 0);.   
32c0: 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20         nErr++;. 
32d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
32e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
32f0: 7d 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  }.  if( nErr==0 
3300: 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
3310: 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74  SQLITE_Interrupt
3320: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
3330: 74 65 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65  teParser(pEngine
3340: 2c 20 30 2c 20 70 50 61 72 73 65 2d 3e 73 4c 61  , 0, pParse->sLa
3350: 73 74 54 6f 6b 65 6e 2c 20 70 50 61 72 73 65 29  stToken, pParse)
3360: 3b 0a 20 20 20 20 69 66 28 20 70 50 61 72 73 65  ;.    if( pParse
3370: 2d 3e 7a 45 72 72 4d 73 67 20 26 26 20 70 50 61  ->zErrMsg && pPa
3380: 72 73 65 2d 3e 73 45 72 72 54 6f 6b 65 6e 2e 7a  rse->sErrToken.z
3390: 20 29 7b 0a 20 20 20 20 20 20 20 73 71 6c 69 74   ){.       sqlit
33a0: 65 53 65 74 4e 53 74 72 69 6e 67 28 70 7a 45 72  eSetNString(pzEr
33b0: 72 4d 73 67 2c 20 22 6e 65 61 72 20 5c 22 22 2c  rMsg, "near \"",
33c0: 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20   -1, .          
33d0: 70 50 61 72 73 65 2d 3e 73 45 72 72 54 6f 6b 65  pParse->sErrToke
33e0: 6e 2e 7a 2c 20 70 50 61 72 73 65 2d 3e 73 45 72  n.z, pParse->sEr
33f0: 72 54 6f 6b 65 6e 2e 6e 2c 0a 20 20 20 20 20 20  rToken.n,.      
3400: 20 20 20 20 22 5c 22 3a 20 22 2c 20 2d 31 2c 0a      "\": ", -1,.
3410: 20 20 20 20 20 20 20 20 20 20 70 50 61 72 73 65            pParse
3420: 2d 3e 7a 45 72 72 4d 73 67 2c 20 2d 31 2c 0a 20  ->zErrMsg, -1,. 
3430: 20 20 20 20 20 20 20 20 20 30 29 3b 0a 20 20 20           0);.   
3440: 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20 20      nErr++;.    
3450: 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 50     sqliteFree(pP
3460: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  arse->zErrMsg);.
3470: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 7a         pParse->z
3480: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
3490: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 50 61  }.  }.  sqlitePa
34a0: 72 73 65 72 46 72 65 65 28 70 45 6e 67 69 6e 65  rserFree(pEngine
34b0: 2c 20 66 72 65 65 29 3b 0a 20 20 69 66 28 20 70  , free);.  if( p
34c0: 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 29  Parse->zErrMsg )
34d0: 7b 0a 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d  {.    if( pzErrM
34e0: 73 67 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  sg ){.      sqli
34f0: 74 65 46 72 65 65 28 2a 70 7a 45 72 72 4d 73 67  teFree(*pzErrMsg
3500: 29 3b 0a 20 20 20 20 20 20 2a 70 7a 45 72 72 4d  );.      *pzErrM
3510: 73 67 20 3d 20 70 50 61 72 73 65 2d 3e 7a 45 72  sg = pParse->zEr
3520: 72 4d 73 67 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rMsg;.    }else{
3530: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65  .      sqliteFre
3540: 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73  e(pParse->zErrMs
3550: 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  g);.    }.    if
3560: 28 20 21 6e 45 72 72 20 29 20 6e 45 72 72 2b 2b  ( !nErr ) nErr++
3570: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 50 61 72  ;.  }.  if( pPar
3580: 73 65 2d 3e 70 56 64 62 65 20 29 7b 0a 20 20 20  se->pVdbe ){.   
3590: 20 73 71 6c 69 74 65 56 64 62 65 44 65 6c 65 74   sqliteVdbeDelet
35a0: 65 28 70 50 61 72 73 65 2d 3e 70 56 64 62 65 29  e(pParse->pVdbe)
35b0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 70 56  ;.    pParse->pV
35c0: 64 62 65 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  dbe = 0;.  }.  i
35d0: 66 28 20 70 50 61 72 73 65 2d 3e 70 4e 65 77 54  f( pParse->pNewT
35e0: 61 62 6c 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  able ){.    sqli
35f0: 74 65 44 65 6c 65 74 65 54 61 62 6c 65 28 70 50  teDeleteTable(pP
3600: 61 72 73 65 2d 3e 64 62 2c 20 70 50 61 72 73 65  arse->db, pParse
3610: 2d 3e 70 4e 65 77 54 61 62 6c 65 29 3b 0a 20 20  ->pNewTable);.  
3620: 20 20 70 50 61 72 73 65 2d 3e 70 4e 65 77 54 61    pParse->pNewTa
3630: 62 6c 65 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73  ble = 0;.  }.  s
3640: 71 6c 69 74 65 50 61 72 73 65 49 6e 66 6f 52 65  qliteParseInfoRe
3650: 73 65 74 28 70 50 61 72 73 65 29 3b 0a 20 20 69  set(pParse);.  i
3660: 66 28 20 6e 45 72 72 3e 30 20 26 26 20 70 50 61  f( nErr>0 && pPa
3670: 72 73 65 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  rse->rc==SQLITE_
3680: 4f 4b 20 29 7b 0a 20 20 20 20 70 50 61 72 73 65  OK ){.    pParse
3690: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52  ->rc = SQLITE_ER
36a0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
36b0: 6e 20 6e 45 72 72 3b 0a 7d 0a                    n nErr;.}.