/ Hex Artifact Content
Login

Artifact 77ff8164a8751994bc9926ce282847f653ac0c16:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 31 39 39 39 2c 20 32 30 30 30 20 44  (c) 1999, 2000 D
0020: 2e 20 52 69 63 68 61 72 64 20 48 69 70 70 0a 2a  . Richard Hipp.*
0030: 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61  *.** This progra
0040: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
0050: 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69  re; you can redi
0060: 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f  stribute it and/
0070: 6f 72 0a 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20  or.** modify it 
0080: 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20  under the terms 
0090: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72  of the GNU Gener
00a0: 61 6c 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63  al Public.** Lic
00b0: 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  ense as publishe
00c0: 64 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f  d by the Free So
00d0: 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f  ftware Foundatio
00e0: 6e 3b 20 65 69 74 68 65 72 0a 2a 2a 20 76 65 72  n; either.** ver
00f0: 73 69 6f 6e 20 32 20 6f 66 20 74 68 65 20 4c 69  sion 2 of the Li
0100: 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 20 79 6f  cense, or (at yo
0110: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0120: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 2a 2a  ater version..**
0130: 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  .** This program
0140: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
0150: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
0160: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
0170: 75 6c 2c 0a 2a 2a 20 62 75 74 20 57 49 54 48 4f  ul,.** but WITHO
0180: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
0190: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
01a0: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
01b0: 74 79 20 6f 66 0a 2a 2a 20 4d 45 52 43 48 41 4e  ty of.** MERCHAN
01c0: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
01d0: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
01e0: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
01f0: 65 65 20 74 68 65 20 47 4e 55 0a 2a 2a 20 47 65  ee the GNU.** Ge
0200: 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  neral Public Lic
0210: 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65  ense for more de
0220: 74 61 69 6c 73 2e 0a 2a 2a 20 0a 2a 2a 20 59 6f  tails..** .** Yo
0230: 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65  u should have re
0240: 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66  ceived a copy of
0250: 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c   the GNU General
0260: 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e   Public.** Licen
0270: 73 65 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  se along with th
0280: 69 73 20 6c 69 62 72 61 72 79 3b 20 69 66 20 6e  is library; if n
0290: 6f 74 2c 20 77 72 69 74 65 20 74 6f 20 74 68 65  ot, write to the
02a0: 0a 2a 2a 20 46 72 65 65 20 53 6f 66 74 77 61 72  .** Free Softwar
02b0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e  e Foundation, In
02c0: 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50 6c  c., 59 Temple Pl
02d0: 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30 2c  ace - Suite 330,
02e0: 0a 2a 2a 20 42 6f 73 74 6f 6e 2c 20 4d 41 20 20  .** Boston, MA  
02f0: 30 32 31 31 31 2d 31 33 30 37 2c 20 55 53 41 2e  02111-1307, USA.
0300: 0a 2a 2a 0a 2a 2a 20 41 75 74 68 6f 72 20 63 6f  .**.** Author co
0310: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
0320: 6e 3a 0a 2a 2a 20 20 20 64 72 68 40 68 77 61 63  n:.**   drh@hwac
0330: 69 2e 63 6f 6d 0a 2a 2a 20 20 20 68 74 74 70 3a  i.com.**   http:
0340: 2f 2f 77 77 77 2e 68 77 61 63 69 2e 63 6f 6d 2f  //www.hwaci.com/
0350: 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  drh/.**.********
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03a0: 2a 0a 2a 2a 20 41 6e 20 74 6f 6b 65 6e 69 7a 65  *.** An tokenize
03b0: 72 20 66 6f 72 20 53 51 4c 0a 2a 2a 0a 2a 2a 20  r for SQL.**.** 
03c0: 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 69  This file contai
03d0: 6e 73 20 43 20 63 6f 64 65 20 74 68 61 74 20 73  ns C code that s
03e0: 70 6c 69 74 73 20 61 6e 20 53 51 4c 20 69 6e 70  plits an SQL inp
03f0: 75 74 20 73 74 72 69 6e 67 20 75 70 20 69 6e 74  ut string up int
0400: 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
0410: 74 6f 6b 65 6e 73 20 61 6e 64 20 73 65 6e 64 73  tokens and sends
0420: 20 74 68 6f 73 65 20 74 6f 6b 65 6e 73 20 6f 6e   those tokens on
0430: 65 2d 62 79 2d 6f 6e 65 20 6f 76 65 72 20 74 6f  e-by-one over to
0440: 20 74 68 65 0a 2a 2a 20 70 61 72 73 65 72 20 66   the.** parser f
0450: 6f 72 20 61 6e 61 6c 79 73 69 73 2e 0a 2a 2a 0a  or analysis..**.
0460: 2a 2a 20 24 49 64 3a 20 74 6f 6b 65 6e 69 7a 65  ** $Id: tokenize
0470: 2e 63 2c 76 20 31 2e 31 32 20 32 30 30 30 2f 30  .c,v 1.12 2000/0
0480: 36 2f 31 36 20 32 30 3a 35 31 3a 32 36 20 64 72  6/16 20:51:26 dr
0490: 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c  h Exp $.*/.#incl
04a0: 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68  ude "sqliteInt.h
04b0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  ".#include <ctyp
04c0: 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h>.#include <s
04d0: 74 64 6c 69 62 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20  tdlib.h>../*.** 
04e0: 41 6c 6c 20 74 68 65 20 6b 65 79 77 6f 72 64 73  All the keywords
04f0: 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   of the SQL lang
0500: 75 61 67 65 20 61 72 65 20 73 74 6f 72 65 64 20  uage are stored 
0510: 61 73 20 69 6e 20 61 20 68 61 73 68 0a 2a 2a 20  as in a hash.** 
0520: 74 61 62 6c 65 20 63 6f 6d 70 6f 73 65 64 20 6f  table composed o
0530: 66 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74  f instances of t
0540: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
0550: 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64  ucture..*/.typed
0560: 65 66 20 73 74 72 75 63 74 20 4b 65 79 77 6f 72  ef struct Keywor
0570: 64 20 4b 65 79 77 6f 72 64 3b 0a 73 74 72 75 63  d Keyword;.struc
0580: 74 20 4b 65 79 77 6f 72 64 20 7b 0a 20 20 63 68  t Keyword {.  ch
0590: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
05a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6b 65         /* The ke
05b0: 79 77 6f 72 64 20 6e 61 6d 65 20 2a 2f 0a 20 20  yword name */.  
05c0: 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
05d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
05e0: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
05f0: 20 69 6e 20 74 68 65 20 6b 65 79 77 6f 72 64 20   in the keyword 
0600: 2a 2f 0a 20 20 69 6e 74 20 74 6f 6b 65 6e 54 79  */.  int tokenTy
0610: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pe;           /*
0620: 20 54 68 65 20 74 6f 6b 65 6e 20 76 61 6c 75 65   The token value
0630: 20 66 6f 72 20 74 68 69 73 20 6b 65 79 77 6f 72   for this keywor
0640: 64 20 2a 2f 0a 20 20 4b 65 79 77 6f 72 64 20 2a  d */.  Keyword *
0650: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
0660: 2f 2a 20 4e 65 78 74 20 6b 65 79 77 6f 72 64 20  /* Next keyword 
0670: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 68 61  with the same ha
0680: 73 68 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  sh */.};../*.** 
0690: 54 68 65 73 65 20 61 72 65 20 74 68 65 20 6b 65  These are the ke
06a0: 79 77 6f 72 64 73 0a 2a 2f 0a 73 74 61 74 69 63  ywords.*/.static
06b0: 20 4b 65 79 77 6f 72 64 20 61 4b 65 79 77 6f 72   Keyword aKeywor
06c0: 64 54 61 62 6c 65 5b 5d 20 3d 20 7b 0a 20 20 7b  dTable[] = {.  {
06d0: 20 22 41 4c 4c 22 2c 20 20 20 20 20 20 20 20 20   "ALL",         
06e0: 20 20 20 20 20 20 30 2c 20 54 4b 5f 41 4c 4c 2c        0, TK_ALL,
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
0700: 7d 2c 0a 20 20 7b 20 22 41 4e 44 22 2c 20 20 20  },.  { "AND",   
0710: 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54              0, T
0720: 4b 5f 41 4e 44 2c 20 20 20 20 20 20 20 20 20 20  K_AND,          
0730: 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 41 53      0 },.  { "AS
0740: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0750: 20 20 30 2c 20 54 4b 5f 41 53 2c 20 20 20 20 20    0, TK_AS,     
0760: 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20            0 },. 
0770: 20 7b 20 22 41 53 43 22 2c 20 20 20 20 20 20 20   { "ASC",       
0780: 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 41 53          0, TK_AS
0790: 43 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C,              
07a0: 30 20 7d 2c 0a 20 20 7b 20 22 42 45 54 57 45 45  0 },.  { "BETWEE
07b0: 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20 30 2c  N",           0,
07c0: 20 54 4b 5f 42 45 54 57 45 45 4e 2c 20 20 20 20   TK_BETWEEN,    
07d0: 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22        0 },.  { "
07e0: 42 59 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  BY",            
07f0: 20 20 20 20 30 2c 20 54 4b 5f 42 59 2c 20 20 20      0, TK_BY,   
0800: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c              0 },
0810: 0a 20 20 7b 20 22 43 48 45 43 4b 22 2c 20 20 20  .  { "CHECK",   
0820: 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f            0, TK_
0830: 43 48 45 43 4b 2c 20 20 20 20 20 20 20 20 20 20  CHECK,          
0840: 20 20 30 20 7d 2c 0a 20 20 7b 20 22 43 4f 4e 53    0 },.  { "CONS
0850: 54 52 41 49 4e 54 22 2c 20 20 20 20 20 20 20 20  TRAINT",        
0860: 30 2c 20 54 4b 5f 43 4f 4e 53 54 52 41 49 4e 54  0, TK_CONSTRAINT
0870: 2c 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b  ,       0 },.  {
0880: 20 22 43 4f 50 59 22 2c 20 20 20 20 20 20 20 20   "COPY",        
0890: 20 20 20 20 20 20 30 2c 20 54 4b 5f 43 4f 50 59        0, TK_COPY
08a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20  ,             0 
08b0: 7d 2c 0a 20 20 7b 20 22 43 52 45 41 54 45 22 2c  },.  { "CREATE",
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54              0, T
08d0: 4b 5f 43 52 45 41 54 45 2c 20 20 20 20 20 20 20  K_CREATE,       
08e0: 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 44 45      0 },.  { "DE
08f0: 46 41 55 4c 54 22 2c 20 20 20 20 20 20 20 20 20  FAULT",         
0900: 20 20 30 2c 20 54 4b 5f 44 45 46 41 55 4c 54 2c    0, TK_DEFAULT,
0910: 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20            0 },. 
0920: 20 7b 20 22 44 45 4c 45 54 45 22 2c 20 20 20 20   { "DELETE",    
0930: 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 44 45          0, TK_DE
0940: 4c 45 54 45 2c 20 20 20 20 20 20 20 20 20 20 20  LETE,           
0950: 30 20 7d 2c 0a 20 20 7b 20 22 44 45 4c 49 4d 49  0 },.  { "DELIMI
0960: 54 45 52 53 22 2c 20 20 20 20 20 20 20 20 30 2c  TERS",        0,
0970: 20 54 4b 5f 44 45 4c 49 4d 49 54 45 52 53 2c 20   TK_DELIMITERS, 
0980: 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22        0 },.  { "
0990: 44 45 53 43 22 2c 20 20 20 20 20 20 20 20 20 20  DESC",          
09a0: 20 20 20 20 30 2c 20 54 4b 5f 44 45 53 43 2c 20      0, TK_DESC, 
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c              0 },
09c0: 0a 20 20 7b 20 22 44 49 53 54 49 4e 43 54 22 2c  .  { "DISTINCT",
09d0: 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f            0, TK_
09e0: 44 49 53 54 49 4e 43 54 2c 20 20 20 20 20 20 20  DISTINCT,       
09f0: 20 20 30 20 7d 2c 0a 20 20 7b 20 22 44 52 4f 50    0 },.  { "DROP
0a00: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0a10: 30 2c 20 54 4b 5f 44 52 4f 50 2c 20 20 20 20 20  0, TK_DROP,     
0a20: 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b          0 },.  {
0a30: 20 22 45 58 43 45 50 54 22 2c 20 20 20 20 20 20   "EXCEPT",      
0a40: 20 20 20 20 20 20 30 2c 20 54 4b 5f 45 58 43 45        0, TK_EXCE
0a50: 50 54 2c 20 20 20 20 20 20 20 20 20 20 20 30 20  PT,           0 
0a60: 7d 2c 0a 20 20 7b 20 22 45 58 50 4c 41 49 4e 22  },.  { "EXPLAIN"
0a70: 2c 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54  ,           0, T
0a80: 4b 5f 45 58 50 4c 41 49 4e 2c 20 20 20 20 20 20  K_EXPLAIN,      
0a90: 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 46 52      0 },.  { "FR
0aa0: 4f 4d 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  OM",            
0ab0: 20 20 30 2c 20 54 4b 5f 46 52 4f 4d 2c 20 20 20    0, TK_FROM,   
0ac0: 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20            0 },. 
0ad0: 20 7b 20 22 47 4c 4f 42 22 2c 20 20 20 20 20 20   { "GLOB",      
0ae0: 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 47 4c          0, TK_GL
0af0: 4f 42 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  OB,             
0b00: 30 20 7d 2c 0a 20 20 7b 20 22 47 52 4f 55 50 22  0 },.  { "GROUP"
0b10: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c  ,             0,
0b20: 20 54 4b 5f 47 52 4f 55 50 2c 20 20 20 20 20 20   TK_GROUP,      
0b30: 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22        0 },.  { "
0b40: 48 41 56 49 4e 47 22 2c 20 20 20 20 20 20 20 20  HAVING",        
0b50: 20 20 20 20 30 2c 20 54 4b 5f 48 41 56 49 4e 47      0, TK_HAVING
0b60: 2c 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c  ,           0 },
0b70: 0a 20 20 7b 20 22 49 4e 22 2c 20 20 20 20 20 20  .  { "IN",      
0b80: 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f            0, TK_
0b90: 49 4e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  IN,             
0ba0: 20 20 30 20 7d 2c 0a 20 20 7b 20 22 49 4e 44 45    0 },.  { "INDE
0bb0: 58 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  X",             
0bc0: 30 2c 20 54 4b 5f 49 4e 44 45 58 2c 20 20 20 20  0, TK_INDEX,    
0bd0: 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b          0 },.  {
0be0: 20 22 49 4e 53 45 52 54 22 2c 20 20 20 20 20 20   "INSERT",      
0bf0: 20 20 20 20 20 20 30 2c 20 54 4b 5f 49 4e 53 45        0, TK_INSE
0c00: 52 54 2c 20 20 20 20 20 20 20 20 20 20 20 30 20  RT,           0 
0c10: 7d 2c 0a 20 20 7b 20 22 49 4e 54 45 52 53 45 43  },.  { "INTERSEC
0c20: 54 22 2c 20 20 20 20 20 20 20 20 20 30 2c 20 54  T",         0, T
0c30: 4b 5f 49 4e 54 45 52 53 45 43 54 2c 20 20 20 20  K_INTERSECT,    
0c40: 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 49 4e      0 },.  { "IN
0c50: 54 4f 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  TO",            
0c60: 20 20 30 2c 20 54 4b 5f 49 4e 54 4f 2c 20 20 20    0, TK_INTO,   
0c70: 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20            0 },. 
0c80: 20 7b 20 22 49 53 22 2c 20 20 20 20 20 20 20 20   { "IS",        
0c90: 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 49 53          0, TK_IS
0ca0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0cb0: 30 20 7d 2c 0a 20 20 7b 20 22 49 53 4e 55 4c 4c  0 },.  { "ISNULL
0cc0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 2c  ",            0,
0cd0: 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 20 20 20 20   TK_ISNULL,     
0ce0: 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22        0 },.  { "
0cf0: 4b 45 59 22 2c 20 20 20 20 20 20 20 20 20 20 20  KEY",           
0d00: 20 20 20 20 30 2c 20 54 4b 5f 4b 45 59 2c 20 20      0, TK_KEY,  
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c              0 },
0d20: 0a 20 20 7b 20 22 4c 49 4b 45 22 2c 20 20 20 20  .  { "LIKE",    
0d30: 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f            0, TK_
0d40: 4c 49 4b 45 2c 20 20 20 20 20 20 20 20 20 20 20  LIKE,           
0d50: 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4e 4f 54 22    0 },.  { "NOT"
0d60: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0d70: 30 2c 20 54 4b 5f 4e 4f 54 2c 20 20 20 20 20 20  0, TK_NOT,      
0d80: 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b          0 },.  {
0d90: 20 22 4e 4f 54 4e 55 4c 4c 22 2c 20 20 20 20 20   "NOTNULL",     
0da0: 20 20 20 20 20 20 30 2c 20 54 4b 5f 4e 4f 54 4e        0, TK_NOTN
0db0: 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 30 20  ULL,          0 
0dc0: 7d 2c 0a 20 20 7b 20 22 4e 55 4c 4c 22 2c 20 20  },.  { "NULL",  
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54              0, T
0de0: 4b 5f 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20  K_NULL,         
0df0: 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 4f 4e      0 },.  { "ON
0e00: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0e10: 20 20 30 2c 20 54 4b 5f 4f 4e 2c 20 20 20 20 20    0, TK_ON,     
0e20: 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20            0 },. 
0e30: 20 7b 20 22 4f 52 22 2c 20 20 20 20 20 20 20 20   { "OR",        
0e40: 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 4f 52          0, TK_OR
0e50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0e60: 30 20 7d 2c 0a 20 20 7b 20 22 4f 52 44 45 52 22  0 },.  { "ORDER"
0e70: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c  ,             0,
0e80: 20 54 4b 5f 4f 52 44 45 52 2c 20 20 20 20 20 20   TK_ORDER,      
0e90: 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22        0 },.  { "
0ea0: 50 52 49 4d 41 52 59 22 2c 20 20 20 20 20 20 20  PRIMARY",       
0eb0: 20 20 20 20 30 2c 20 54 4b 5f 50 52 49 4d 41 52      0, TK_PRIMAR
0ec0: 59 2c 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c  Y,          0 },
0ed0: 0a 20 20 7b 20 22 53 45 4c 45 43 54 22 2c 20 20  .  { "SELECT",  
0ee0: 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f            0, TK_
0ef0: 53 45 4c 45 43 54 2c 20 20 20 20 20 20 20 20 20  SELECT,         
0f00: 20 20 30 20 7d 2c 0a 20 20 7b 20 22 53 45 54 22    0 },.  { "SET"
0f10: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0f20: 30 2c 20 54 4b 5f 53 45 54 2c 20 20 20 20 20 20  0, TK_SET,      
0f30: 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b          0 },.  {
0f40: 20 22 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20   "TABLE",       
0f50: 20 20 20 20 20 20 30 2c 20 54 4b 5f 54 41 42 4c        0, TK_TABL
0f60: 45 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 20  E,            0 
0f70: 7d 2c 0a 20 20 7b 20 22 55 4e 49 4f 4e 22 2c 20  },.  { "UNION", 
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 54              0, T
0f90: 4b 5f 55 4e 49 4f 4e 2c 20 20 20 20 20 20 20 20  K_UNION,        
0fa0: 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22 55 4e      0 },.  { "UN
0fb0: 49 51 55 45 22 2c 20 20 20 20 20 20 20 20 20 20  IQUE",          
0fc0: 20 20 30 2c 20 54 4b 5f 55 4e 49 51 55 45 2c 20    0, TK_UNIQUE, 
0fd0: 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 20            0 },. 
0fe0: 20 7b 20 22 55 50 44 41 54 45 22 2c 20 20 20 20   { "UPDATE",    
0ff0: 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f 55 50          0, TK_UP
1000: 44 41 54 45 2c 20 20 20 20 20 20 20 20 20 20 20  DATE,           
1010: 30 20 7d 2c 0a 20 20 7b 20 22 55 53 49 4e 47 22  0 },.  { "USING"
1020: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c  ,             0,
1030: 20 54 4b 5f 55 53 49 4e 47 2c 20 20 20 20 20 20   TK_USING,      
1040: 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 7b 20 22        0 },.  { "
1050: 56 41 43 55 55 4d 22 2c 20 20 20 20 20 20 20 20  VACUUM",        
1060: 20 20 20 20 30 2c 20 54 4b 5f 56 41 43 55 55 4d      0, TK_VACUUM
1070: 2c 20 20 20 20 20 20 20 20 20 20 20 30 20 7d 2c  ,           0 },
1080: 0a 20 20 7b 20 22 56 41 4c 55 45 53 22 2c 20 20  .  { "VALUES",  
1090: 20 20 20 20 20 20 20 20 20 20 30 2c 20 54 4b 5f            0, TK_
10a0: 56 41 4c 55 45 53 2c 20 20 20 20 20 20 20 20 20  VALUES,         
10b0: 20 20 30 20 7d 2c 0a 20 20 7b 20 22 57 48 45 52    0 },.  { "WHER
10c0: 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  E",             
10d0: 30 2c 20 54 4b 5f 57 48 45 52 45 2c 20 20 20 20  0, TK_WHERE,    
10e0: 20 20 20 20 20 20 20 20 30 20 7d 2c 0a 7d 3b 0a          0 },.};.
10f0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  ./*.** This is t
1100: 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2f  he hash table.*/
1110: 0a 23 64 65 66 69 6e 65 20 4b 45 59 5f 48 41 53  .#define KEY_HAS
1120: 48 5f 53 49 5a 45 20 33 37 0a 73 74 61 74 69 63  H_SIZE 37.static
1130: 20 4b 65 79 77 6f 72 64 20 2a 61 70 48 61 73 68   Keyword *apHash
1140: 54 61 62 6c 65 5b 4b 45 59 5f 48 41 53 48 5f 53  Table[KEY_HASH_S
1150: 49 5a 45 5d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  IZE];.../*.** Th
1160: 69 73 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 6f 6b  is function look
1170: 73 20 75 70 20 61 6e 20 69 64 65 6e 74 69 66 69  s up an identifi
1180: 65 72 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  er to determine 
1190: 69 66 20 69 74 20 69 73 20 61 0a 2a 2a 20 6b 65  if it is a.** ke
11a0: 79 77 6f 72 64 2e 20 20 49 66 20 69 74 20 69 73  yword.  If it is
11b0: 20 61 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20   a keyword, the 
11c0: 74 6f 6b 65 6e 20 63 6f 64 65 20 6f 66 20 74 68  token code of th
11d0: 61 74 20 6b 65 79 77 6f 72 64 20 69 73 20 0a 2a  at keyword is .*
11e0: 2a 20 72 65 74 75 72 6e 65 64 2e 20 20 49 66 20  * returned.  If 
11f0: 74 68 65 20 69 6e 70 75 74 20 69 73 20 6e 6f 74  the input is not
1200: 20 61 20 6b 65 79 77 6f 72 64 2c 20 54 4b 5f 49   a keyword, TK_I
1210: 44 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  D is returned..*
1220: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
1230: 69 74 65 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  iteKeywordCode(c
1240: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
1250: 74 20 6e 29 7b 0a 20 20 69 6e 74 20 68 3b 0a 20  t n){.  int h;. 
1260: 20 4b 65 79 77 6f 72 64 20 2a 70 3b 0a 20 20 69   Keyword *p;.  i
1270: 66 28 20 61 4b 65 79 77 6f 72 64 54 61 62 6c 65  f( aKeywordTable
1280: 5b 30 5d 2e 6c 65 6e 3d 3d 30 20 29 7b 0a 20 20  [0].len==0 ){.  
1290: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
12a0: 74 68 65 20 6b 65 79 77 6f 72 64 20 68 61 73 68  the keyword hash
12b0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
12c0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6e 3b 0a  t i;.    int n;.
12d0: 20 20 20 20 6e 20 3d 20 73 69 7a 65 6f 66 28 61      n = sizeof(a
12e0: 4b 65 79 77 6f 72 64 54 61 62 6c 65 29 2f 73 69  KeywordTable)/si
12f0: 7a 65 6f 66 28 61 4b 65 79 77 6f 72 64 54 61 62  zeof(aKeywordTab
1300: 6c 65 5b 30 5d 29 3b 0a 20 20 20 20 66 6f 72 28  le[0]);.    for(
1310: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
1320: 20 20 20 20 20 20 61 4b 65 79 77 6f 72 64 54 61        aKeywordTa
1330: 62 6c 65 5b 69 5d 2e 6c 65 6e 20 3d 20 73 74 72  ble[i].len = str
1340: 6c 65 6e 28 61 4b 65 79 77 6f 72 64 54 61 62 6c  len(aKeywordTabl
1350: 65 5b 69 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  e[i].zName);.   
1360: 20 20 20 68 20 3d 20 73 71 6c 69 74 65 48 61 73     h = sqliteHas
1370: 68 4e 6f 43 61 73 65 28 61 4b 65 79 77 6f 72 64  hNoCase(aKeyword
1380: 54 61 62 6c 65 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  Table[i].zName, 
1390: 61 4b 65 79 77 6f 72 64 54 61 62 6c 65 5b 69 5d  aKeywordTable[i]
13a0: 2e 6c 65 6e 29 3b 0a 20 20 20 20 20 20 68 20 25  .len);.      h %
13b0: 3d 20 4b 45 59 5f 48 41 53 48 5f 53 49 5a 45 3b  = KEY_HASH_SIZE;
13c0: 0a 20 20 20 20 20 20 61 4b 65 79 77 6f 72 64 54  .      aKeywordT
13d0: 61 62 6c 65 5b 69 5d 2e 70 4e 65 78 74 20 3d 20  able[i].pNext = 
13e0: 61 70 48 61 73 68 54 61 62 6c 65 5b 68 5d 3b 0a  apHashTable[h];.
13f0: 20 20 20 20 20 20 61 70 48 61 73 68 54 61 62 6c        apHashTabl
1400: 65 5b 68 5d 20 3d 20 26 61 4b 65 79 77 6f 72 64  e[h] = &aKeyword
1410: 54 61 62 6c 65 5b 69 5d 3b 0a 20 20 20 20 7d 0a  Table[i];.    }.
1420: 20 20 7d 0a 20 20 68 20 3d 20 73 71 6c 69 74 65    }.  h = sqlite
1430: 48 61 73 68 4e 6f 43 61 73 65 28 7a 2c 20 6e 29  HashNoCase(z, n)
1440: 20 25 20 4b 45 59 5f 48 41 53 48 5f 53 49 5a 45   % KEY_HASH_SIZE
1450: 3b 0a 20 20 66 6f 72 28 70 3d 61 70 48 61 73 68  ;.  for(p=apHash
1460: 54 61 62 6c 65 5b 68 5d 3b 20 70 3b 20 70 3d 70  Table[h]; p; p=p
1470: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
1480: 28 20 70 2d 3e 6c 65 6e 3d 3d 6e 20 26 26 20 73  ( p->len==n && s
1490: 71 6c 69 74 65 53 74 72 4e 49 43 6d 70 28 70 2d  qliteStrNICmp(p-
14a0: 3e 7a 4e 61 6d 65 2c 20 7a 2c 20 6e 29 3d 3d 30  >zName, z, n)==0
14b0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
14c0: 20 70 2d 3e 74 6f 6b 65 6e 54 79 70 65 3b 0a 20   p->tokenType;. 
14d0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
14e0: 6e 20 54 4b 5f 49 44 3b 0a 7d 0a 0a 2f 2a 0a 2a  n TK_ID;.}../*.*
14f0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e  * Return the len
1500: 67 74 68 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  gth of the token
1510: 20 74 68 61 74 20 62 65 67 69 6e 73 20 61 74 20   that begins at 
1520: 7a 5b 30 5d 2e 20 20 52 65 74 75 72 6e 0a 2a 2a  z[0].  Return.**
1530: 20 2d 31 20 69 66 20 74 68 65 20 74 6f 6b 65 6e   -1 if the token
1540: 20 69 73 20 28 6f 72 20 6d 69 67 68 74 20 62 65   is (or might be
1550: 29 20 69 6e 63 6f 6d 70 6c 65 74 65 2e 20 20 53  ) incomplete.  S
1560: 74 6f 72 65 20 74 68 65 20 74 6f 6b 65 6e 0a 2a  tore the token.*
1570: 2a 20 74 79 70 65 20 69 6e 20 2a 74 6f 6b 65 6e  * type in *token
1580: 54 79 70 65 20 62 65 66 6f 72 65 20 72 65 74 75  Type before retu
1590: 72 6e 69 6e 67 2e 0a 2a 2f 0a 69 6e 74 20 73 71  rning..*/.int sq
15a0: 6c 69 74 65 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  liteGetToken(con
15b0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
15c0: 2a 74 6f 6b 65 6e 54 79 70 65 29 7b 0a 20 20 69  *tokenType){.  i
15d0: 6e 74 20 69 3b 0a 20 20 73 77 69 74 63 68 28 20  nt i;.  switch( 
15e0: 2a 7a 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27  *z ){.    case '
15f0: 20 27 3a 20 63 61 73 65 20 27 5c 74 27 3a 20 63   ': case '\t': c
1600: 61 73 65 20 27 5c 6e 27 3a 20 63 61 73 65 20 27  ase '\n': case '
1610: 5c 66 27 3a 20 7b 0a 20 20 20 20 20 20 66 6f 72  \f': {.      for
1620: 28 69 3d 31 3b 20 7a 5b 69 5d 20 26 26 20 69 73  (i=1; z[i] && is
1630: 73 70 61 63 65 28 7a 5b 69 5d 29 3b 20 69 2b 2b  space(z[i]); i++
1640: 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e  ){}.      *token
1650: 54 79 70 65 20 3d 20 54 4b 5f 53 50 41 43 45 3b  Type = TK_SPACE;
1660: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
1670: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
1680: 27 2d 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  '-': {.      if(
1690: 20 7a 5b 31 5d 3d 3d 30 20 29 20 72 65 74 75 72   z[1]==0 ) retur
16a0: 6e 20 2d 31 3b 0a 20 20 20 20 20 20 69 66 28 20  n -1;.      if( 
16b0: 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20  z[1]=='-' ){.   
16c0: 20 20 20 20 20 66 6f 72 28 69 3d 32 3b 20 7a 5b       for(i=2; z[
16d0: 69 5d 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 6e 27  i] && z[i]!='\n'
16e0: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20  ; i++){}.       
16f0: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1700: 5f 43 4f 4d 4d 45 4e 54 3b 0a 20 20 20 20 20 20  _COMMENT;.      
1710: 20 20 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20    return i;.    
1720: 20 20 7d 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e    }.      *token
1730: 54 79 70 65 20 3d 20 54 4b 5f 4d 49 4e 55 53 3b  Type = TK_MINUS;
1740: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
1750: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
1760: 27 28 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '(': {.      *to
1770: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 50 3b  kenType = TK_LP;
1780: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
1790: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
17a0: 27 29 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  ')': {.      *to
17b0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 52 50 3b  kenType = TK_RP;
17c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
17d0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
17e0: 27 3b 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  ';': {.      *to
17f0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 53 45 4d  kenType = TK_SEM
1800: 49 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  I;.      return 
1810: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  1;.    }.    cas
1820: 65 20 27 2b 27 3a 20 7b 0a 20 20 20 20 20 20 2a  e '+': {.      *
1830: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 50  tokenType = TK_P
1840: 4c 55 53 3b 0a 20 20 20 20 20 20 72 65 74 75 72  LUS;.      retur
1850: 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  n 1;.    }.    c
1860: 61 73 65 20 27 2a 27 3a 20 7b 0a 20 20 20 20 20  ase '*': {.     
1870: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1880: 5f 53 54 41 52 3b 0a 20 20 20 20 20 20 72 65 74  _STAR;.      ret
1890: 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
18a0: 20 63 61 73 65 20 27 2f 27 3a 20 7b 0a 20 20 20   case '/': {.   
18b0: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
18c0: 54 4b 5f 53 4c 41 53 48 3b 0a 20 20 20 20 20 20  TK_SLASH;.      
18d0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
18e0: 20 20 20 20 63 61 73 65 20 27 3d 27 3a 20 7b 0a      case '=': {.
18f0: 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65        *tokenType
1900: 20 3d 20 54 4b 5f 45 51 3b 0a 20 20 20 20 20 20   = TK_EQ;.      
1910: 72 65 74 75 72 6e 20 31 20 2b 20 28 7a 5b 31 5d  return 1 + (z[1]
1920: 3d 3d 27 3d 27 29 3b 0a 20 20 20 20 7d 0a 20 20  =='=');.    }.  
1930: 20 20 63 61 73 65 20 27 3c 27 3a 20 7b 0a 20 20    case '<': {.  
1940: 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 3d      if( z[1]=='=
1950: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  ' ){.        *to
1960: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 45 3b  kenType = TK_LE;
1970: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1980: 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  2;.      }else i
1990: 66 28 20 7a 5b 31 5d 3d 3d 27 3e 27 20 29 7b 0a  f( z[1]=='>' ){.
19a0: 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79          *tokenTy
19b0: 70 65 20 3d 20 54 4b 5f 4e 45 3b 0a 20 20 20 20  pe = TK_NE;.    
19c0: 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20      return 2;.  
19d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19e0: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
19f0: 54 4b 5f 4c 54 3b 0a 20 20 20 20 20 20 20 20 72  TK_LT;.        r
1a00: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d  eturn 1;.      }
1a10: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
1a20: 27 3e 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  '>': {.      if(
1a30: 20 7a 5b 31 5d 3d 3d 27 3d 27 20 29 7b 0a 20 20   z[1]=='=' ){.  
1a40: 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65        *tokenType
1a50: 20 3d 20 54 4b 5f 47 45 3b 0a 20 20 20 20 20 20   = TK_GE;.      
1a60: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20    return 2;.    
1a70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1a80: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1a90: 5f 47 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74  _GT;.        ret
1aa0: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 1;.      }. 
1ab0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 21     }.    case '!
1ac0: 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  ': {.      if( z
1ad0: 5b 31 5d 21 3d 27 3d 27 20 29 7b 0a 20 20 20 20  [1]!='=' ){.    
1ae0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
1af0: 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 20   TK_ILLEGAL;.   
1b00: 20 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20       return 2;. 
1b10: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1b20: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
1b30: 20 54 4b 5f 4e 45 3b 0a 20 20 20 20 20 20 20 20   TK_NE;.        
1b40: 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20  return 2;.      
1b50: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  }.    }.    case
1b60: 20 27 7c 27 3a 20 7b 0a 20 20 20 20 20 20 69 66   '|': {.      if
1b70: 28 20 7a 5b 31 5d 21 3d 27 7c 27 20 29 7b 0a 20  ( z[1]!='|' ){. 
1b80: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
1b90: 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a  e = TK_ILLEGAL;.
1ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
1bb0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1bc0: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
1bd0: 65 20 3d 20 54 4b 5f 43 4f 4e 43 41 54 3b 0a 20  e = TK_CONCAT;. 
1be0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 32 3b         return 2;
1bf0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1c00: 20 20 20 63 61 73 65 20 27 2c 27 3a 20 7b 0a 20     case ',': {. 
1c10: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
1c20: 3d 20 54 4b 5f 43 4f 4d 4d 41 3b 0a 20 20 20 20  = TK_COMMA;.    
1c30: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1c40: 7d 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a  }.    case '\'':
1c50: 20 63 61 73 65 20 27 22 27 3a 20 7b 0a 20 20 20   case '"': {.   
1c60: 20 20 20 69 6e 74 20 64 65 6c 69 6d 20 3d 20 7a     int delim = z
1c70: 5b 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  [0];.      for(i
1c80: 3d 31 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  =1; z[i]; i++){.
1c90: 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d          if( z[i]
1ca0: 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20  ==delim ){.     
1cb0: 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3d       if( z[i+1]=
1cc0: 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20  =delim ){.      
1cd0: 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
1ce0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1cf0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1d00: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1d10: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
1d20: 20 20 20 69 66 28 20 7a 5b 69 5d 20 29 20 69 2b     if( z[i] ) i+
1d30: 2b 3b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54  +;.      *tokenT
1d40: 79 70 65 20 3d 20 54 4b 5f 53 54 52 49 4e 47 3b  ype = TK_STRING;
1d50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
1d60: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
1d70: 27 2e 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  '.': {.      if(
1d80: 20 21 69 73 64 69 67 69 74 28 7a 5b 31 5d 29 20   !isdigit(z[1]) 
1d90: 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  ){.        *toke
1da0: 6e 54 79 70 65 20 3d 20 54 4b 5f 44 4f 54 3b 0a  nType = TK_DOT;.
1db0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
1dc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1dd0: 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74  /* Fall thru int
1de0: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 20  o the next case 
1df0: 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  */.    }.    cas
1e00: 65 20 27 30 27 3a 20 63 61 73 65 20 27 31 27 3a  e '0': case '1':
1e10: 20 63 61 73 65 20 27 32 27 3a 20 63 61 73 65 20   case '2': case 
1e20: 27 33 27 3a 20 63 61 73 65 20 27 34 27 3a 0a 20  '3': case '4':. 
1e30: 20 20 20 63 61 73 65 20 27 35 27 3a 20 63 61 73     case '5': cas
1e40: 65 20 27 36 27 3a 20 63 61 73 65 20 27 37 27 3a  e '6': case '7':
1e50: 20 63 61 73 65 20 27 38 27 3a 20 63 61 73 65 20   case '8': case 
1e60: 27 39 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '9': {.      *to
1e70: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4e 54  kenType = TK_INT
1e80: 45 47 45 52 3b 0a 20 20 20 20 20 20 66 6f 72 28  EGER;.      for(
1e90: 69 3d 31 3b 20 7a 5b 69 5d 20 26 26 20 69 73 64  i=1; z[i] && isd
1ea0: 69 67 69 74 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29  igit(z[i]); i++)
1eb0: 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69  {}.      if( z[i
1ec0: 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20  ]=='.' ){.      
1ed0: 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77    i++;.        w
1ee0: 68 69 6c 65 28 20 7a 5b 69 5d 20 26 26 20 69 73  hile( z[i] && is
1ef0: 64 69 67 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69  digit(z[i]) ){ i
1f00: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 2a 74  ++; }.        *t
1f10: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c  okenType = TK_FL
1f20: 4f 41 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  OAT;.      }.   
1f30: 20 20 20 69 66 28 20 28 7a 5b 69 5d 3d 3d 27 65     if( (z[i]=='e
1f40: 27 20 7c 7c 20 7a 5b 69 5d 3d 3d 27 45 27 29 20  ' || z[i]=='E') 
1f50: 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 28 20  &&.           ( 
1f60: 69 73 64 69 67 69 74 28 7a 5b 69 2b 31 5d 29 20  isdigit(z[i+1]) 
1f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
1f80: 28 28 7a 5b 69 2b 31 5d 3d 3d 27 2b 27 20 7c 7c  ((z[i+1]=='+' ||
1f90: 20 7a 5b 69 2b 31 5d 3d 3d 27 2d 27 29 20 26 26   z[i+1]=='-') &&
1fa0: 20 69 73 64 69 67 69 74 28 7a 5b 69 2b 32 5d 29   isdigit(z[i+2])
1fb0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 29 0a 20  ).           ). 
1fc0: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
1fd0: 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20  i += 2;.        
1fe0: 77 68 69 6c 65 28 20 7a 5b 69 5d 20 26 26 20 69  while( z[i] && i
1ff0: 73 64 69 67 69 74 28 7a 5b 69 5d 29 20 29 7b 20  sdigit(z[i]) ){ 
2000: 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 2a  i++; }.        *
2010: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 46  tokenType = TK_F
2020: 4c 4f 41 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73  LOAT;.      }els
2030: 65 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20  e if( z[0]=='.' 
2040: 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  ){.        *toke
2050: 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f 41 54  nType = TK_FLOAT
2060: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2070: 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a  return i;.    }.
2080: 20 20 20 20 63 61 73 65 20 27 61 27 3a 20 63 61      case 'a': ca
2090: 73 65 20 27 62 27 3a 20 63 61 73 65 20 27 63 27  se 'b': case 'c'
20a0: 3a 20 63 61 73 65 20 27 64 27 3a 20 63 61 73 65  : case 'd': case
20b0: 20 27 65 27 3a 20 63 61 73 65 20 27 66 27 3a 0a   'e': case 'f':.
20c0: 20 20 20 20 63 61 73 65 20 27 67 27 3a 20 63 61      case 'g': ca
20d0: 73 65 20 27 68 27 3a 20 63 61 73 65 20 27 69 27  se 'h': case 'i'
20e0: 3a 20 63 61 73 65 20 27 6a 27 3a 20 63 61 73 65  : case 'j': case
20f0: 20 27 6b 27 3a 20 63 61 73 65 20 27 6c 27 3a 0a   'k': case 'l':.
2100: 20 20 20 20 63 61 73 65 20 27 6d 27 3a 20 63 61      case 'm': ca
2110: 73 65 20 27 6e 27 3a 20 63 61 73 65 20 27 6f 27  se 'n': case 'o'
2120: 3a 20 63 61 73 65 20 27 70 27 3a 20 63 61 73 65  : case 'p': case
2130: 20 27 71 27 3a 20 63 61 73 65 20 27 72 27 3a 0a   'q': case 'r':.
2140: 20 20 20 20 63 61 73 65 20 27 73 27 3a 20 63 61      case 's': ca
2150: 73 65 20 27 74 27 3a 20 63 61 73 65 20 27 75 27  se 't': case 'u'
2160: 3a 20 63 61 73 65 20 27 76 27 3a 20 63 61 73 65  : case 'v': case
2170: 20 27 77 27 3a 20 63 61 73 65 20 27 78 27 3a 0a   'w': case 'x':.
2180: 20 20 20 20 63 61 73 65 20 27 79 27 3a 20 63 61      case 'y': ca
2190: 73 65 20 27 7a 27 3a 20 63 61 73 65 20 27 5f 27  se 'z': case '_'
21a0: 3a 0a 20 20 20 20 63 61 73 65 20 27 41 27 3a 20  :.    case 'A': 
21b0: 63 61 73 65 20 27 42 27 3a 20 63 61 73 65 20 27  case 'B': case '
21c0: 43 27 3a 20 63 61 73 65 20 27 44 27 3a 20 63 61  C': case 'D': ca
21d0: 73 65 20 27 45 27 3a 20 63 61 73 65 20 27 46 27  se 'E': case 'F'
21e0: 3a 0a 20 20 20 20 63 61 73 65 20 27 47 27 3a 20  :.    case 'G': 
21f0: 63 61 73 65 20 27 48 27 3a 20 63 61 73 65 20 27  case 'H': case '
2200: 49 27 3a 20 63 61 73 65 20 27 4a 27 3a 20 63 61  I': case 'J': ca
2210: 73 65 20 27 4b 27 3a 20 63 61 73 65 20 27 4c 27  se 'K': case 'L'
2220: 3a 0a 20 20 20 20 63 61 73 65 20 27 4d 27 3a 20  :.    case 'M': 
2230: 63 61 73 65 20 27 4e 27 3a 20 63 61 73 65 20 27  case 'N': case '
2240: 4f 27 3a 20 63 61 73 65 20 27 50 27 3a 20 63 61  O': case 'P': ca
2250: 73 65 20 27 51 27 3a 20 63 61 73 65 20 27 52 27  se 'Q': case 'R'
2260: 3a 0a 20 20 20 20 63 61 73 65 20 27 53 27 3a 20  :.    case 'S': 
2270: 63 61 73 65 20 27 54 27 3a 20 63 61 73 65 20 27  case 'T': case '
2280: 55 27 3a 20 63 61 73 65 20 27 56 27 3a 20 63 61  U': case 'V': ca
2290: 73 65 20 27 57 27 3a 20 63 61 73 65 20 27 58 27  se 'W': case 'X'
22a0: 3a 0a 20 20 20 20 63 61 73 65 20 27 59 27 3a 20  :.    case 'Y': 
22b0: 63 61 73 65 20 27 5a 27 3a 20 7b 0a 20 20 20 20  case 'Z': {.    
22c0: 20 20 66 6f 72 28 69 3d 31 3b 20 7a 5b 69 5d 20    for(i=1; z[i] 
22d0: 26 26 20 28 69 73 61 6c 6e 75 6d 28 7a 5b 69 5d  && (isalnum(z[i]
22e0: 29 20 7c 7c 20 7a 5b 69 5d 3d 3d 27 5f 27 29 3b  ) || z[i]=='_');
22f0: 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74   i++){}.      *t
2300: 6f 6b 65 6e 54 79 70 65 20 3d 20 73 71 6c 69 74  okenType = sqlit
2310: 65 4b 65 79 77 6f 72 64 43 6f 64 65 28 7a 2c 20  eKeywordCode(z, 
2320: 69 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  i);.      return
2330: 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65   i;.    }.    de
2340: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 62  fault: {.      b
2350: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
2360: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
2370: 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 72 65 74  K_ILLEGAL;.  ret
2380: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
2390: 52 75 6e 20 74 68 65 20 70 61 72 73 65 72 20 6f  Run the parser o
23a0: 6e 20 74 68 65 20 67 69 76 65 6e 20 53 51 4c 20  n the given SQL 
23b0: 73 74 72 69 6e 67 2e 20 20 54 68 65 20 70 61 72  string.  The par
23c0: 73 65 72 20 73 74 72 75 63 74 75 72 65 20 69 73  ser structure is
23d0: 0a 2a 2a 20 70 61 73 73 65 64 20 69 6e 2e 20 20  .** passed in.  
23e0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
23f0: 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a  r of errors..*/.
2400: 69 6e 74 20 73 71 6c 69 74 65 52 75 6e 50 61 72  int sqliteRunPar
2410: 73 65 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ser(Parse *pPars
2420: 65 2c 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 63  e, char *zSql, c
2430: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
2440: 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b  .  int nErr = 0;
2450: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 76 6f 69 64  .  int i;.  void
2460: 20 2a 70 45 6e 67 69 6e 65 3b 0a 20 20 69 6e 74   *pEngine;.  int
2470: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 73 74 61   once = 1;.  sta
2480: 74 69 63 20 46 49 4c 45 20 2a 74 72 61 63 65 20  tic FILE *trace 
2490: 3d 20 30 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f  = 0;.  extern vo
24a0: 69 64 20 2a 73 71 6c 69 74 65 50 61 72 73 65 72  id *sqliteParser
24b0: 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 69  Alloc(void*(*)(i
24c0: 6e 74 29 29 3b 0a 20 20 65 78 74 65 72 6e 20 76  nt));.  extern v
24d0: 6f 69 64 20 73 71 6c 69 74 65 50 61 72 73 65 72  oid sqliteParser
24e0: 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
24f0: 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 20 20 65  (*)(void*));.  e
2500: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2510: 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2520: 74 2c 20 2e 2e 2e 29 3b 0a 20 20 65 78 74 65 72  t, ...);.  exter
2530: 6e 20 76 6f 69 64 20 73 71 6c 69 74 65 50 61 72  n void sqlitePar
2540: 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
2550: 63 68 61 72 20 2a 29 3b 0a 0a 20 20 69 20 3d 20  char *);..  i = 
2560: 30 3b 0a 20 20 73 71 6c 69 74 65 50 61 72 73 65  0;.  sqliteParse
2570: 49 6e 66 6f 52 65 73 65 74 28 70 50 61 72 73 65  InfoReset(pParse
2580: 29 3b 0a 20 20 70 45 6e 67 69 6e 65 20 3d 20 73  );.  pEngine = s
2590: 71 6c 69 74 65 50 61 72 73 65 72 41 6c 6c 6f 63  qliteParserAlloc
25a0: 28 28 76 6f 69 64 2a 28 2a 29 28 69 6e 74 29 29  ((void*(*)(int))
25b0: 6d 61 6c 6c 6f 63 29 3b 0a 20 20 69 66 28 20 70  malloc);.  if( p
25c0: 45 6e 67 69 6e 65 3d 3d 30 20 29 7b 0a 20 20 20  Engine==0 ){.   
25d0: 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67   sqliteSetString
25e0: 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20  (pzErrMsg, "out 
25f0: 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a  of memory", 0);.
2600: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
2610: 7d 0a 20 20 73 71 6c 69 74 65 50 61 72 73 65 72  }.  sqliteParser
2620: 54 72 61 63 65 28 74 72 61 63 65 2c 20 22 70 61  Trace(trace, "pa
2630: 72 73 65 72 3a 20 22 29 3b 0a 20 20 77 68 69 6c  rser: ");.  whil
2640: 65 28 20 6e 45 72 72 3d 3d 30 20 26 26 20 69 3e  e( nErr==0 && i>
2650: 3d 30 20 26 26 20 7a 53 71 6c 5b 69 5d 21 3d 30  =0 && zSql[i]!=0
2660: 20 29 7b 0a 20 20 20 20 69 6e 74 20 74 6f 6b 65   ){.    int toke
2670: 6e 54 79 70 65 3b 0a 20 20 20 20 0a 20 20 20 20  nType;.    .    
2680: 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b  pParse->sLastTok
2690: 65 6e 2e 7a 20 3d 20 26 7a 53 71 6c 5b 69 5d 3b  en.z = &zSql[i];
26a0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 73 4c 61  .    pParse->sLa
26b0: 73 74 54 6f 6b 65 6e 2e 6e 20 3d 20 73 71 6c 69  stToken.n = sqli
26c0: 74 65 47 65 74 54 6f 6b 65 6e 28 26 7a 53 71 6c  teGetToken(&zSql
26d0: 5b 69 5d 2c 20 26 74 6f 6b 65 6e 54 79 70 65 29  [i], &tokenType)
26e0: 3b 0a 20 20 20 20 69 20 2b 3d 20 70 50 61 72 73  ;.    i += pPars
26f0: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e 6e 3b  e->sLastToken.n;
2700: 0a 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 7b  .    if( once ){
2710: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 73  .      pParse->s
2720: 46 69 72 73 74 54 6f 6b 65 6e 20 3d 20 70 50 61  FirstToken = pPa
2730: 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 3b  rse->sLastToken;
2740: 0a 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b  .      once = 0;
2750: 0a 20 20 20 20 7d 0a 20 20 20 20 73 77 69 74 63  .    }.    switc
2760: 68 28 20 74 6f 6b 65 6e 54 79 70 65 20 29 7b 0a  h( tokenType ){.
2770: 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f 53 50        case TK_SP
2780: 41 43 45 3a 0a 20 20 20 20 20 20 20 20 62 72 65  ACE:.        bre
2790: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 54  ak;.      case T
27a0: 4b 5f 43 4f 4d 4d 45 4e 54 3a 20 7b 0a 20 20 20  K_COMMENT: {.   
27b0: 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
27c0: 64 65 62 75 67 67 69 6e 67 20 6d 6f 64 65 73 20  debugging modes 
27d0: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 6e  can be turned on
27e0: 20 61 6e 64 20 6f 66 66 20 75 73 69 6e 67 0a 20   and off using. 
27f0: 20 20 20 20 20 20 20 2a 2a 20 73 70 65 63 69 61         ** specia
2800: 6c 20 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 2e 20  l SQL comments. 
2810: 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 73   Check for the s
2820: 70 65 63 69 61 6c 20 63 6f 6d 6d 65 6e 74 73 0a  pecial comments.
2830: 20 20 20 20 20 20 20 20 2a 2a 20 68 65 72 65 20          ** here 
2840: 61 6e 64 20 74 61 6b 65 20 61 70 70 72 6f 72 69  and take approri
2850: 61 74 65 20 61 63 74 69 6f 6e 20 69 66 20 66 6f  ate action if fo
2860: 75 6e 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  und..        */.
2870: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
2880: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d         char *z =
2890: 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f   pParse->sLastTo
28a0: 6b 65 6e 2e 7a 3b 0a 20 20 20 20 20 20 20 20 69  ken.z;.        i
28b0: 66 28 20 73 71 6c 69 74 65 53 74 72 4e 49 43 6d  f( sqliteStrNICm
28c0: 70 28 7a 2c 22 2d 2d 70 61 72 73 65 72 2d 74 72  p(z,"--parser-tr
28d0: 61 63 65 2d 6f 6e 2d 2d 22 2c 31 39 29 3d 3d 30  ace-on--",19)==0
28e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 72   ){.          tr
28f0: 61 63 65 20 3d 20 73 74 64 65 72 72 3b 0a 20 20  ace = stderr;.  
2900: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 50 61          sqlitePa
2910: 72 73 65 72 54 72 61 63 65 28 74 72 61 63 65 2c  rserTrace(trace,
2920: 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20   "parser: ");.  
2930: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
2940: 73 71 6c 69 74 65 53 74 72 4e 49 43 6d 70 28 7a  sqliteStrNICmp(z
2950: 2c 22 2d 2d 70 61 72 73 65 72 2d 74 72 61 63 65  ,"--parser-trace
2960: 2d 6f 66 66 2d 2d 22 2c 20 32 30 29 3d 3d 30 20  -off--", 20)==0 
2970: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 72 61  ){.          tra
2980: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
2990: 20 20 73 71 6c 69 74 65 50 61 72 73 65 72 54 72    sqliteParserTr
29a0: 61 63 65 28 74 72 61 63 65 2c 20 22 70 61 72 73  ace(trace, "pars
29b0: 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 20 20  er: ");.        
29c0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
29d0: 53 74 72 4e 49 43 6d 70 28 7a 2c 22 2d 2d 76 64  StrNICmp(z,"--vd
29e0: 62 65 2d 74 72 61 63 65 2d 6f 6e 2d 2d 22 2c 31  be-trace-on--",1
29f0: 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  7)==0 ){.       
2a00: 20 20 20 70 50 61 72 73 65 2d 3e 64 62 2d 3e 66     pParse->db->f
2a10: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 56  lags |= SQLITE_V
2a20: 64 62 65 54 72 61 63 65 3b 0a 20 20 20 20 20 20  dbeTrace;.      
2a30: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
2a40: 74 65 53 74 72 4e 49 43 6d 70 28 7a 2c 22 2d 2d  teStrNICmp(z,"--
2a50: 76 64 62 65 2d 74 72 61 63 65 2d 6f 66 66 2d 2d  vdbe-trace-off--
2a60: 22 2c 20 31 38 29 3d 3d 30 20 29 7b 0a 20 20 20  ", 18)==0 ){.   
2a70: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 64         pParse->d
2a80: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c  b->flags &= ~SQL
2a90: 49 54 45 5f 56 64 62 65 54 72 61 63 65 3b 0a 23  ITE_VdbeTrace;.#
2aa0: 69 66 64 65 66 20 4d 45 4d 4f 52 59 5f 44 45 42  ifdef MEMORY_DEB
2ab0: 55 47 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  UG.        }else
2ac0: 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 4e 49   if( sqliteStrNI
2ad0: 43 6d 70 28 7a 2c 22 2d 2d 6d 61 6c 6c 6f 63 2d  Cmp(z,"--malloc-
2ae0: 66 69 6c 65 3d 22 2c 31 34 29 3d 3d 30 20 29 7b  file=",14)==0 ){
2af0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2b00: 65 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20  e_iMallocFail = 
2b10: 61 74 6f 69 28 26 7a 5b 31 34 5d 29 3b 0a 20 20  atoi(&z[14]);.  
2b20: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
2b30: 73 71 6c 69 74 65 53 74 72 4e 49 43 6d 70 28 7a  sqliteStrNICmp(z
2b40: 2c 22 2d 2d 6d 61 6c 6c 6f 63 2d 73 74 61 74 73  ,"--malloc-stats
2b50: 2d 2d 22 2c 20 31 36 29 3d 3d 30 20 29 7b 0a 20  --", 16)==0 ){. 
2b60: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61           if( pPa
2b70: 72 73 65 2d 3e 78 43 61 6c 6c 62 61 63 6b 20 29  rse->xCallback )
2b80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  {.            st
2b90: 61 74 69 63 20 63 68 61 72 20 2a 61 7a 4e 61 6d  atic char *azNam
2ba0: 65 5b 34 5d 20 3d 20 7b 22 6d 61 6c 6c 6f 63 22  e[4] = {"malloc"
2bb0: 2c 20 22 66 72 65 65 22 2c 20 22 74 6f 5f 66 61  , "free", "to_fa
2bc0: 69 6c 22 2c 20 30 20 7d 3b 0a 20 20 20 20 20 20  il", 0 };.      
2bd0: 20 20 20 20 20 20 63 68 61 72 20 2a 61 7a 41 72        char *azAr
2be0: 67 5b 34 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  g[4];.          
2bf0: 20 20 63 68 61 72 20 7a 56 61 6c 5b 33 5d 5b 33    char zVal[3][3
2c00: 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0];.            
2c10: 73 70 72 69 6e 74 66 28 7a 56 61 6c 5b 30 5d 2c  sprintf(zVal[0],
2c20: 22 25 64 22 2c 20 73 71 6c 69 74 65 5f 6e 4d 61  "%d", sqlite_nMa
2c30: 6c 6c 6f 63 29 3b 0a 20 20 20 20 20 20 20 20 20  lloc);.         
2c40: 20 20 20 73 70 72 69 6e 74 66 28 7a 56 61 6c 5b     sprintf(zVal[
2c50: 31 5d 2c 22 25 64 22 2c 20 73 71 6c 69 74 65 5f  1],"%d", sqlite_
2c60: 6e 46 72 65 65 29 3b 0a 20 20 20 20 20 20 20 20  nFree);.        
2c70: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 56 61 6c      sprintf(zVal
2c80: 5b 32 5d 2c 22 25 64 22 2c 20 73 71 6c 69 74 65  [2],"%d", sqlite
2c90: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20  _iMallocFail);. 
2ca0: 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2cb0: 5b 30 5d 20 3d 20 7a 56 61 6c 5b 30 5d 3b 0a 20  [0] = zVal[0];. 
2cc0: 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2cd0: 5b 31 5d 20 3d 20 7a 56 61 6c 5b 31 5d 3b 0a 20  [1] = zVal[1];. 
2ce0: 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2cf0: 5b 32 5d 20 3d 20 7a 56 61 6c 5b 32 5d 3b 0a 20  [2] = zVal[2];. 
2d00: 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2d10: 5b 33 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  [3] = 0;.       
2d20: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 78 43 61       pParse->xCa
2d30: 6c 6c 62 61 63 6b 28 70 50 61 72 73 65 2d 3e 70  llback(pParse->p
2d40: 41 72 67 2c 20 33 2c 20 61 7a 41 72 67 2c 20 61  Arg, 3, azArg, a
2d50: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
2d60: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
2d70: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
2d80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2d90: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54 4b   }.      case TK
2da0: 5f 49 4c 4c 45 47 41 4c 3a 0a 20 20 20 20 20 20  _ILLEGAL:.      
2db0: 20 20 73 71 6c 69 74 65 53 65 74 4e 53 74 72 69    sqliteSetNStri
2dc0: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e  ng(pzErrMsg, "un
2dd0: 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e  recognized token
2de0: 3a 20 5c 22 22 2c 20 2d 31 2c 20 0a 20 20 20 20  : \"", -1, .    
2df0: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 73         pParse->s
2e00: 4c 61 73 74 54 6f 6b 65 6e 2e 7a 2c 20 70 50 61  LastToken.z, pPa
2e10: 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e  rse->sLastToken.
2e20: 6e 2c 20 22 5c 22 22 2c 20 31 2c 20 30 29 3b 0a  n, "\"", 1, 0);.
2e30: 20 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a          nErr++;.
2e40: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2e50: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
2e60: 20 20 20 20 20 20 73 71 6c 69 74 65 50 61 72 73        sqlitePars
2e70: 65 72 28 70 45 6e 67 69 6e 65 2c 20 74 6f 6b 65  er(pEngine, toke
2e80: 6e 54 79 70 65 2c 20 70 50 61 72 73 65 2d 3e 73  nType, pParse->s
2e90: 4c 61 73 74 54 6f 6b 65 6e 2c 20 70 50 61 72 73  LastToken, pPars
2ea0: 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  e);.        if( 
2eb0: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20  pParse->zErrMsg 
2ec0: 26 26 20 70 50 61 72 73 65 2d 3e 73 45 72 72 54  && pParse->sErrT
2ed0: 6f 6b 65 6e 2e 7a 20 29 7b 0a 20 20 20 20 20 20  oken.z ){.      
2ee0: 20 20 20 20 73 71 6c 69 74 65 53 65 74 4e 53 74      sqliteSetNSt
2ef0: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2f00: 6e 65 61 72 20 5c 22 22 2c 20 2d 31 2c 20 0a 20  near \"", -1, . 
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 61 72              pPar
2f20: 73 65 2d 3e 73 45 72 72 54 6f 6b 65 6e 2e 7a 2c  se->sErrToken.z,
2f30: 20 70 50 61 72 73 65 2d 3e 73 45 72 72 54 6f 6b   pParse->sErrTok
2f40: 65 6e 2e 6e 2c 0a 20 20 20 20 20 20 20 20 20 20  en.n,.          
2f50: 20 20 20 22 5c 22 3a 20 22 2c 20 2d 31 2c 0a 20     "\": ", -1,. 
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 61 72              pPar
2f70: 73 65 2d 3e 7a 45 72 72 4d 73 67 2c 20 2d 31 2c  se->zErrMsg, -1,
2f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 30 29  .             0)
2f90: 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 45 72 72  ;.          nErr
2fa0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  ++;.          sq
2fb0: 6c 69 74 65 46 72 65 65 28 70 50 61 72 73 65 2d  liteFree(pParse-
2fc0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  >zErrMsg);.     
2fd0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 7a 45 72       pParse->zEr
2fe0: 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20  rMsg = 0;.      
2ff0: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61    }.        brea
3000: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  k;.    }.  }.  i
3010: 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
3020: 20 20 73 71 6c 69 74 65 50 61 72 73 65 72 28 70    sqliteParser(p
3030: 45 6e 67 69 6e 65 2c 20 30 2c 20 70 50 61 72 73  Engine, 0, pPars
3040: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70  e->sLastToken, p
3050: 50 61 72 73 65 29 3b 0a 20 20 20 20 69 66 28 20  Parse);.    if( 
3060: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20  pParse->zErrMsg 
3070: 26 26 20 70 50 61 72 73 65 2d 3e 73 45 72 72 54  && pParse->sErrT
3080: 6f 6b 65 6e 2e 7a 20 29 7b 0a 20 20 20 20 20 20  oken.z ){.      
3090: 20 73 71 6c 69 74 65 53 65 74 4e 53 74 72 69 6e   sqliteSetNStrin
30a0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6e 65 61  g(pzErrMsg, "nea
30b0: 72 20 5c 22 22 2c 20 2d 31 2c 20 0a 20 20 20 20  r \"", -1, .    
30c0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 73 45        pParse->sE
30d0: 72 72 54 6f 6b 65 6e 2e 7a 2c 20 70 50 61 72 73  rrToken.z, pPars
30e0: 65 2d 3e 73 45 72 72 54 6f 6b 65 6e 2e 6e 2c 0a  e->sErrToken.n,.
30f0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 3a 20 22            "\": "
3100: 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , -1,.          
3110: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 2c  pParse->zErrMsg,
3120: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 30   -1,.          0
3130: 29 3b 0a 20 20 20 20 20 20 20 6e 45 72 72 2b 2b  );.       nErr++
3140: 3b 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65 46  ;.       sqliteF
3150: 72 65 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72  ree(pParse->zErr
3160: 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 70 50 61  Msg);.       pPa
3170: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  rse->zErrMsg = 0
3180: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
3190: 6c 69 74 65 50 61 72 73 65 72 46 72 65 65 28 70  liteParserFree(p
31a0: 45 6e 67 69 6e 65 2c 20 66 72 65 65 29 3b 0a 20  Engine, free);. 
31b0: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 7a 45 72   if( pParse->zEr
31c0: 72 4d 73 67 20 29 7b 0a 20 20 20 20 69 66 28 20  rMsg ){.    if( 
31d0: 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20  pzErrMsg ){.    
31e0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a    sqliteFree(*pz
31f0: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 2a  ErrMsg);.      *
3200: 70 7a 45 72 72 4d 73 67 20 3d 20 70 50 61 72 73  pzErrMsg = pPars
3210: 65 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  e->zErrMsg;.    
3220: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
3230: 69 74 65 46 72 65 65 28 70 50 61 72 73 65 2d 3e  iteFree(pParse->
3240: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a  zErrMsg);.    }.
3250: 20 20 20 20 69 66 28 20 21 6e 45 72 72 20 29 20      if( !nErr ) 
3260: 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66  nErr++;.  }.  if
3270: 28 20 70 50 61 72 73 65 2d 3e 70 56 64 62 65 20  ( pParse->pVdbe 
3280: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 56 64 62  ){.    sqliteVdb
3290: 65 44 65 6c 65 74 65 28 70 50 61 72 73 65 2d 3e  eDelete(pParse->
32a0: 70 56 64 62 65 29 3b 0a 20 20 20 20 70 50 61 72  pVdbe);.    pPar
32b0: 73 65 2d 3e 70 56 64 62 65 20 3d 20 30 3b 0a 20  se->pVdbe = 0;. 
32c0: 20 7d 0a 20 20 69 66 28 20 70 50 61 72 73 65 2d   }.  if( pParse-
32d0: 3e 70 4e 65 77 54 61 62 6c 65 20 29 7b 0a 20 20  >pNewTable ){.  
32e0: 20 20 73 71 6c 69 74 65 44 65 6c 65 74 65 54 61    sqliteDeleteTa
32f0: 62 6c 65 28 70 50 61 72 73 65 2d 3e 64 62 2c 20  ble(pParse->db, 
3300: 70 50 61 72 73 65 2d 3e 70 4e 65 77 54 61 62 6c  pParse->pNewTabl
3310: 65 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  e);.    pParse->
3320: 70 4e 65 77 54 61 62 6c 65 20 3d 20 30 3b 0a 20  pNewTable = 0;. 
3330: 20 7d 0a 20 20 73 71 6c 69 74 65 50 61 72 73 65   }.  sqliteParse
3340: 49 6e 66 6f 52 65 73 65 74 28 70 50 61 72 73 65  InfoReset(pParse
3350: 29 3b 0a 20 20 72 65 74 75 72 6e 20 6e 45 72 72  );.  return nErr
3360: 3b 0a 7d 0a                                      ;.}.