/ Hex Artifact Content
Login

Artifact 5624d342601f616157ba266abccc1368a5afee70:


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 34 30 20 32  enize.c,v 1.40 2
0250: 30 30 32 2f 30 33 2f 32 34 20 31 33 3a 31 33 3a  002/03/24 13:13:
0260: 32 39 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a  29 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 41 53 45 22 2c 20 20 20  ,.  { "CASE",   
0670: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0680: 5f 43 41 53 45 2c 20 20 20 20 20 20 20 20 20 20  _CASE,          
0690: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 43 48 45     0 },.  { "CHE
06a0: 43 4b 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  CK",            
06b0: 20 30 2c 20 54 4b 5f 43 48 45 43 4b 2c 20 20 20   0, TK_CHECK,   
06c0: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
06d0: 7b 20 22 43 4c 55 53 54 45 52 22 2c 20 20 20 20  { "CLUSTER",    
06e0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 43 4c 55         0, TK_CLU
06f0: 53 54 45 52 2c 20 20 20 20 20 20 20 20 20 20 30  STER,          0
0700: 20 7d 2c 0a 20 20 7b 20 22 43 4f 4d 4d 49 54 22   },.  { "COMMIT"
0710: 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20  ,            0, 
0720: 54 4b 5f 43 4f 4d 4d 49 54 2c 20 20 20 20 20 20  TK_COMMIT,      
0730: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 43       0 },.  { "C
0740: 4f 4e 46 4c 49 43 54 22 2c 20 20 20 20 20 20 20  ONFLICT",       
0750: 20 20 20 30 2c 20 54 4b 5f 43 4f 4e 46 4c 49 43     0, TK_CONFLIC
0760: 54 2c 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a  T,         0 },.
0770: 20 20 7b 20 22 43 4f 4e 53 54 52 41 49 4e 54 22    { "CONSTRAINT"
0780: 2c 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 43  ,        0, TK_C
0790: 4f 4e 53 54 52 41 49 4e 54 2c 20 20 20 20 20 20  ONSTRAINT,      
07a0: 20 30 20 7d 2c 0a 20 20 7b 20 22 43 4f 50 59 22   0 },.  { "COPY"
07b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ,              0
07c0: 2c 20 54 4b 5f 43 4f 50 59 2c 20 20 20 20 20 20  , TK_COPY,      
07d0: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
07e0: 22 43 52 45 41 54 45 22 2c 20 20 20 20 20 20 20  "CREATE",       
07f0: 20 20 20 20 20 30 2c 20 54 4b 5f 43 52 45 41 54       0, TK_CREAT
0800: 45 2c 20 20 20 20 20 20 20 20 20 20 20 30 20 7d  E,           0 }
0810: 2c 0a 20 20 7b 20 22 44 45 46 41 55 4c 54 22 2c  ,.  { "DEFAULT",
0820: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0830: 5f 44 45 46 41 55 4c 54 2c 20 20 20 20 20 20 20  _DEFAULT,       
0840: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 44 45 4c     0 },.  { "DEL
0850: 45 54 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  ETE",           
0860: 20 30 2c 20 54 4b 5f 44 45 4c 45 54 45 2c 20 20   0, TK_DELETE,  
0870: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0880: 7b 20 22 44 45 4c 49 4d 49 54 45 52 53 22 2c 20  { "DELIMITERS", 
0890: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 44 45 4c         0, TK_DEL
08a0: 49 4d 49 54 45 52 53 2c 20 20 20 20 20 20 20 30  IMITERS,       0
08b0: 20 7d 2c 0a 20 20 7b 20 22 44 45 53 43 22 2c 20   },.  { "DESC", 
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
08d0: 54 4b 5f 44 45 53 43 2c 20 20 20 20 20 20 20 20  TK_DESC,        
08e0: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 44       0 },.  { "D
08f0: 49 53 54 49 4e 43 54 22 2c 20 20 20 20 20 20 20  ISTINCT",       
0900: 20 20 20 30 2c 20 54 4b 5f 44 49 53 54 49 4e 43     0, TK_DISTINC
0910: 54 2c 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a  T,         0 },.
0920: 20 20 7b 20 22 44 52 4f 50 22 2c 20 20 20 20 20    { "DROP",     
0930: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 44           0, TK_D
0940: 52 4f 50 2c 20 20 20 20 20 20 20 20 20 20 20 20  ROP,            
0950: 20 30 20 7d 2c 0a 20 20 7b 20 22 45 4e 44 22 2c   0 },.  { "END",
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
0970: 2c 20 54 4b 5f 45 4e 44 2c 20 20 20 20 20 20 20  , TK_END,       
0980: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0990: 22 45 4c 53 45 22 2c 20 20 20 20 20 20 20 20 20  "ELSE",         
09a0: 20 20 20 20 20 30 2c 20 54 4b 5f 45 4c 53 45 2c       0, TK_ELSE,
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d               0 }
09c0: 2c 0a 20 20 7b 20 22 45 58 43 45 50 54 22 2c 20  ,.  { "EXCEPT", 
09d0: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
09e0: 5f 45 58 43 45 50 54 2c 20 20 20 20 20 20 20 20  _EXCEPT,        
09f0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 45 58 50     0 },.  { "EXP
0a00: 4c 41 49 4e 22 2c 20 20 20 20 20 20 20 20 20 20  LAIN",          
0a10: 20 30 2c 20 54 4b 5f 45 58 50 4c 41 49 4e 2c 20   0, TK_EXPLAIN, 
0a20: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0a30: 7b 20 22 46 41 49 4c 22 2c 20 20 20 20 20 20 20  { "FAIL",       
0a40: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 46 41 49         0, TK_FAI
0a50: 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  L,             0
0a60: 20 7d 2c 0a 20 20 7b 20 22 46 52 4f 4d 22 2c 20   },.  { "FROM", 
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
0a80: 54 4b 5f 46 52 4f 4d 2c 20 20 20 20 20 20 20 20  TK_FROM,        
0a90: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 47       0 },.  { "G
0aa0: 4c 4f 42 22 2c 20 20 20 20 20 20 20 20 20 20 20  LOB",           
0ab0: 20 20 20 30 2c 20 54 4b 5f 47 4c 4f 42 2c 20 20     0, TK_GLOB,  
0ac0: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0ad0: 20 20 7b 20 22 47 52 4f 55 50 22 2c 20 20 20 20    { "GROUP",    
0ae0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 47           0, TK_G
0af0: 52 4f 55 50 2c 20 20 20 20 20 20 20 20 20 20 20  ROUP,           
0b00: 20 30 20 7d 2c 0a 20 20 7b 20 22 48 41 56 49 4e   0 },.  { "HAVIN
0b10: 47 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  G",            0
0b20: 2c 20 54 4b 5f 48 41 56 49 4e 47 2c 20 20 20 20  , TK_HAVING,    
0b30: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0b40: 22 49 47 4e 4f 52 45 22 2c 20 20 20 20 20 20 20  "IGNORE",       
0b50: 20 20 20 20 20 30 2c 20 54 4b 5f 49 47 4e 4f 52       0, TK_IGNOR
0b60: 45 2c 20 20 20 20 20 20 20 20 20 20 20 30 20 7d  E,           0 }
0b70: 2c 0a 20 20 7b 20 22 49 4e 22 2c 20 20 20 20 20  ,.  { "IN",     
0b80: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0b90: 5f 49 4e 2c 20 20 20 20 20 20 20 20 20 20 20 20  _IN,            
0ba0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 49 4e 44     0 },.  { "IND
0bb0: 45 58 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  EX",            
0bc0: 20 30 2c 20 54 4b 5f 49 4e 44 45 58 2c 20 20 20   0, TK_INDEX,   
0bd0: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0be0: 7b 20 22 49 4e 53 45 52 54 22 2c 20 20 20 20 20  { "INSERT",     
0bf0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 49 4e 53         0, TK_INS
0c00: 45 52 54 2c 20 20 20 20 20 20 20 20 20 20 20 30  ERT,           0
0c10: 20 7d 2c 0a 20 20 7b 20 22 49 4e 54 45 52 53 45   },.  { "INTERSE
0c20: 43 54 22 2c 20 20 20 20 20 20 20 20 20 30 2c 20  CT",         0, 
0c30: 54 4b 5f 49 4e 54 45 52 53 45 43 54 2c 20 20 20  TK_INTERSECT,   
0c40: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 49       0 },.  { "I
0c50: 4e 54 4f 22 2c 20 20 20 20 20 20 20 20 20 20 20  NTO",           
0c60: 20 20 20 30 2c 20 54 4b 5f 49 4e 54 4f 2c 20 20     0, TK_INTO,  
0c70: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
0c80: 20 20 7b 20 22 49 53 22 2c 20 20 20 20 20 20 20    { "IS",       
0c90: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 49           0, TK_I
0ca0: 53 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  S,              
0cb0: 20 30 20 7d 2c 0a 20 20 7b 20 22 49 53 4e 55 4c   0 },.  { "ISNUL
0cc0: 4c 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  L",            0
0cd0: 2c 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 20 20 20  , TK_ISNULL,    
0ce0: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0cf0: 22 4b 45 59 22 2c 20 20 20 20 20 20 20 20 20 20  "KEY",          
0d00: 20 20 20 20 20 30 2c 20 54 4b 5f 4b 45 59 2c 20       0, TK_KEY, 
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 4c 49 4b 45 22 2c 20 20 20  ,.  { "LIKE",   
0d30: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0d40: 5f 4c 49 4b 45 2c 20 20 20 20 20 20 20 20 20 20  _LIKE,          
0d50: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4c 49 4d     0 },.  { "LIM
0d60: 49 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  IT",            
0d70: 20 30 2c 20 54 4b 5f 4c 49 4d 49 54 2c 20 20 20   0, TK_LIMIT,   
0d80: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0d90: 7b 20 22 4e 4f 54 22 2c 20 20 20 20 20 20 20 20  { "NOT",        
0da0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 4e 4f 54         0, TK_NOT
0db0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ,              0
0dc0: 20 7d 2c 0a 20 20 7b 20 22 4e 4f 54 4e 55 4c 4c   },.  { "NOTNULL
0dd0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 30 2c 20  ",           0, 
0de0: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 20 20 20 20  TK_NOTNULL,     
0df0: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4e       0 },.  { "N
0e00: 55 4c 4c 22 2c 20 20 20 20 20 20 20 20 20 20 20  ULL",           
0e10: 20 20 20 30 2c 20 54 4b 5f 4e 55 4c 4c 2c 20 20     0, TK_NULL,  
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 46 46 53 45 54 22 2c 20 20 20    { "OFFSET",   
0e40: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 4f           0, TK_O
0e50: 46 46 53 45 54 2c 20 20 20 20 20 20 20 20 20 20  FFSET,          
0e60: 20 30 20 7d 2c 0a 20 20 7b 20 22 4f 4e 22 2c 20   0 },.  { "ON", 
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
0e80: 2c 20 54 4b 5f 4f 4e 2c 20 20 20 20 20 20 20 20  , TK_ON,        
0e90: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
0ea0: 22 4f 52 22 2c 20 20 20 20 20 20 20 20 20 20 20  "OR",           
0eb0: 20 20 20 20 20 30 2c 20 54 4b 5f 4f 52 2c 20 20       0, TK_OR,  
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d               0 }
0ed0: 2c 0a 20 20 7b 20 22 4f 52 44 45 52 22 2c 20 20  ,.  { "ORDER",  
0ee0: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
0ef0: 5f 4f 52 44 45 52 2c 20 20 20 20 20 20 20 20 20  _ORDER,         
0f00: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 50 52 41     0 },.  { "PRA
0f10: 47 4d 41 22 2c 20 20 20 20 20 20 20 20 20 20 20  GMA",           
0f20: 20 30 2c 20 54 4b 5f 50 52 41 47 4d 41 2c 20 20   0, TK_PRAGMA,  
0f30: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
0f40: 7b 20 22 50 52 49 4d 41 52 59 22 2c 20 20 20 20  { "PRIMARY",    
0f50: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 50 52 49         0, TK_PRI
0f60: 4d 41 52 59 2c 20 20 20 20 20 20 20 20 20 20 30  MARY,          0
0f70: 20 7d 2c 0a 20 20 7b 20 22 52 45 50 4c 41 43 45   },.  { "REPLACE
0f80: 22 2c 20 20 20 20 20 20 20 20 20 20 20 30 2c 20  ",           0, 
0f90: 54 4b 5f 52 45 50 4c 41 43 45 2c 20 20 20 20 20  TK_REPLACE,     
0fa0: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 52       0 },.  { "R
0fb0: 4f 4c 4c 42 41 43 4b 22 2c 20 20 20 20 20 20 20  OLLBACK",       
0fc0: 20 20 20 30 2c 20 54 4b 5f 52 4f 4c 4c 42 41 43     0, TK_ROLLBAC
0fd0: 4b 2c 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a  K,         0 },.
0fe0: 20 20 7b 20 22 53 45 4c 45 43 54 22 2c 20 20 20    { "SELECT",   
0ff0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 53           0, TK_S
1000: 45 4c 45 43 54 2c 20 20 20 20 20 20 20 20 20 20  ELECT,          
1010: 20 30 20 7d 2c 0a 20 20 7b 20 22 53 45 54 22 2c   0 },.  { "SET",
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
1030: 2c 20 54 4b 5f 53 45 54 2c 20 20 20 20 20 20 20  , TK_SET,       
1040: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
1050: 22 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20  "TABLE",        
1060: 20 20 20 20 20 30 2c 20 54 4b 5f 54 41 42 4c 45       0, TK_TABLE
1070: 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d  ,            0 }
1080: 2c 0a 20 20 7b 20 22 54 45 4d 50 22 2c 20 20 20  ,.  { "TEMP",   
1090: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
10a0: 5f 54 45 4d 50 2c 20 20 20 20 20 20 20 20 20 20  _TEMP,          
10b0: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 54 45 4d     0 },.  { "TEM
10c0: 50 4f 52 41 52 59 22 2c 20 20 20 20 20 20 20 20  PORARY",        
10d0: 20 30 2c 20 54 4b 5f 54 45 4d 50 2c 20 20 20 20   0, TK_TEMP,    
10e0: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
10f0: 7b 20 22 54 48 45 4e 22 2c 20 20 20 20 20 20 20  { "THEN",       
1100: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 54 48 45         0, TK_THE
1110: 4e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  N,             0
1120: 20 7d 2c 0a 20 20 7b 20 22 54 52 41 4e 53 41 43   },.  { "TRANSAC
1130: 54 49 4f 4e 22 2c 20 20 20 20 20 20 20 30 2c 20  TION",       0, 
1140: 54 4b 5f 54 52 41 4e 53 41 43 54 49 4f 4e 2c 20  TK_TRANSACTION, 
1150: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 55       0 },.  { "U
1160: 4e 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20  NION",          
1170: 20 20 20 30 2c 20 54 4b 5f 55 4e 49 4f 4e 2c 20     0, TK_UNION, 
1180: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
1190: 20 20 7b 20 22 55 4e 49 51 55 45 22 2c 20 20 20    { "UNIQUE",   
11a0: 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 55           0, TK_U
11b0: 4e 49 51 55 45 2c 20 20 20 20 20 20 20 20 20 20  NIQUE,          
11c0: 20 30 20 7d 2c 0a 20 20 7b 20 22 55 50 44 41 54   0 },.  { "UPDAT
11d0: 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30  E",            0
11e0: 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 20 20 20  , TK_UPDATE,    
11f0: 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20         0 },.  { 
1200: 22 55 53 49 4e 47 22 2c 20 20 20 20 20 20 20 20  "USING",        
1210: 20 20 20 20 20 30 2c 20 54 4b 5f 55 53 49 4e 47       0, TK_USING
1220: 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d  ,            0 }
1230: 2c 0a 20 20 7b 20 22 56 41 43 55 55 4d 22 2c 20  ,.  { "VACUUM", 
1240: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b             0, TK
1250: 5f 56 41 43 55 55 4d 2c 20 20 20 20 20 20 20 20  _VACUUM,        
1260: 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 56 41 4c     0 },.  { "VAL
1270: 55 45 53 22 2c 20 20 20 20 20 20 20 20 20 20 20  UES",           
1280: 20 30 2c 20 54 4b 5f 56 41 4c 55 45 53 2c 20 20   0, TK_VALUES,  
1290: 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20           0 },.  
12a0: 7b 20 22 56 49 45 57 22 2c 20 20 20 20 20 20 20  { "VIEW",       
12b0: 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 56 49 45         0, TK_VIE
12c0: 57 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  W,             0
12d0: 20 7d 2c 0a 20 20 7b 20 22 57 48 45 4e 22 2c 20   },.  { "WHEN", 
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
12f0: 54 4b 5f 57 48 45 4e 2c 20 20 20 20 20 20 20 20  TK_WHEN,        
1300: 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 57       0 },.  { "W
1310: 48 45 52 45 22 2c 20 20 20 20 20 20 20 20 20 20  HERE",          
1320: 20 20 20 30 2c 20 54 4b 5f 57 48 45 52 45 2c 20     0, TK_WHERE, 
1330: 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a             0 },.
1340: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  };../*.** This i
1350: 73 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65  s the hash table
1360: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4b 45 59 5f  .*/.#define KEY_
1370: 48 41 53 48 5f 53 49 5a 45 20 37 31 0a 73 74 61  HASH_SIZE 71.sta
1380: 74 69 63 20 4b 65 79 77 6f 72 64 20 2a 61 70 48  tic Keyword *apH
1390: 61 73 68 54 61 62 6c 65 5b 4b 45 59 5f 48 41 53  ashTable[KEY_HAS
13a0: 48 5f 53 49 5a 45 5d 3b 0a 0a 0a 2f 2a 0a 2a 2a  H_SIZE];.../*.**
13b0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6c   This function l
13c0: 6f 6f 6b 73 20 75 70 20 61 6e 20 69 64 65 6e 74  ooks up an ident
13d0: 69 66 69 65 72 20 74 6f 20 64 65 74 65 72 6d 69  ifier to determi
13e0: 6e 65 20 69 66 20 69 74 20 69 73 20 61 0a 2a 2a  ne if it is a.**
13f0: 20 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 69 74   keyword.  If it
1400: 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2c 20 74   is a keyword, t
1410: 68 65 20 74 6f 6b 65 6e 20 63 6f 64 65 20 6f 66  he token code of
1420: 20 74 68 61 74 20 6b 65 79 77 6f 72 64 20 69 73   that keyword is
1430: 20 0a 2a 2a 20 72 65 74 75 72 6e 65 64 2e 20 20   .** returned.  
1440: 49 66 20 74 68 65 20 69 6e 70 75 74 20 69 73 20  If the input is 
1450: 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 2c 20 54  not a keyword, T
1460: 4b 5f 49 44 20 69 73 20 72 65 74 75 72 6e 65 64  K_ID is returned
1470: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 4b  ..*/.int sqliteK
1480: 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
1490: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
14a0: 7b 0a 20 20 69 6e 74 20 68 3b 0a 20 20 4b 65 79  {.  int h;.  Key
14b0: 77 6f 72 64 20 2a 70 3b 0a 20 20 69 66 28 20 61  word *p;.  if( a
14c0: 4b 65 79 77 6f 72 64 54 61 62 6c 65 5b 30 5d 2e  KeywordTable[0].
14d0: 6c 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  len==0 ){.    /*
14e0: 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   Initialize the 
14f0: 6b 65 79 77 6f 72 64 20 68 61 73 68 20 74 61 62  keyword hash tab
1500: 6c 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  le */.    sqlite
1510: 4f 73 45 6e 74 65 72 4d 75 74 65 78 28 29 3b 0a  OsEnterMutex();.
1520: 20 20 20 20 69 66 28 20 61 4b 65 79 77 6f 72 64      if( aKeyword
1530: 54 61 62 6c 65 5b 30 5d 2e 6c 65 6e 3d 3d 30 20  Table[0].len==0 
1540: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  ){.      int i;.
1550: 20 20 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20        int n;.   
1560: 20 20 20 6e 20 3d 20 73 69 7a 65 6f 66 28 61 4b     n = sizeof(aK
1570: 65 79 77 6f 72 64 54 61 62 6c 65 29 2f 73 69 7a  eywordTable)/siz
1580: 65 6f 66 28 61 4b 65 79 77 6f 72 64 54 61 62 6c  eof(aKeywordTabl
1590: 65 5b 30 5d 29 3b 0a 20 20 20 20 20 20 66 6f 72  e[0]);.      for
15a0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
15b0: 0a 20 20 20 20 20 20 20 20 61 4b 65 79 77 6f 72  .        aKeywor
15c0: 64 54 61 62 6c 65 5b 69 5d 2e 6c 65 6e 20 3d 20  dTable[i].len = 
15d0: 73 74 72 6c 65 6e 28 61 4b 65 79 77 6f 72 64 54  strlen(aKeywordT
15e0: 61 62 6c 65 5b 69 5d 2e 7a 4e 61 6d 65 29 3b 0a  able[i].zName);.
15f0: 20 20 20 20 20 20 20 20 68 20 3d 20 73 71 6c 69          h = sqli
1600: 74 65 48 61 73 68 4e 6f 43 61 73 65 28 61 4b 65  teHashNoCase(aKe
1610: 79 77 6f 72 64 54 61 62 6c 65 5b 69 5d 2e 7a 4e  ywordTable[i].zN
1620: 61 6d 65 2c 20 61 4b 65 79 77 6f 72 64 54 61 62  ame, aKeywordTab
1630: 6c 65 5b 69 5d 2e 6c 65 6e 29 3b 0a 20 20 20 20  le[i].len);.    
1640: 20 20 20 20 68 20 25 3d 20 4b 45 59 5f 48 41 53      h %= KEY_HAS
1650: 48 5f 53 49 5a 45 3b 0a 20 20 20 20 20 20 20 20  H_SIZE;.        
1660: 61 4b 65 79 77 6f 72 64 54 61 62 6c 65 5b 69 5d  aKeywordTable[i]
1670: 2e 70 4e 65 78 74 20 3d 20 61 70 48 61 73 68 54  .pNext = apHashT
1680: 61 62 6c 65 5b 68 5d 3b 0a 20 20 20 20 20 20 20  able[h];.       
1690: 20 61 70 48 61 73 68 54 61 62 6c 65 5b 68 5d 20   apHashTable[h] 
16a0: 3d 20 26 61 4b 65 79 77 6f 72 64 54 61 62 6c 65  = &aKeywordTable
16b0: 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [i];.      }.   
16c0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 4f 73 4c   }.    sqliteOsL
16d0: 65 61 76 65 4d 75 74 65 78 28 29 3b 0a 20 20 7d  eaveMutex();.  }
16e0: 0a 20 20 68 20 3d 20 73 71 6c 69 74 65 48 61 73  .  h = sqliteHas
16f0: 68 4e 6f 43 61 73 65 28 7a 2c 20 6e 29 20 25 20  hNoCase(z, n) % 
1700: 4b 45 59 5f 48 41 53 48 5f 53 49 5a 45 3b 0a 20  KEY_HASH_SIZE;. 
1710: 20 66 6f 72 28 70 3d 61 70 48 61 73 68 54 61 62   for(p=apHashTab
1720: 6c 65 5b 68 5d 3b 20 70 3b 20 70 3d 70 2d 3e 70  le[h]; p; p=p->p
1730: 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
1740: 2d 3e 6c 65 6e 3d 3d 6e 20 26 26 20 73 71 6c 69  ->len==n && sqli
1750: 74 65 53 74 72 4e 49 43 6d 70 28 70 2d 3e 7a 4e  teStrNICmp(p->zN
1760: 61 6d 65 2c 20 7a 2c 20 6e 29 3d 3d 30 20 29 7b  ame, z, n)==0 ){
1770: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 2d  .      return p-
1780: 3e 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20 20 20  >tokenType;.    
1790: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  }.  }.  return T
17a0: 4b 5f 49 44 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  K_ID;.}.../*.** 
17b0: 49 66 20 58 20 69 73 20 61 20 63 68 61 72 61 63  If X is a charac
17c0: 74 65 72 20 74 68 61 74 20 63 61 6e 20 62 65 20  ter that can be 
17d0: 75 73 65 64 20 69 6e 20 61 6e 20 69 64 65 6e 74  used in an ident
17e0: 69 66 69 65 72 20 74 68 65 6e 0a 2a 2a 20 69 73  ifier then.** is
17f0: 49 64 43 68 61 72 5b 58 5d 20 77 69 6c 6c 20 62  IdChar[X] will b
1800: 65 20 31 2e 20 20 4f 74 68 65 72 77 69 73 65 20  e 1.  Otherwise 
1810: 69 73 49 64 43 68 61 72 5b 58 5d 20 77 69 6c 6c  isIdChar[X] will
1820: 20 62 65 20 30 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20   be 0..**.** In 
1830: 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74  this implementat
1840: 69 6f 6e 2c 20 61 6e 20 69 64 65 6e 74 69 66 69  ion, an identifi
1850: 65 72 20 63 61 6e 20 62 65 20 61 20 73 74 72 69  er can be a stri
1860: 6e 67 20 6f 66 0a 2a 2a 20 61 6c 70 68 61 62 65  ng of.** alphabe
1870: 74 69 63 20 63 68 61 72 61 63 74 65 72 73 2c 20  tic characters, 
1880: 64 69 67 69 74 73 2c 20 61 6e 64 20 22 5f 22 20  digits, and "_" 
1890: 70 6c 75 73 20 61 6e 79 20 63 68 61 72 61 63 74  plus any charact
18a0: 65 72 0a 2a 2a 20 77 69 74 68 20 74 68 65 20 68  er.** with the h
18b0: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65  igh-order bit se
18c0: 74 2e 20 20 54 68 65 20 6c 61 74 74 65 72 20 72  t.  The latter r
18d0: 75 6c 65 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ule means that.*
18e0: 2a 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f  * any sequence o
18f0: 66 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  f UTF-8 characte
1900: 72 73 20 6f 72 20 63 68 61 72 61 63 74 65 72 73  rs or characters
1910: 20 74 61 6b 65 6e 20 66 72 6f 6d 0a 2a 2a 20 61   taken from.** a
1920: 6e 20 65 78 74 65 6e 64 65 64 20 49 53 4f 38 38  n extended ISO88
1930: 35 39 20 63 68 61 72 61 63 74 65 72 20 73 65 74  59 character set
1940: 20 63 61 6e 20 66 6f 72 6d 20 61 6e 20 69 64 65   can form an ide
1950: 6e 74 69 66 69 65 72 2e 0a 2a 2f 0a 73 74 61 74  ntifier..*/.stat
1960: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 69 73  ic const char is
1970: 49 64 43 68 61 72 5b 5d 20 3d 20 7b 0a 2f 2a 20  IdChar[] = {./* 
1980: 78 30 20 78 31 20 78 32 20 78 33 20 78 34 20 78  x0 x1 x2 x3 x4 x
1990: 35 20 78 36 20 78 37 20 78 38 20 78 39 20 78 41  5 x6 x7 x8 x9 xA
19a0: 20 78 42 20 78 43 20 78 44 20 78 45 20 78 46 20   xB xC xD xE xF 
19b0: 2a 2f 0a 20 20 20 20 30 2c 20 30 2c 20 30 2c 20  */.    0, 0, 0, 
19c0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
19d0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
19e0: 20 30 2c 20 30 2c 20 20 2f 2a 20 30 78 20 2a 2f   0, 0,  /* 0x */
19f0: 0a 20 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  .    0, 0, 0, 0,
1a00: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
1a10: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
1a20: 2c 20 30 2c 20 20 2f 2a 20 31 78 20 2a 2f 0a 20  , 0,  /* 1x */. 
1a30: 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30     0, 0, 0, 0, 0
1a40: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
1a50: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
1a60: 30 2c 20 20 2f 2a 20 32 78 20 2a 2f 0a 20 20 20  0,  /* 2x */.   
1a70: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1a80: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30  1, 1, 1, 1, 1, 0
1a90: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
1aa0: 20 20 2f 2a 20 33 78 20 2a 2f 0a 20 20 20 20 30    /* 3x */.    0
1ab0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1ac0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1ad0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
1ae0: 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 20 31 2c 20  /* 4x */.    1, 
1af0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1b00: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c  , 1, 1, 1, 1, 0,
1b10: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 2f 2a   0, 0, 0, 1,  /*
1b20: 20 35 78 20 2a 2f 0a 20 20 20 20 30 2c 20 31 2c   5x */.    0, 1,
1b30: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1b40: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1b50: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f 2a 20 36  , 1, 1, 1,  /* 6
1b60: 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31 2c 20 31  x */.    1, 1, 1
1b70: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1b80: 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c 20   1, 1, 1, 0, 0, 
1b90: 30 2c 20 30 2c 20 30 2c 20 20 2f 2a 20 37 78 20  0, 0, 0,  /* 7x 
1ba0: 2a 2f 0a 20 20 20 20 31 2c 20 31 2c 20 31 2c 20  */.    1, 1, 1, 
1bb0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1bc0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1bd0: 20 31 2c 20 31 2c 20 20 2f 2a 20 38 78 20 2a 2f   1, 1,  /* 8x */
1be0: 0a 20 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  .    1, 1, 1, 1,
1bf0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1c00: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1c10: 2c 20 31 2c 20 20 2f 2a 20 39 78 20 2a 2f 0a 20  , 1,  /* 9x */. 
1c20: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
1c30: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1c40: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1c50: 31 2c 20 20 2f 2a 20 41 78 20 2a 2f 0a 20 20 20  1,  /* Ax */.   
1c60: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1c70: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1c80: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1c90: 20 20 2f 2a 20 42 78 20 2a 2f 0a 20 20 20 20 31    /* Bx */.    1
1ca0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1cb0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1cc0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
1cd0: 2f 2a 20 43 78 20 2a 2f 0a 20 20 20 20 31 2c 20  /* Cx */.    1, 
1ce0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1cf0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1d00: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f 2a   1, 1, 1, 1,  /*
1d10: 20 44 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31 2c   Dx */.    1, 1,
1d20: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1d30: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1d40: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f 2a 20 45  , 1, 1, 1,  /* E
1d50: 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31 2c 20 31  x */.    1, 1, 1
1d60: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1d70: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1d80: 31 2c 20 31 2c 20 31 2c 20 20 2f 2a 20 46 78 20  1, 1, 1,  /* Fx 
1d90: 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65  */.};.../*.** Re
1da0: 74 75 72 6e 20 74 68 65 20 6c 65 6e 67 74 68 20  turn the length 
1db0: 6f 66 20 74 68 65 20 74 6f 6b 65 6e 20 74 68 61  of the token tha
1dc0: 74 20 62 65 67 69 6e 73 20 61 74 20 7a 5b 30 5d  t begins at z[0]
1dd0: 2e 20 20 52 65 74 75 72 6e 0a 2a 2a 20 2d 31 20  .  Return.** -1 
1de0: 69 66 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20  if the token is 
1df0: 28 6f 72 20 6d 69 67 68 74 20 62 65 29 20 69 6e  (or might be) in
1e00: 63 6f 6d 70 6c 65 74 65 2e 20 20 53 74 6f 72 65  complete.  Store
1e10: 20 74 68 65 20 74 6f 6b 65 6e 0a 2a 2a 20 74 79   the token.** ty
1e20: 70 65 20 69 6e 20 2a 74 6f 6b 65 6e 54 79 70 65  pe in *tokenType
1e30: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
1e40: 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  g..*/.static int
1e50: 20 73 71 6c 69 74 65 47 65 74 54 6f 6b 65 6e 28   sqliteGetToken(
1e60: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1e70: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 74 6f 6b  har *z, int *tok
1e80: 65 6e 54 79 70 65 29 7b 0a 20 20 69 6e 74 20 69  enType){.  int i
1e90: 3b 0a 20 20 73 77 69 74 63 68 28 20 2a 7a 20 29  ;.  switch( *z )
1ea0: 7b 0a 20 20 20 20 63 61 73 65 20 27 20 27 3a 20  {.    case ' ': 
1eb0: 63 61 73 65 20 27 5c 74 27 3a 20 63 61 73 65 20  case '\t': case 
1ec0: 27 5c 6e 27 3a 20 63 61 73 65 20 27 5c 66 27 3a  '\n': case '\f':
1ed0: 20 63 61 73 65 20 27 5c 72 27 3a 20 7b 0a 20 20   case '\r': {.  
1ee0: 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 7a 5b 69      for(i=1; z[i
1ef0: 5d 20 26 26 20 69 73 73 70 61 63 65 28 7a 5b 69  ] && isspace(z[i
1f00: 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ]); i++){}.     
1f10: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1f20: 5f 53 50 41 43 45 3b 0a 20 20 20 20 20 20 72 65  _SPACE;.      re
1f30: 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20 20  turn i;.    }.  
1f40: 20 20 63 61 73 65 20 27 2d 27 3a 20 7b 0a 20 20    case '-': {.  
1f50: 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 30 20      if( z[1]==0 
1f60: 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20  ) return -1;.   
1f70: 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27     if( z[1]=='-'
1f80: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
1f90: 69 3d 32 3b 20 7a 5b 69 5d 20 26 26 20 7a 5b 69  i=2; z[i] && z[i
1fa0: 5d 21 3d 27 5c 6e 27 3b 20 69 2b 2b 29 7b 7d 0a  ]!='\n'; i++){}.
1fb0: 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79          *tokenTy
1fc0: 70 65 20 3d 20 54 4b 5f 43 4f 4d 4d 45 4e 54 3b  pe = TK_COMMENT;
1fd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1fe0: 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  i;.      }.     
1ff0: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
2000: 5f 4d 49 4e 55 53 3b 0a 20 20 20 20 20 20 72 65  _MINUS;.      re
2010: 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
2020: 20 20 63 61 73 65 20 27 28 27 3a 20 7b 0a 20 20    case '(': {.  
2030: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
2040: 20 54 4b 5f 4c 50 3b 0a 20 20 20 20 20 20 72 65   TK_LP;.      re
2050: 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
2060: 20 20 63 61 73 65 20 27 29 27 3a 20 7b 0a 20 20    case ')': {.  
2070: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
2080: 20 54 4b 5f 52 50 3b 0a 20 20 20 20 20 20 72 65   TK_RP;.      re
2090: 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
20a0: 20 20 63 61 73 65 20 27 3b 27 3a 20 7b 0a 20 20    case ';': {.  
20b0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
20c0: 20 54 4b 5f 53 45 4d 49 3b 0a 20 20 20 20 20 20   TK_SEMI;.      
20d0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
20e0: 20 20 20 20 63 61 73 65 20 27 2b 27 3a 20 7b 0a      case '+': {.
20f0: 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65        *tokenType
2100: 20 3d 20 54 4b 5f 50 4c 55 53 3b 0a 20 20 20 20   = TK_PLUS;.    
2110: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
2120: 7d 0a 20 20 20 20 63 61 73 65 20 27 2a 27 3a 20  }.    case '*': 
2130: 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79  {.      *tokenTy
2140: 70 65 20 3d 20 54 4b 5f 53 54 41 52 3b 0a 20 20  pe = TK_STAR;.  
2150: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
2160: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2f 27    }.    case '/'
2170: 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e  : {.      *token
2180: 54 79 70 65 20 3d 20 54 4b 5f 53 4c 41 53 48 3b  Type = TK_SLASH;
2190: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
21a0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
21b0: 27 25 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '%': {.      *to
21c0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 52 45 4d  kenType = TK_REM
21d0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
21e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
21f0: 20 27 3d 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74   '=': {.      *t
2200: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 45 51  okenType = TK_EQ
2210: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
2220: 20 2b 20 28 7a 5b 31 5d 3d 3d 27 3d 27 29 3b 0a   + (z[1]=='=');.
2230: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27      }.    case '
2240: 3c 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  <': {.      if( 
2250: 7a 5b 31 5d 3d 3d 27 3d 27 20 29 7b 0a 20 20 20  z[1]=='=' ){.   
2260: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
2270: 3d 20 54 4b 5f 4c 45 3b 0a 20 20 20 20 20 20 20  = TK_LE;.       
2280: 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20   return 2;.     
2290: 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 31 5d 3d   }else if( z[1]=
22a0: 3d 27 3e 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='>' ){.        
22b0: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
22c0: 4e 45 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  NE;.        retu
22d0: 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73  rn 2;.      }els
22e0: 65 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 3c 27 20  e if( z[1]=='<' 
22f0: 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  ){.        *toke
2300: 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 53 48 49 46  nType = TK_LSHIF
2310: 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  T;.        retur
2320: 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n 2;.      }else
2330: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
2340: 54 79 70 65 20 3d 20 54 4b 5f 4c 54 3b 0a 20 20  Type = TK_LT;.  
2350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
2360: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2370: 20 20 63 61 73 65 20 27 3e 27 3a 20 7b 0a 20 20    case '>': {.  
2380: 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 3d      if( z[1]=='=
2390: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  ' ){.        *to
23a0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 47 45 3b  kenType = TK_GE;
23b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
23c0: 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  2;.      }else i
23d0: 66 28 20 7a 5b 31 5d 3d 3d 27 3e 27 20 29 7b 0a  f( z[1]=='>' ){.
23e0: 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79          *tokenTy
23f0: 70 65 20 3d 20 54 4b 5f 52 53 48 49 46 54 3b 0a  pe = TK_RSHIFT;.
2400: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 32          return 2
2410: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2420: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
2430: 65 20 3d 20 54 4b 5f 47 54 3b 0a 20 20 20 20 20  e = TK_GT;.     
2440: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
2450: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 63     }.    }.    c
2460: 61 73 65 20 27 21 27 3a 20 7b 0a 20 20 20 20 20  ase '!': {.     
2470: 20 69 66 28 20 7a 5b 31 5d 21 3d 27 3d 27 20 29   if( z[1]!='=' )
2480: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
2490: 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41  Type = TK_ILLEGA
24a0: 4c 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  L;.        retur
24b0: 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n 2;.      }else
24c0: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
24d0: 54 79 70 65 20 3d 20 54 4b 5f 4e 45 3b 0a 20 20  Type = TK_NE;.  
24e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a        return 2;.
24f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2500: 20 20 63 61 73 65 20 27 7c 27 3a 20 7b 0a 20 20    case '|': {.  
2510: 20 20 20 20 69 66 28 20 7a 5b 31 5d 21 3d 27 7c      if( z[1]!='|
2520: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  ' ){.        *to
2530: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 42 49 54  kenType = TK_BIT
2540: 4f 52 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  OR;.        retu
2550: 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73  rn 1;.      }els
2560: 65 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  e{.        *toke
2570: 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f 4e 43 41  nType = TK_CONCA
2580: 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  T;.        retur
2590: 6e 20 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 2;.      }.   
25a0: 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2c 27 3a   }.    case ',':
25b0: 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54   {.      *tokenT
25c0: 79 70 65 20 3d 20 54 4b 5f 43 4f 4d 4d 41 3b 0a  ype = TK_COMMA;.
25d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
25e0: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27      }.    case '
25f0: 26 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b  &': {.      *tok
2600: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 42 49 54 41  enType = TK_BITA
2610: 4e 44 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ND;.      return
2620: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61   1;.    }.    ca
2630: 73 65 20 27 7e 27 3a 20 7b 0a 20 20 20 20 20 20  se '~': {.      
2640: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
2650: 42 49 54 4e 4f 54 3b 0a 20 20 20 20 20 20 72 65  BITNOT;.      re
2660: 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
2670: 20 20 63 61 73 65 20 27 5c 27 27 3a 20 63 61 73    case '\'': cas
2680: 65 20 27 22 27 3a 20 7b 0a 20 20 20 20 20 20 69  e '"': {.      i
2690: 6e 74 20 64 65 6c 69 6d 20 3d 20 7a 5b 30 5d 3b  nt delim = z[0];
26a0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  .      for(i=1; 
26b0: 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  z[i]; i++){.    
26c0: 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 64 65      if( z[i]==de
26d0: 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20 20 20 20  lim ){.         
26e0: 20 69 66 28 20 7a 5b 69 2b 31 5d 3d 3d 64 65 6c   if( z[i+1]==del
26f0: 69 6d 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  im ){.          
2700: 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20    i++;.         
2710: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
2720: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2730: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
2740: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2750: 66 28 20 7a 5b 69 5d 20 29 20 69 2b 2b 3b 0a 20  f( z[i] ) i++;. 
2760: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
2770: 3d 20 54 4b 5f 53 54 52 49 4e 47 3b 0a 20 20 20  = TK_STRING;.   
2780: 20 20 20 72 65 74 75 72 6e 20 69 3b 0a 20 20 20     return i;.   
2790: 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2e 27 3a   }.    case '.':
27a0: 20 7b 0a 20 20 20 20 20 20 69 66 28 20 21 69 73   {.      if( !is
27b0: 64 69 67 69 74 28 7a 5b 31 5d 29 20 29 7b 0a 20  digit(z[1]) ){. 
27c0: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
27d0: 65 20 3d 20 54 4b 5f 44 4f 54 3b 0a 20 20 20 20  e = TK_DOT;.    
27e0: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
27f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 46      }.      /* F
2800: 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20 74 68  all thru into th
2810: 65 20 6e 65 78 74 20 63 61 73 65 20 2a 2f 0a 20  e next case */. 
2820: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 30     }.    case '0
2830: 27 3a 20 63 61 73 65 20 27 31 27 3a 20 63 61 73  ': case '1': cas
2840: 65 20 27 32 27 3a 20 63 61 73 65 20 27 33 27 3a  e '2': case '3':
2850: 20 63 61 73 65 20 27 34 27 3a 0a 20 20 20 20 63   case '4':.    c
2860: 61 73 65 20 27 35 27 3a 20 63 61 73 65 20 27 36  ase '5': case '6
2870: 27 3a 20 63 61 73 65 20 27 37 27 3a 20 63 61 73  ': case '7': cas
2880: 65 20 27 38 27 3a 20 63 61 73 65 20 27 39 27 3a  e '8': case '9':
2890: 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54   {.      *tokenT
28a0: 79 70 65 20 3d 20 54 4b 5f 49 4e 54 45 47 45 52  ype = TK_INTEGER
28b0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  ;.      for(i=1;
28c0: 20 7a 5b 69 5d 20 26 26 20 69 73 64 69 67 69 74   z[i] && isdigit
28d0: 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20  (z[i]); i++){}. 
28e0: 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27       if( z[i]=='
28f0: 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 2b  .' ){.        i+
2900: 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  +;.        while
2910: 28 20 7a 5b 69 5d 20 26 26 20 69 73 64 69 67 69  ( z[i] && isdigi
2920: 74 28 7a 5b 69 5d 29 20 29 7b 20 69 2b 2b 3b 20  t(z[i]) ){ i++; 
2930: 7d 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 69  .      }.      i
2960: 66 28 20 28 7a 5b 69 5d 3d 3d 27 65 27 20 7c 7c  f( (z[i]=='e' ||
2970: 20 7a 5b 69 5d 3d 3d 27 45 27 29 20 26 26 0a 20   z[i]=='E') &&. 
2980: 20 20 20 20 20 20 20 20 20 20 28 20 69 73 64 69            ( isdi
2990: 67 69 74 28 7a 5b 69 2b 31 5d 29 20 0a 20 20 20  git(z[i+1]) .   
29a0: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 28 7a 5b           || ((z[
29b0: 69 2b 31 5d 3d 3d 27 2b 27 20 7c 7c 20 7a 5b 69  i+1]=='+' || z[i
29c0: 2b 31 5d 3d 3d 27 2d 27 29 20 26 26 20 69 73 64  +1]=='-') && isd
29d0: 69 67 69 74 28 7a 5b 69 2b 32 5d 29 29 0a 20 20  igit(z[i+2])).  
29e0: 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20           ).     
29f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 20 2b 3d   ){.        i +=
2a00: 20 32 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c   2;.        whil
2a10: 65 28 20 7a 5b 69 5d 20 26 26 20 69 73 64 69 67  e( z[i] && isdig
2a20: 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69 2b 2b 3b  it(z[i]) ){ i++;
2a30: 20 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65   }.        *toke
2a40: 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f 41 54  nType = TK_FLOAT
2a50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
2a60: 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a 20  ( z[0]=='.' ){. 
2a70: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
2a80: 65 20 3d 20 54 4b 5f 46 4c 4f 41 54 3b 0a 20 20  e = TK_FLOAT;.  
2a90: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
2aa0: 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn i;.    }.    
2ab0: 63 61 73 65 20 27 5b 27 3a 20 7b 0a 20 20 20 20  case '[': {.    
2ac0: 20 20 66 6f 72 28 69 3d 31 3b 20 7a 5b 69 5d 20    for(i=1; z[i] 
2ad0: 26 26 20 7a 5b 69 2d 31 5d 21 3d 27 5d 27 3b 20  && z[i-1]!=']'; 
2ae0: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f  i++){}.      *to
2af0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 44 3b  kenType = TK_ID;
2b00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
2b10: 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75  .    }.    defau
2b20: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  lt: {.      if( 
2b30: 21 69 73 49 64 43 68 61 72 5b 2a 7a 5d 20 29 7b  !isIdChar[*z] ){
2b40: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
2b50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f        }.      fo
2b60: 72 28 69 3d 31 3b 20 69 73 49 64 43 68 61 72 5b  r(i=1; isIdChar[
2b70: 7a 5b 69 5d 5d 3b 20 69 2b 2b 29 7b 7d 0a 20 20  z[i]]; i++){}.  
2b80: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
2b90: 20 73 71 6c 69 74 65 4b 65 79 77 6f 72 64 43 6f   sqliteKeywordCo
2ba0: 64 65 28 28 63 68 61 72 2a 29 7a 2c 20 69 29 3b  de((char*)z, i);
2bb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
2bc0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 74 6f  .    }.  }.  *to
2bd0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c  kenType = TK_ILL
2be0: 45 47 41 4c 3b 0a 20 20 72 65 74 75 72 6e 20 31  EGAL;.  return 1
2bf0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 74  ;.}../*.** Run t
2c00: 68 65 20 70 61 72 73 65 72 20 6f 6e 20 74 68 65  he parser on the
2c10: 20 67 69 76 65 6e 20 53 51 4c 20 73 74 72 69 6e   given SQL strin
2c20: 67 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 73  g.  The parser s
2c30: 74 72 75 63 74 75 72 65 20 69 73 0a 2a 2a 20 70  tructure is.** p
2c40: 61 73 73 65 64 20 69 6e 2e 20 20 41 6e 20 53 51  assed in.  An SQ
2c50: 4c 49 54 45 5f 20 73 74 61 74 75 73 20 63 6f 64  LITE_ status cod
2c60: 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  e is returned.  
2c70: 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  If an error occu
2c80: 72 73 0a 2a 2a 20 61 6e 64 20 70 7a 45 72 72 4d  rs.** and pzErrM
2c90: 73 67 21 3d 4e 55 4c 4c 20 74 68 65 6e 20 61 6e  sg!=NULL then an
2ca0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6d   error message m
2cb0: 69 67 68 74 20 62 65 20 77 72 69 74 74 65 6e 20  ight be written 
2cc0: 69 6e 74 6f 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20  into .** memory 
2cd0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
2ce0: 6c 6c 6f 63 28 29 20 61 6e 64 20 2a 70 7a 45 72  lloc() and *pzEr
2cf0: 72 4d 73 67 20 6d 61 64 65 20 74 6f 20 70 6f 69  rMsg made to poi
2d00: 6e 74 20 74 6f 20 74 68 61 74 0a 2a 2a 20 65 72  nt to that.** er
2d10: 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 4f 72  ror message.  Or
2d20: 20 6d 61 79 62 65 20 6e 6f 74 2e 0a 2a 2f 0a 69   maybe not..*/.i
2d30: 6e 74 20 73 71 6c 69 74 65 52 75 6e 50 61 72 73  nt sqliteRunPars
2d40: 65 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  er(Parse *pParse
2d50: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53  , const char *zS
2d60: 71 6c 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  ql, char **pzErr
2d70: 4d 73 67 29 7b 0a 20 20 69 6e 74 20 6e 45 72 72  Msg){.  int nErr
2d80: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   = 0;.  int i;. 
2d90: 20 76 6f 69 64 20 2a 70 45 6e 67 69 6e 65 3b 0a   void *pEngine;.
2da0: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
2db0: 20 20 73 71 6c 69 74 65 20 2a 64 62 20 3d 20 70    sqlite *db = p
2dc0: 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 65 78 74  Parse->db;.  ext
2dd0: 65 72 6e 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ern void *sqlite
2de0: 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2df0: 2a 28 2a 29 28 69 6e 74 29 29 3b 0a 20 20 65 78  *(*)(int));.  ex
2e00: 74 65 72 6e 20 76 6f 69 64 20 73 71 6c 69 74 65  tern void sqlite
2e10: 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2e20: 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2e30: 29 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  );.  extern int 
2e40: 73 71 6c 69 74 65 50 61 72 73 65 72 28 76 6f 69  sqliteParser(voi
2e50: 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
2e60: 50 61 72 73 65 2a 29 3b 0a 0a 20 20 64 62 2d 3e  Parse*);..  db->
2e70: 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45  flags &= ~SQLITE
2e80: 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 70 50  _Interrupt;.  pP
2e90: 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54  arse->rc = SQLIT
2ea0: 45 5f 4f 4b 3b 0a 20 20 69 20 3d 20 30 3b 0a 20  E_OK;.  i = 0;. 
2eb0: 20 70 45 6e 67 69 6e 65 20 3d 20 73 71 6c 69 74   pEngine = sqlit
2ec0: 65 50 61 72 73 65 72 41 6c 6c 6f 63 28 28 76 6f  eParserAlloc((vo
2ed0: 69 64 2a 28 2a 29 28 69 6e 74 29 29 6d 61 6c 6c  id*(*)(int))mall
2ee0: 6f 63 29 3b 0a 20 20 69 66 28 20 70 45 6e 67 69  oc);.  if( pEngi
2ef0: 6e 65 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  ne==0 ){.    sql
2f00: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
2f10: 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d  rrMsg, "out of m
2f20: 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20 20 20  emory", 0);.    
2f30: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
2f40: 77 68 69 6c 65 28 20 73 71 6c 69 74 65 5f 6d 61  while( sqlite_ma
2f50: 6c 6c 6f 63 5f 66 61 69 6c 65 64 3d 3d 30 20 26  lloc_failed==0 &
2f60: 26 20 6e 45 72 72 3d 3d 30 20 26 26 20 69 3e 3d  & nErr==0 && i>=
2f70: 30 20 26 26 20 7a 53 71 6c 5b 69 5d 21 3d 30 20  0 && zSql[i]!=0 
2f80: 29 7b 0a 20 20 20 20 69 6e 74 20 74 6f 6b 65 6e  ){.    int token
2f90: 54 79 70 65 3b 0a 20 20 20 20 0a 20 20 20 20 69  Type;.    .    i
2fa0: 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
2fb0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74  SQLITE_Interrupt
2fc0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 50  )!=0 ){.      pP
2fd0: 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54  arse->rc = SQLIT
2fe0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
2ff0: 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69     sqliteSetStri
3000: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 69 6e  ng(pzErrMsg, "in
3010: 74 65 72 72 75 70 74 22 2c 20 30 29 3b 0a 20 20  terrupt", 0);.  
3020: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
3030: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 73 4c 61  .    pParse->sLa
3040: 73 74 54 6f 6b 65 6e 2e 7a 20 3d 20 26 7a 53 71  stToken.z = &zSq
3050: 6c 5b 69 5d 3b 0a 20 20 20 20 70 50 61 72 73 65  l[i];.    pParse
3060: 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e 6e 20 3d  ->sLastToken.n =
3070: 20 73 71 6c 69 74 65 47 65 74 54 6f 6b 65 6e 28   sqliteGetToken(
3080: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
3090: 26 7a 53 71 6c 5b 69 5d 2c 20 26 74 6f 6b 65 6e  &zSql[i], &token
30a0: 54 79 70 65 29 3b 0a 20 20 20 20 69 20 2b 3d 20  Type);.    i += 
30b0: 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b  pParse->sLastTok
30c0: 65 6e 2e 6e 3b 0a 20 20 20 20 69 66 28 20 6f 6e  en.n;.    if( on
30d0: 63 65 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72  ce ){.      pPar
30e0: 73 65 2d 3e 73 46 69 72 73 74 54 6f 6b 65 6e 20  se->sFirstToken 
30f0: 3d 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54  = pParse->sLastT
3100: 6f 6b 65 6e 3b 0a 20 20 20 20 20 20 6f 6e 63 65  oken;.      once
3110: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
3120: 73 77 69 74 63 68 28 20 74 6f 6b 65 6e 54 79 70  switch( tokenTyp
3130: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
3140: 54 4b 5f 53 50 41 43 45 3a 0a 20 20 20 20 20 20  TK_SPACE:.      
3150: 63 61 73 65 20 54 4b 5f 43 4f 4d 4d 45 4e 54 3a  case TK_COMMENT:
3160: 20 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b   {.        break
3170: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
3180: 63 61 73 65 20 54 4b 5f 49 4c 4c 45 47 41 4c 3a  case TK_ILLEGAL:
3190: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 53  .        sqliteS
31a0: 65 74 4e 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  etNString(pzErrM
31b0: 73 67 2c 20 22 75 6e 72 65 63 6f 67 6e 69 7a 65  sg, "unrecognize
31c0: 64 20 74 6f 6b 65 6e 3a 20 5c 22 22 2c 20 2d 31  d token: \"", -1
31d0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 70 50  , .           pP
31e0: 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e  arse->sLastToken
31f0: 2e 7a 2c 20 70 50 61 72 73 65 2d 3e 73 4c 61 73  .z, pParse->sLas
3200: 74 54 6f 6b 65 6e 2e 6e 2c 20 22 5c 22 22 2c 20  tToken.n, "\"", 
3210: 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 6e  1, 0);.        n
3220: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 62  Err++;.        b
3230: 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61  reak;.      defa
3240: 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 73 71 6c  ult:.        sql
3250: 69 74 65 50 61 72 73 65 72 28 70 45 6e 67 69 6e  iteParser(pEngin
3260: 65 2c 20 74 6f 6b 65 6e 54 79 70 65 2c 20 70 50  e, tokenType, pP
3270: 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e  arse->sLastToken
3280: 2c 20 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  , pParse);.     
3290: 20 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 7a     if( pParse->z
32a0: 45 72 72 4d 73 67 20 26 26 20 70 50 61 72 73 65  ErrMsg && pParse
32b0: 2d 3e 73 45 72 72 54 6f 6b 65 6e 2e 7a 20 29 7b  ->sErrToken.z ){
32c0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
32d0: 65 53 65 74 4e 53 74 72 69 6e 67 28 70 7a 45 72  eSetNString(pzEr
32e0: 72 4d 73 67 2c 20 22 6e 65 61 72 20 5c 22 22 2c  rMsg, "near \"",
32f0: 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20   -1, .          
3300: 20 20 20 70 50 61 72 73 65 2d 3e 73 45 72 72 54     pParse->sErrT
3310: 6f 6b 65 6e 2e 7a 2c 20 70 50 61 72 73 65 2d 3e  oken.z, pParse->
3320: 73 45 72 72 54 6f 6b 65 6e 2e 6e 2c 0a 20 20 20  sErrToken.n,.   
3330: 20 20 20 20 20 20 20 20 20 20 22 5c 22 3a 20 22            "\": "
3340: 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , -1,.          
3350: 20 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d     pParse->zErrM
3360: 73 67 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20  sg, -1,.        
3370: 20 20 20 20 20 30 29 3b 0a 20 20 20 20 20 20 20       0);.       
3380: 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20     nErr++;.     
3390: 20 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28       sqliteFree(
33a0: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29  pParse->zErrMsg)
33b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 72  ;.          pPar
33c0: 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  se->zErrMsg = 0;
33d0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
33e0: 66 28 20 70 50 61 72 73 65 2d 3e 72 63 21 3d 53  f( pParse->rc!=S
33f0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
3400: 20 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53        sqliteSetS
3410: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
3420: 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72  sqlite_error_str
3430: 69 6e 67 28 70 50 61 72 73 65 2d 3e 72 63 29 2c  ing(pParse->rc),
3440: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6e   0);.          n
3450: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Err++;.        }
3460: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
3470: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
3480: 7a 53 71 6c 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20  zSql[i]==0 ){.  
3490: 20 20 73 71 6c 69 74 65 50 61 72 73 65 72 28 70    sqliteParser(p
34a0: 45 6e 67 69 6e 65 2c 20 54 4b 5f 53 45 4d 49 2c  Engine, TK_SEMI,
34b0: 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f   pParse->sLastTo
34c0: 6b 65 6e 2c 20 70 50 61 72 73 65 29 3b 0a 20 20  ken, pParse);.  
34d0: 20 20 73 71 6c 69 74 65 50 61 72 73 65 72 28 70    sqliteParser(p
34e0: 45 6e 67 69 6e 65 2c 20 30 2c 20 70 50 61 72 73  Engine, 0, pPars
34f0: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70  e->sLastToken, p
3500: 50 61 72 73 65 29 3b 0a 20 20 20 20 69 66 28 20  Parse);.    if( 
3510: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20  pParse->zErrMsg 
3520: 26 26 20 70 50 61 72 73 65 2d 3e 73 45 72 72 54  && pParse->sErrT
3530: 6f 6b 65 6e 2e 7a 20 29 7b 0a 20 20 20 20 20 20  oken.z ){.      
3540: 20 73 71 6c 69 74 65 53 65 74 4e 53 74 72 69 6e   sqliteSetNStrin
3550: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6e 65 61  g(pzErrMsg, "nea
3560: 72 20 5c 22 22 2c 20 2d 31 2c 20 0a 20 20 20 20  r \"", -1, .    
3570: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 73 45        pParse->sE
3580: 72 72 54 6f 6b 65 6e 2e 7a 2c 20 70 50 61 72 73  rrToken.z, pPars
3590: 65 2d 3e 73 45 72 72 54 6f 6b 65 6e 2e 6e 2c 0a  e->sErrToken.n,.
35a0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 3a 20 22            "\": "
35b0: 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , -1,.          
35c0: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 2c  pParse->zErrMsg,
35d0: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 30   -1,.          0
35e0: 29 3b 0a 20 20 20 20 20 20 20 6e 45 72 72 2b 2b  );.       nErr++
35f0: 3b 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65 46  ;.       sqliteF
3600: 72 65 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72  ree(pParse->zErr
3610: 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 70 50 61  Msg);.       pPa
3620: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  rse->zErrMsg = 0
3630: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
3640: 6c 69 74 65 50 61 72 73 65 72 46 72 65 65 28 70  liteParserFree(p
3650: 45 6e 67 69 6e 65 2c 20 66 72 65 65 29 3b 0a 20  Engine, free);. 
3660: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 7a 45 72   if( pParse->zEr
3670: 72 4d 73 67 20 29 7b 0a 20 20 20 20 69 66 28 20  rMsg ){.    if( 
3680: 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20  pzErrMsg ){.    
3690: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a    sqliteFree(*pz
36a0: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 2a  ErrMsg);.      *
36b0: 70 7a 45 72 72 4d 73 67 20 3d 20 70 50 61 72 73  pzErrMsg = pPars
36c0: 65 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  e->zErrMsg;.    
36d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
36e0: 69 74 65 46 72 65 65 28 70 50 61 72 73 65 2d 3e  iteFree(pParse->
36f0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a  zErrMsg);.    }.
3700: 20 20 20 20 69 66 28 20 21 6e 45 72 72 20 29 20      if( !nErr ) 
3710: 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66  nErr++;.  }.  if
3720: 28 20 70 50 61 72 73 65 2d 3e 70 56 64 62 65 20  ( pParse->pVdbe 
3730: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 56 64 62  ){.    sqliteVdb
3740: 65 44 65 6c 65 74 65 28 70 50 61 72 73 65 2d 3e  eDelete(pParse->
3750: 70 56 64 62 65 29 3b 0a 20 20 20 20 70 50 61 72  pVdbe);.    pPar
3760: 73 65 2d 3e 70 56 64 62 65 20 3d 20 30 3b 0a 20  se->pVdbe = 0;. 
3770: 20 7d 0a 20 20 69 66 28 20 70 50 61 72 73 65 2d   }.  if( pParse-
3780: 3e 70 4e 65 77 54 61 62 6c 65 20 29 7b 0a 20 20  >pNewTable ){.  
3790: 20 20 73 71 6c 69 74 65 44 65 6c 65 74 65 54 61    sqliteDeleteTa
37a0: 62 6c 65 28 70 50 61 72 73 65 2d 3e 64 62 2c 20  ble(pParse->db, 
37b0: 70 50 61 72 73 65 2d 3e 70 4e 65 77 54 61 62 6c  pParse->pNewTabl
37c0: 65 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  e);.    pParse->
37d0: 70 4e 65 77 54 61 62 6c 65 20 3d 20 30 3b 0a 20  pNewTable = 0;. 
37e0: 20 7d 0a 20 20 69 66 28 20 6e 45 72 72 3e 30 20   }.  if( nErr>0 
37f0: 26 26 20 70 50 61 72 73 65 2d 3e 72 63 3d 3d 53  && pParse->rc==S
3800: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
3810: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c  pParse->rc = SQL
3820: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
3830: 20 72 65 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a   return nErr;.}.