/ Hex Artifact Content
Login

Artifact d4619367d9ba17c6bd4e018fb7e91015ae8562aa:


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 38 39 20 32  enize.c,v 1.89 2
0250: 30 30 34 2f 30 39 2f 32 35 20 31 35 3a 32 35 3a  004/09/25 15:25:
0260: 32 36 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a  26 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 75 38 20 74 6f 6b 65 6e 54 79 70  */.  u8 tokenTyp
03b0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
03c0: 20 54 6f 6b 65 6e 20 76 61 6c 75 65 20 66 6f 72   Token value for
03d0: 20 74 68 69 73 20 6b 65 79 77 6f 72 64 20 2a 2f   this keyword */
03e0: 0a 20 20 75 38 20 6c 65 6e 3b 20 20 20 20 20 20  .  u8 len;      
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
0400: 65 6e 67 74 68 20 6f 66 20 74 68 69 73 20 6b 65  ength of this ke
0410: 79 77 6f 72 64 20 2a 2f 0a 20 20 75 38 20 69 4e  yword */.  u8 iN
0420: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
0430: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
0440: 61 4b 65 79 77 6f 72 64 54 61 62 6c 65 5b 5d 20  aKeywordTable[] 
0450: 6f 66 20 6e 65 78 74 20 77 69 74 68 20 73 61 6d  of next with sam
0460: 65 20 68 61 73 68 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e hash */.};../*
0470: 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74 68  .** These are th
0480: 65 20 6b 65 79 77 6f 72 64 73 0a 2a 2f 0a 73 74  e keywords.*/.st
0490: 61 74 69 63 20 4b 65 79 77 6f 72 64 20 61 4b 65  atic Keyword aKe
04a0: 79 77 6f 72 64 54 61 62 6c 65 5b 5d 20 3d 20 7b  ywordTable[] = {
04b0: 0a 20 20 7b 20 22 41 42 4f 52 54 22 2c 20 20 20  .  { "ABORT",   
04c0: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 41 42 4f            TK_ABO
04d0: 52 54 2c 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  RT,        },.  
04e0: 7b 20 22 41 46 54 45 52 22 2c 20 20 20 20 20 20  { "AFTER",      
04f0: 20 20 20 20 20 20 20 54 4b 5f 41 46 54 45 52 2c         TK_AFTER,
0500: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22          },.  { "
0510: 41 4c 4c 22 2c 20 20 20 20 20 20 20 20 20 20 20  ALL",           
0520: 20 20 20 20 54 4b 5f 41 4c 4c 2c 20 20 20 20 20      TK_ALL,     
0530: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 41 4e 44       },.  { "AND
0540: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0550: 20 54 4b 5f 41 4e 44 2c 20 20 20 20 20 20 20 20   TK_AND,        
0560: 20 20 7d 2c 0a 20 20 7b 20 22 41 53 22 2c 20 20    },.  { "AS",  
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b                TK
0580: 5f 41 53 2c 20 20 20 20 20 20 20 20 20 20 20 7d  _AS,           }
0590: 2c 0a 20 20 7b 20 22 41 53 43 22 2c 20 20 20 20  ,.  { "ASC",    
05a0: 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 41 53             TK_AS
05b0: 43 2c 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  C,          },. 
05c0: 20 7b 20 22 41 54 54 41 43 48 22 2c 20 20 20 20   { "ATTACH",    
05d0: 20 20 20 20 20 20 20 20 54 4b 5f 41 54 54 41 43          TK_ATTAC
05e0: 48 2c 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  H,       },.  { 
05f0: 22 42 45 46 4f 52 45 22 2c 20 20 20 20 20 20 20  "BEFORE",       
0600: 20 20 20 20 20 54 4b 5f 42 45 46 4f 52 45 2c 20       TK_BEFORE, 
0610: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 42 45        },.  { "BE
0620: 47 49 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20  GIN",           
0630: 20 20 54 4b 5f 42 45 47 49 4e 2c 20 20 20 20 20    TK_BEGIN,     
0640: 20 20 20 7d 2c 0a 20 20 7b 20 22 42 45 54 57 45     },.  { "BETWE
0650: 45 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20 54  EN",           T
0660: 4b 5f 42 45 54 57 45 45 4e 2c 20 20 20 20 20 20  K_BETWEEN,      
0670: 7d 2c 0a 20 20 7b 20 22 42 59 22 2c 20 20 20 20  },.  { "BY",    
0680: 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 42              TK_B
0690: 59 2c 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  Y,           },.
06a0: 20 20 7b 20 22 43 41 53 43 41 44 45 22 2c 20 20    { "CASCADE",  
06b0: 20 20 20 20 20 20 20 20 20 54 4b 5f 43 41 53 43           TK_CASC
06c0: 41 44 45 2c 20 20 20 20 20 20 7d 2c 0a 20 20 7b  ADE,      },.  {
06d0: 20 22 43 41 53 45 22 2c 20 20 20 20 20 20 20 20   "CASE",        
06e0: 20 20 20 20 20 20 54 4b 5f 43 41 53 45 2c 20 20        TK_CASE,  
06f0: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 43         },.  { "C
0700: 48 45 43 4b 22 2c 20 20 20 20 20 20 20 20 20 20  HECK",          
0710: 20 20 20 54 4b 5f 43 48 45 43 4b 2c 20 20 20 20     TK_CHECK,    
0720: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 43 4f 4c 4c      },.  { "COLL
0730: 41 54 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  ATE",           
0740: 54 4b 5f 43 4f 4c 4c 41 54 45 2c 20 20 20 20 20  TK_COLLATE,     
0750: 20 7d 2c 0a 20 20 7b 20 22 43 4f 4d 4d 49 54 22   },.  { "COMMIT"
0760: 2c 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f  ,            TK_
0770: 43 4f 4d 4d 49 54 2c 20 20 20 20 20 20 20 7d 2c  COMMIT,       },
0780: 0a 20 20 7b 20 22 43 4f 4e 46 4c 49 43 54 22 2c  .  { "CONFLICT",
0790: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 43 4f 4e            TK_CON
07a0: 46 4c 49 43 54 2c 20 20 20 20 20 7d 2c 0a 20 20  FLICT,     },.  
07b0: 7b 20 22 43 4f 4e 53 54 52 41 49 4e 54 22 2c 20  { "CONSTRAINT", 
07c0: 20 20 20 20 20 20 20 54 4b 5f 43 4f 4e 53 54 52         TK_CONSTR
07d0: 41 49 4e 54 2c 20 20 20 7d 2c 0a 20 20 7b 20 22  AINT,   },.  { "
07e0: 43 52 45 41 54 45 22 2c 20 20 20 20 20 20 20 20  CREATE",        
07f0: 20 20 20 20 54 4b 5f 43 52 45 41 54 45 2c 20 20      TK_CREATE,  
0800: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 43 52 4f       },.  { "CRO
0810: 53 53 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  SS",            
0820: 20 54 4b 5f 4a 4f 49 4e 5f 4b 57 2c 20 20 20 20   TK_JOIN_KW,    
0830: 20 20 7d 2c 0a 20 20 7b 20 22 44 41 54 41 42 41    },.  { "DATABA
0840: 53 45 22 2c 20 20 20 20 20 20 20 20 20 20 54 4b  SE",          TK
0850: 5f 44 41 54 41 42 41 53 45 2c 20 20 20 20 20 7d  _DATABASE,     }
0860: 2c 0a 20 20 7b 20 22 44 45 46 41 55 4c 54 22 2c  ,.  { "DEFAULT",
0870: 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 44 45             TK_DE
0880: 46 41 55 4c 54 2c 20 20 20 20 20 20 7d 2c 0a 20  FAULT,      },. 
0890: 20 7b 20 22 44 45 46 45 52 52 45 44 22 2c 20 20   { "DEFERRED",  
08a0: 20 20 20 20 20 20 20 20 54 4b 5f 44 45 46 45 52          TK_DEFER
08b0: 52 45 44 2c 20 20 20 20 20 7d 2c 0a 20 20 7b 20  RED,     },.  { 
08c0: 22 44 45 46 45 52 52 41 42 4c 45 22 2c 20 20 20  "DEFERRABLE",   
08d0: 20 20 20 20 20 54 4b 5f 44 45 46 45 52 52 41 42       TK_DEFERRAB
08e0: 4c 45 2c 20 20 20 7d 2c 0a 20 20 7b 20 22 44 45  LE,   },.  { "DE
08f0: 4c 45 54 45 22 2c 20 20 20 20 20 20 20 20 20 20  LETE",          
0900: 20 20 54 4b 5f 44 45 4c 45 54 45 2c 20 20 20 20    TK_DELETE,    
0910: 20 20 20 7d 2c 0a 20 20 7b 20 22 44 45 53 43 22     },.  { "DESC"
0920: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54  ,              T
0930: 4b 5f 44 45 53 43 2c 20 20 20 20 20 20 20 20 20  K_DESC,         
0940: 7d 2c 0a 20 20 7b 20 22 44 45 54 41 43 48 22 2c  },.  { "DETACH",
0950: 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 44              TK_D
0960: 45 54 41 43 48 2c 20 20 20 20 20 20 20 7d 2c 0a  ETACH,       },.
0970: 20 20 7b 20 22 44 49 53 54 49 4e 43 54 22 2c 20    { "DISTINCT", 
0980: 20 20 20 20 20 20 20 20 20 54 4b 5f 44 49 53 54           TK_DIST
0990: 49 4e 43 54 2c 20 20 20 20 20 7d 2c 0a 20 20 7b  INCT,     },.  {
09a0: 20 22 44 52 4f 50 22 2c 20 20 20 20 20 20 20 20   "DROP",        
09b0: 20 20 20 20 20 20 54 4b 5f 44 52 4f 50 2c 20 20        TK_DROP,  
09c0: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 45         },.  { "E
09d0: 4e 44 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ND",            
09e0: 20 20 20 54 4b 5f 45 4e 44 2c 20 20 20 20 20 20     TK_END,      
09f0: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 45 41 43 48      },.  { "EACH
0a00: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0a10: 54 4b 5f 45 41 43 48 2c 20 20 20 20 20 20 20 20  TK_EACH,        
0a20: 20 7d 2c 0a 20 20 7b 20 22 45 4c 53 45 22 2c 20   },.  { "ELSE", 
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f               TK_
0a40: 45 4c 53 45 2c 20 20 20 20 20 20 20 20 20 7d 2c  ELSE,         },
0a50: 0a 20 20 7b 20 22 45 58 43 45 50 54 22 2c 20 20  .  { "EXCEPT",  
0a60: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 45 58 43            TK_EXC
0a70: 45 50 54 2c 20 20 20 20 20 20 20 7d 2c 0a 20 20  EPT,       },.  
0a80: 7b 20 22 45 58 50 4c 41 49 4e 22 2c 20 20 20 20  { "EXPLAIN",    
0a90: 20 20 20 20 20 20 20 54 4b 5f 45 58 50 4c 41 49         TK_EXPLAI
0aa0: 4e 2c 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22  N,      },.  { "
0ab0: 46 41 49 4c 22 2c 20 20 20 20 20 20 20 20 20 20  FAIL",          
0ac0: 20 20 20 20 54 4b 5f 46 41 49 4c 2c 20 20 20 20      TK_FAIL,    
0ad0: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 46 4f 52       },.  { "FOR
0ae0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
0af0: 20 54 4b 5f 46 4f 52 2c 20 20 20 20 20 20 20 20   TK_FOR,        
0b00: 20 20 7d 2c 0a 20 20 7b 20 22 46 4f 52 45 49 47    },.  { "FOREIG
0b10: 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20 54 4b  N",           TK
0b20: 5f 46 4f 52 45 49 47 4e 2c 20 20 20 20 20 20 7d  _FOREIGN,      }
0b30: 2c 0a 20 20 7b 20 22 46 52 4f 4d 22 2c 20 20 20  ,.  { "FROM",   
0b40: 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 46 52             TK_FR
0b50: 4f 4d 2c 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  OM,         },. 
0b60: 20 7b 20 22 46 55 4c 4c 22 2c 20 20 20 20 20 20   { "FULL",      
0b70: 20 20 20 20 20 20 20 20 54 4b 5f 4a 4f 49 4e 5f          TK_JOIN_
0b80: 4b 57 2c 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  KW,      },.  { 
0b90: 22 47 4c 4f 42 22 2c 20 20 20 20 20 20 20 20 20  "GLOB",         
0ba0: 20 20 20 20 20 54 4b 5f 47 4c 4f 42 2c 20 20 20       TK_GLOB,   
0bb0: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 47 52        },.  { "GR
0bc0: 4f 55 50 22 2c 20 20 20 20 20 20 20 20 20 20 20  OUP",           
0bd0: 20 20 54 4b 5f 47 52 4f 55 50 2c 20 20 20 20 20    TK_GROUP,     
0be0: 20 20 20 7d 2c 0a 20 20 7b 20 22 48 41 56 49 4e     },.  { "HAVIN
0bf0: 47 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 54  G",            T
0c00: 4b 5f 48 41 56 49 4e 47 2c 20 20 20 20 20 20 20  K_HAVING,       
0c10: 7d 2c 0a 20 20 7b 20 22 49 47 4e 4f 52 45 22 2c  },.  { "IGNORE",
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 49              TK_I
0c30: 47 4e 4f 52 45 2c 20 20 20 20 20 20 20 7d 2c 0a  GNORE,       },.
0c40: 20 20 7b 20 22 49 4d 4d 45 44 49 41 54 45 22 2c    { "IMMEDIATE",
0c50: 20 20 20 20 20 20 20 20 20 54 4b 5f 49 4d 4d 45           TK_IMME
0c60: 44 49 41 54 45 2c 20 20 20 20 7d 2c 0a 20 20 7b  DIATE,    },.  {
0c70: 20 22 49 4e 22 2c 20 20 20 20 20 20 20 20 20 20   "IN",          
0c80: 20 20 20 20 20 20 54 4b 5f 49 4e 2c 20 20 20 20        TK_IN,    
0c90: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 49         },.  { "I
0ca0: 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20 20  NDEX",          
0cb0: 20 20 20 54 4b 5f 49 4e 44 45 58 2c 20 20 20 20     TK_INDEX,    
0cc0: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 49 4e 49 54      },.  { "INIT
0cd0: 49 41 4c 4c 59 22 2c 20 20 20 20 20 20 20 20 20  IALLY",         
0ce0: 54 4b 5f 49 4e 49 54 49 41 4c 4c 59 2c 20 20 20  TK_INITIALLY,   
0cf0: 20 7d 2c 0a 20 20 7b 20 22 49 4e 4e 45 52 22 2c   },.  { "INNER",
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f               TK_
0d10: 4a 4f 49 4e 5f 4b 57 2c 20 20 20 20 20 20 7d 2c  JOIN_KW,      },
0d20: 0a 20 20 7b 20 22 49 4e 53 45 52 54 22 2c 20 20  .  { "INSERT",  
0d30: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 49 4e 53            TK_INS
0d40: 45 52 54 2c 20 20 20 20 20 20 20 7d 2c 0a 20 20  ERT,       },.  
0d50: 7b 20 22 49 4e 53 54 45 41 44 22 2c 20 20 20 20  { "INSTEAD",    
0d60: 20 20 20 20 20 20 20 54 4b 5f 49 4e 53 54 45 41         TK_INSTEA
0d70: 44 2c 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22  D,      },.  { "
0d80: 49 4e 54 45 52 53 45 43 54 22 2c 20 20 20 20 20  INTERSECT",     
0d90: 20 20 20 20 54 4b 5f 49 4e 54 45 52 53 45 43 54      TK_INTERSECT
0da0: 2c 20 20 20 20 7d 2c 0a 20 20 7b 20 22 49 4e 54  ,    },.  { "INT
0db0: 4f 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  O",             
0dc0: 20 54 4b 5f 49 4e 54 4f 2c 20 20 20 20 20 20 20   TK_INTO,       
0dd0: 20 20 7d 2c 0a 20 20 7b 20 22 49 53 22 2c 20 20    },.  { "IS",  
0de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b                TK
0df0: 5f 49 53 2c 20 20 20 20 20 20 20 20 20 20 20 7d  _IS,           }
0e00: 2c 0a 20 20 7b 20 22 49 53 4e 55 4c 4c 22 2c 20  ,.  { "ISNULL", 
0e10: 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 49 53             TK_IS
0e20: 4e 55 4c 4c 2c 20 20 20 20 20 20 20 7d 2c 0a 20  NULL,       },. 
0e30: 20 7b 20 22 4a 4f 49 4e 22 2c 20 20 20 20 20 20   { "JOIN",      
0e40: 20 20 20 20 20 20 20 20 54 4b 5f 4a 4f 49 4e 2c          TK_JOIN,
0e50: 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20           },.  { 
0e60: 22 4b 45 59 22 2c 20 20 20 20 20 20 20 20 20 20  "KEY",          
0e70: 20 20 20 20 20 54 4b 5f 4b 45 59 2c 20 20 20 20       TK_KEY,    
0e80: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 4c 45        },.  { "LE
0e90: 46 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  FT",            
0ea0: 20 20 54 4b 5f 4a 4f 49 4e 5f 4b 57 2c 20 20 20    TK_JOIN_KW,   
0eb0: 20 20 20 7d 2c 0a 20 20 7b 20 22 4c 49 4b 45 22     },.  { "LIKE"
0ec0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54  ,              T
0ed0: 4b 5f 4c 49 4b 45 2c 20 20 20 20 20 20 20 20 20  K_LIKE,         
0ee0: 7d 2c 0a 20 20 7b 20 22 4c 49 4d 49 54 22 2c 20  },.  { "LIMIT", 
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 4c              TK_L
0f00: 49 4d 49 54 2c 20 20 20 20 20 20 20 20 7d 2c 0a  IMIT,        },.
0f10: 20 20 7b 20 22 4d 41 54 43 48 22 2c 20 20 20 20    { "MATCH",    
0f20: 20 20 20 20 20 20 20 20 20 54 4b 5f 4d 41 54 43           TK_MATC
0f30: 48 2c 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b  H,        },.  {
0f40: 20 22 4e 41 54 55 52 41 4c 22 2c 20 20 20 20 20   "NATURAL",     
0f50: 20 20 20 20 20 20 54 4b 5f 4a 4f 49 4e 5f 4b 57        TK_JOIN_KW
0f60: 2c 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 4e  ,      },.  { "N
0f70: 4f 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  OT",            
0f80: 20 20 20 54 4b 5f 4e 4f 54 2c 20 20 20 20 20 20     TK_NOT,      
0f90: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 4e 4f 54 4e      },.  { "NOTN
0fa0: 55 4c 4c 22 2c 20 20 20 20 20 20 20 20 20 20 20  ULL",           
0fb0: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 20 20 20 20  TK_NOTNULL,     
0fc0: 20 7d 2c 0a 20 20 7b 20 22 4e 55 4c 4c 22 2c 20   },.  { "NULL", 
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f               TK_
0fe0: 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 7d 2c  NULL,         },
0ff0: 0a 20 20 7b 20 22 4f 46 22 2c 20 20 20 20 20 20  .  { "OF",      
1000: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 4f 46 2c            TK_OF,
1010: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
1020: 7b 20 22 4f 46 46 53 45 54 22 2c 20 20 20 20 20  { "OFFSET",     
1030: 20 20 20 20 20 20 20 54 4b 5f 4f 46 46 53 45 54         TK_OFFSET
1040: 2c 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22  ,       },.  { "
1050: 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ON",            
1060: 20 20 20 20 54 4b 5f 4f 4e 2c 20 20 20 20 20 20      TK_ON,      
1070: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 4f 52 22       },.  { "OR"
1080: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1090: 20 54 4b 5f 4f 52 2c 20 20 20 20 20 20 20 20 20   TK_OR,         
10a0: 20 20 7d 2c 0a 20 20 7b 20 22 4f 52 44 45 52 22    },.  { "ORDER"
10b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b  ,             TK
10c0: 5f 4f 52 44 45 52 2c 20 20 20 20 20 20 20 20 7d  _ORDER,        }
10d0: 2c 0a 20 20 7b 20 22 4f 55 54 45 52 22 2c 20 20  ,.  { "OUTER",  
10e0: 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 4a 4f             TK_JO
10f0: 49 4e 5f 4b 57 2c 20 20 20 20 20 20 7d 2c 0a 20  IN_KW,      },. 
1100: 20 7b 20 22 50 52 41 47 4d 41 22 2c 20 20 20 20   { "PRAGMA",    
1110: 20 20 20 20 20 20 20 20 54 4b 5f 50 52 41 47 4d          TK_PRAGM
1120: 41 2c 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20  A,       },.  { 
1130: 22 50 52 49 4d 41 52 59 22 2c 20 20 20 20 20 20  "PRIMARY",      
1140: 20 20 20 20 20 54 4b 5f 50 52 49 4d 41 52 59 2c       TK_PRIMARY,
1150: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 52 41        },.  { "RA
1160: 49 53 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  ISE",           
1170: 20 20 54 4b 5f 52 41 49 53 45 2c 20 20 20 20 20    TK_RAISE,     
1180: 20 20 20 7d 2c 0a 20 20 7b 20 22 52 45 46 45 52     },.  { "REFER
1190: 45 4e 43 45 53 22 2c 20 20 20 20 20 20 20 20 54  ENCES",        T
11a0: 4b 5f 52 45 46 45 52 45 4e 43 45 53 2c 20 20 20  K_REFERENCES,   
11b0: 7d 2c 0a 20 20 7b 20 22 52 45 50 4c 41 43 45 22  },.  { "REPLACE"
11c0: 2c 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 52  ,           TK_R
11d0: 45 50 4c 41 43 45 2c 20 20 20 20 20 20 7d 2c 0a  EPLACE,      },.
11e0: 20 20 7b 20 22 52 45 53 54 52 49 43 54 22 2c 20    { "RESTRICT", 
11f0: 20 20 20 20 20 20 20 20 20 54 4b 5f 52 45 53 54           TK_REST
1200: 52 49 43 54 2c 20 20 20 20 20 7d 2c 0a 20 20 7b  RICT,     },.  {
1210: 20 22 52 49 47 48 54 22 2c 20 20 20 20 20 20 20   "RIGHT",       
1220: 20 20 20 20 20 20 54 4b 5f 4a 4f 49 4e 5f 4b 57        TK_JOIN_KW
1230: 2c 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 52  ,      },.  { "R
1240: 4f 4c 4c 42 41 43 4b 22 2c 20 20 20 20 20 20 20  OLLBACK",       
1250: 20 20 20 54 4b 5f 52 4f 4c 4c 42 41 43 4b 2c 20     TK_ROLLBACK, 
1260: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 52 4f 57 22      },.  { "ROW"
1270: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1280: 54 4b 5f 52 4f 57 2c 20 20 20 20 20 20 20 20 20  TK_ROW,         
1290: 20 7d 2c 0a 20 20 7b 20 22 53 45 4c 45 43 54 22   },.  { "SELECT"
12a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f  ,            TK_
12b0: 53 45 4c 45 43 54 2c 20 20 20 20 20 20 20 7d 2c  SELECT,       },
12c0: 0a 20 20 7b 20 22 53 45 54 22 2c 20 20 20 20 20  .  { "SET",     
12d0: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 53 45 54            TK_SET
12e0: 2c 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  ,          },.  
12f0: 7b 20 22 53 54 41 54 45 4d 45 4e 54 22 2c 20 20  { "STATEMENT",  
1300: 20 20 20 20 20 20 20 54 4b 5f 53 54 41 54 45 4d         TK_STATEM
1310: 45 4e 54 2c 20 20 20 20 7d 2c 0a 20 20 7b 20 22  ENT,    },.  { "
1320: 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20  TABLE",         
1330: 20 20 20 20 54 4b 5f 54 41 42 4c 45 2c 20 20 20      TK_TABLE,   
1340: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 54 45 4d       },.  { "TEM
1350: 50 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  P",             
1360: 20 54 4b 5f 54 45 4d 50 2c 20 20 20 20 20 20 20   TK_TEMP,       
1370: 20 20 7d 2c 0a 20 20 7b 20 22 54 45 4d 50 4f 52    },.  { "TEMPOR
1380: 41 52 59 22 2c 20 20 20 20 20 20 20 20 20 54 4b  ARY",         TK
1390: 5f 54 45 4d 50 2c 20 20 20 20 20 20 20 20 20 7d  _TEMP,         }
13a0: 2c 0a 20 20 7b 20 22 54 48 45 4e 22 2c 20 20 20  ,.  { "THEN",   
13b0: 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 54 48             TK_TH
13c0: 45 4e 2c 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  EN,         },. 
13d0: 20 7b 20 22 54 52 41 4e 53 41 43 54 49 4f 4e 22   { "TRANSACTION"
13e0: 2c 20 20 20 20 20 20 20 54 4b 5f 54 52 41 4e 53  ,       TK_TRANS
13f0: 41 43 54 49 4f 4e 2c 20 20 7d 2c 0a 20 20 7b 20  ACTION,  },.  { 
1400: 22 54 52 49 47 47 45 52 22 2c 20 20 20 20 20 20  "TRIGGER",      
1410: 20 20 20 20 20 54 4b 5f 54 52 49 47 47 45 52 2c       TK_TRIGGER,
1420: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 55 4e        },.  { "UN
1430: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20  ION",           
1440: 20 20 54 4b 5f 55 4e 49 4f 4e 2c 20 20 20 20 20    TK_UNION,     
1450: 20 20 20 7d 2c 0a 20 20 7b 20 22 55 4e 49 51 55     },.  { "UNIQU
1460: 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 54  E",            T
1470: 4b 5f 55 4e 49 51 55 45 2c 20 20 20 20 20 20 20  K_UNIQUE,       
1480: 7d 2c 0a 20 20 7b 20 22 55 50 44 41 54 45 22 2c  },.  { "UPDATE",
1490: 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f 55              TK_U
14a0: 50 44 41 54 45 2c 20 20 20 20 20 20 20 7d 2c 0a  PDATE,       },.
14b0: 20 20 7b 20 22 55 53 49 4e 47 22 2c 20 20 20 20    { "USING",    
14c0: 20 20 20 20 20 20 20 20 20 54 4b 5f 55 53 49 4e           TK_USIN
14d0: 47 2c 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b  G,        },.  {
14e0: 20 22 56 41 43 55 55 4d 22 2c 20 20 20 20 20 20   "VACUUM",      
14f0: 20 20 20 20 20 20 54 4b 5f 56 41 43 55 55 4d 2c        TK_VACUUM,
1500: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 56         },.  { "V
1510: 41 4c 55 45 53 22 2c 20 20 20 20 20 20 20 20 20  ALUES",         
1520: 20 20 20 54 4b 5f 56 41 4c 55 45 53 2c 20 20 20     TK_VALUES,   
1530: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 56 49 45 57      },.  { "VIEW
1540: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1550: 54 4b 5f 56 49 45 57 2c 20 20 20 20 20 20 20 20  TK_VIEW,        
1560: 20 7d 2c 0a 20 20 7b 20 22 57 48 45 4e 22 2c 20   },.  { "WHEN", 
1570: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 4b 5f               TK_
1580: 57 48 45 4e 2c 20 20 20 20 20 20 20 20 20 7d 2c  WHEN,         },
1590: 0a 20 20 7b 20 22 57 48 45 52 45 22 2c 20 20 20  .  { "WHERE",   
15a0: 20 20 20 20 20 20 20 20 20 20 54 4b 5f 57 48 45            TK_WHE
15b0: 52 45 2c 20 20 20 20 20 20 20 20 7d 2c 0a 7d 3b  RE,        },.};
15c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
15d0: 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a  the hash table.*
15e0: 2f 0a 23 64 65 66 69 6e 65 20 4b 45 59 5f 48 41  /.#define KEY_HA
15f0: 53 48 5f 53 49 5a 45 20 31 30 31 0a 73 74 61 74  SH_SIZE 101.stat
1600: 69 63 20 75 38 20 61 69 48 61 73 68 54 61 62 6c  ic u8 aiHashTabl
1610: 65 5b 4b 45 59 5f 48 41 53 48 5f 53 49 5a 45 5d  e[KEY_HASH_SIZE]
1620: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  ;.../*.** This f
1630: 75 6e 63 74 69 6f 6e 20 6c 6f 6f 6b 73 20 75 70  unction looks up
1640: 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 74   an identifier t
1650: 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 69  o determine if i
1660: 74 20 69 73 20 61 0a 2a 2a 20 6b 65 79 77 6f 72  t is a.** keywor
1670: 64 2e 20 20 49 66 20 69 74 20 69 73 20 61 20 6b  d.  If it is a k
1680: 65 79 77 6f 72 64 2c 20 74 68 65 20 74 6f 6b 65  eyword, the toke
1690: 6e 20 63 6f 64 65 20 6f 66 20 74 68 61 74 20 6b  n code of that k
16a0: 65 79 77 6f 72 64 20 69 73 20 0a 2a 2a 20 72 65  eyword is .** re
16b0: 74 75 72 6e 65 64 2e 20 20 49 66 20 74 68 65 20  turned.  If the 
16c0: 69 6e 70 75 74 20 69 73 20 6e 6f 74 20 61 20 6b  input is not a k
16d0: 65 79 77 6f 72 64 2c 20 54 4b 5f 49 44 20 69 73  eyword, TK_ID is
16e0: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e   returned..*/.in
16f0: 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
1700: 43 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20  Code(const char 
1710: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69 6e  *z, int n){.  in
1720: 74 20 68 2c 20 69 3b 0a 20 20 4b 65 79 77 6f 72  t h, i;.  Keywor
1730: 64 20 2a 70 3b 0a 20 20 73 74 61 74 69 63 20 63  d *p;.  static c
1740: 68 61 72 20 6e 65 65 64 49 6e 69 74 20 3d 20 31  har needInit = 1
1750: 3b 0a 20 20 69 66 28 20 6e 65 65 64 49 6e 69 74  ;.  if( needInit
1760: 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
1770: 61 6c 69 7a 65 20 74 68 65 20 6b 65 79 77 6f 72  alize the keywor
1780: 64 20 68 61 73 68 20 74 61 62 6c 65 20 2a 2f 0a  d hash table */.
1790: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 45 6e 74      sqlite3OsEnt
17a0: 65 72 4d 75 74 65 78 28 29 3b 0a 20 20 20 20 69  erMutex();.    i
17b0: 66 28 20 6e 65 65 64 49 6e 69 74 20 29 7b 0a 20  f( needInit ){. 
17c0: 20 20 20 20 20 69 6e 74 20 6e 6b 3b 0a 20 20 20       int nk;.   
17d0: 20 20 20 6e 6b 20 3d 20 73 69 7a 65 6f 66 28 61     nk = sizeof(a
17e0: 4b 65 79 77 6f 72 64 54 61 62 6c 65 29 2f 73 69  KeywordTable)/si
17f0: 7a 65 6f 66 28 61 4b 65 79 77 6f 72 64 54 61 62  zeof(aKeywordTab
1800: 6c 65 5b 30 5d 29 3b 0a 20 20 20 20 20 20 66 6f  le[0]);.      fo
1810: 72 28 69 3d 30 2c 20 70 3d 61 4b 65 79 77 6f 72  r(i=0, p=aKeywor
1820: 64 54 61 62 6c 65 3b 20 69 3c 6e 6b 3b 20 69 2b  dTable; i<nk; i+
1830: 2b 2c 20 70 2b 2b 29 7b 0a 20 20 20 20 20 20 20  +, p++){.       
1840: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
1850: 6d 65 20 3d 20 70 2d 3e 7a 4e 61 6d 65 3b 0a 20  me = p->zName;. 
1860: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d         int len =
1870: 20 70 2d 3e 6c 65 6e 20 3d 20 73 74 72 6c 65 6e   p->len = strlen
1880: 28 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  (zName);.       
1890: 20 68 20 3d 20 73 71 6c 69 74 65 33 48 61 73 68   h = sqlite3Hash
18a0: 4e 6f 43 61 73 65 28 7a 4e 61 6d 65 2c 20 6c 65  NoCase(zName, le
18b0: 6e 29 20 25 20 4b 45 59 5f 48 41 53 48 5f 53 49  n) % KEY_HASH_SI
18c0: 5a 45 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  ZE;.        p->i
18d0: 4e 65 78 74 20 3d 20 61 69 48 61 73 68 54 61 62  Next = aiHashTab
18e0: 6c 65 5b 68 5d 3b 0a 20 20 20 20 20 20 20 20 61  le[h];.        a
18f0: 69 48 61 73 68 54 61 62 6c 65 5b 68 5d 20 3d 20  iHashTable[h] = 
1900: 69 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i+1;.      }.   
1910: 20 20 20 6e 65 65 64 49 6e 69 74 20 3d 20 30 3b     needInit = 0;
1920: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1930: 65 33 4f 73 4c 65 61 76 65 4d 75 74 65 78 28 29  e3OsLeaveMutex()
1940: 3b 0a 20 20 7d 0a 20 20 68 20 3d 20 73 71 6c 69  ;.  }.  h = sqli
1950: 74 65 33 48 61 73 68 4e 6f 43 61 73 65 28 7a 2c  te3HashNoCase(z,
1960: 20 6e 29 20 25 20 4b 45 59 5f 48 41 53 48 5f 53   n) % KEY_HASH_S
1970: 49 5a 45 3b 0a 20 20 66 6f 72 28 69 3d 61 69 48  IZE;.  for(i=aiH
1980: 61 73 68 54 61 62 6c 65 5b 68 5d 3b 20 69 3b 20  ashTable[h]; i; 
1990: 69 3d 70 2d 3e 69 4e 65 78 74 29 7b 0a 20 20 20  i=p->iNext){.   
19a0: 20 70 20 3d 20 26 61 4b 65 79 77 6f 72 64 54 61   p = &aKeywordTa
19b0: 62 6c 65 5b 69 2d 31 5d 3b 0a 20 20 20 20 69 66  ble[i-1];.    if
19c0: 28 20 70 2d 3e 6c 65 6e 3d 3d 6e 20 26 26 20 73  ( p->len==n && s
19d0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 70  qlite3StrNICmp(p
19e0: 2d 3e 7a 4e 61 6d 65 2c 20 7a 2c 20 6e 29 3d 3d  ->zName, z, n)==
19f0: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
1a00: 6e 20 70 2d 3e 74 6f 6b 65 6e 54 79 70 65 3b 0a  n p->tokenType;.
1a10: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
1a20: 72 6e 20 54 4b 5f 49 44 3b 0a 7d 0a 0a 0a 2f 2a  rn TK_ID;.}.../*
1a30: 0a 2a 2a 20 49 66 20 58 20 69 73 20 61 20 63 68  .** If X is a ch
1a40: 61 72 61 63 74 65 72 20 74 68 61 74 20 63 61 6e  aracter that can
1a50: 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 69   be used in an i
1a60: 64 65 6e 74 69 66 69 65 72 20 61 6e 64 0a 2a 2a  dentifier and.**
1a70: 20 58 26 30 78 38 30 3d 3d 30 20 74 68 65 6e 20   X&0x80==0 then 
1a80: 69 73 49 64 43 68 61 72 5b 58 5d 20 77 69 6c 6c  isIdChar[X] will
1a90: 20 62 65 20 31 2e 20 20 49 66 20 58 26 30 78 38   be 1.  If X&0x8
1aa0: 30 3d 3d 30 78 38 30 20 74 68 65 6e 0a 2a 2a 20  0==0x80 then.** 
1ab0: 58 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  X is always an i
1ac0: 64 65 6e 74 69 66 69 65 72 20 63 68 61 72 61 63  dentifier charac
1ad0: 74 65 72 2e 20 20 28 48 65 6e 63 65 20 61 6c 6c  ter.  (Hence all
1ae0: 20 55 54 46 2d 38 0a 2a 2a 20 63 68 61 72 61 63   UTF-8.** charac
1af0: 74 65 72 73 20 63 61 6e 20 62 65 20 70 61 72 74  ters can be part
1b00: 20 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 69 65   of an identifie
1b10: 72 29 2e 20 20 69 73 49 64 43 68 61 72 5b 58 5d  r).  isIdChar[X]
1b20: 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 30 20 66 6f   will.** be 0 fo
1b30: 72 20 65 76 65 72 79 20 63 68 61 72 61 63 74 65  r every characte
1b40: 72 20 69 6e 20 74 68 65 20 6c 6f 77 65 72 20 31  r in the lower 1
1b50: 32 38 20 41 53 43 49 49 20 63 68 61 72 61 63 74  28 ASCII charact
1b60: 65 72 73 0a 2a 2a 20 74 68 61 74 20 63 61 6e 6e  ers.** that cann
1b70: 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 70 61  ot be used as pa
1b80: 72 74 20 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  rt of an identif
1b90: 69 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ier..**.** In th
1ba0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
1bb0: 6e 2c 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  n, an identifier
1bc0: 20 63 61 6e 20 62 65 20 61 20 73 74 72 69 6e 67   can be a string
1bd0: 20 6f 66 0a 2a 2a 20 61 6c 70 68 61 62 65 74 69   of.** alphabeti
1be0: 63 20 63 68 61 72 61 63 74 65 72 73 2c 20 64 69  c characters, di
1bf0: 67 69 74 73 2c 20 61 6e 64 20 22 5f 22 20 70 6c  gits, and "_" pl
1c00: 75 73 20 61 6e 79 20 63 68 61 72 61 63 74 65 72  us any character
1c10: 0a 2a 2a 20 77 69 74 68 20 74 68 65 20 68 69 67  .** with the hig
1c20: 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65 74 2e  h-order bit set.
1c30: 20 20 54 68 65 20 6c 61 74 74 65 72 20 72 75 6c    The latter rul
1c40: 65 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  e means that.** 
1c50: 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20  any sequence of 
1c60: 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73  UTF-8 characters
1c70: 20 6f 72 20 63 68 61 72 61 63 74 65 72 73 20 74   or characters t
1c80: 61 6b 65 6e 20 66 72 6f 6d 0a 2a 2a 20 61 6e 20  aken from.** an 
1c90: 65 78 74 65 6e 64 65 64 20 49 53 4f 38 38 35 39  extended ISO8859
1ca0: 20 63 68 61 72 61 63 74 65 72 20 73 65 74 20 63   character set c
1cb0: 61 6e 20 66 6f 72 6d 20 61 6e 20 69 64 65 6e 74  an form an ident
1cc0: 69 66 69 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  ifier..*/.static
1cd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 69 73 49 64   const char isId
1ce0: 43 68 61 72 5b 5d 20 3d 20 7b 0a 2f 2a 20 78 30  Char[] = {./* x0
1cf0: 20 78 31 20 78 32 20 78 33 20 78 34 20 78 35 20   x1 x2 x3 x4 x5 
1d00: 78 36 20 78 37 20 78 38 20 78 39 20 78 41 20 78  x6 x7 x8 x9 xA x
1d10: 42 20 78 43 20 78 44 20 78 45 20 78 46 20 2a 2f  B xC xD xE xF */
1d20: 0a 20 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  .    1, 1, 1, 1,
1d30: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1d40: 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  1, 0, 0, 0, 0, 0
1d50: 2c 20 30 2c 20 20 2f 2a 20 33 78 20 2a 2f 0a 20  , 0,  /* 3x */. 
1d60: 20 20 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20 31     0, 1, 1, 1, 1
1d70: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1d80: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1d90: 31 2c 20 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20  1,  /* 4x */.   
1da0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1db0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1dc0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  , 0, 0, 0, 0, 1,
1dd0: 20 20 2f 2a 20 35 78 20 2a 2f 0a 20 20 20 20 30    /* 5x */.    0
1de0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1df0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1e00: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
1e10: 2f 2a 20 36 78 20 2a 2f 0a 20 20 20 20 31 2c 20  /* 6x */.    1, 
1e20: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1e30: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c  , 1, 1, 1, 1, 0,
1e40: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 2f 2a   0, 0, 0, 0,  /*
1e50: 20 37 78 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69   7x */.};..#defi
1e60: 6e 65 20 49 64 43 68 61 72 28 43 29 20 20 28 28  ne IdChar(C)  ((
1e70: 28 63 3d 43 29 26 30 78 38 30 29 21 3d 30 20 7c  (c=C)&0x80)!=0 |
1e80: 7c 20 28 63 3e 30 78 32 66 20 26 26 20 69 73 49  | (c>0x2f && isI
1e90: 64 43 68 61 72 5b 63 2d 30 78 33 30 5d 29 29 0a  dChar[c-0x30])).
1ea0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
1eb0: 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
1ec0: 74 6f 6b 65 6e 20 74 68 61 74 20 62 65 67 69 6e  token that begin
1ed0: 73 20 61 74 20 7a 5b 30 5d 2e 20 0a 2a 2a 20 53  s at z[0]. .** S
1ee0: 74 6f 72 65 20 74 68 65 20 74 6f 6b 65 6e 20 74  tore the token t
1ef0: 79 70 65 20 69 6e 20 2a 74 6f 6b 65 6e 54 79 70  ype in *tokenTyp
1f00: 65 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  e before returni
1f10: 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ng..*/.static in
1f20: 74 20 73 71 6c 69 74 65 47 65 74 54 6f 6b 65 6e  t sqliteGetToken
1f30: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1f40: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 74 6f  char *z, int *to
1f50: 6b 65 6e 54 79 70 65 29 7b 0a 20 20 69 6e 74 20  kenType){.  int 
1f60: 69 2c 20 63 3b 0a 20 20 73 77 69 74 63 68 28 20  i, c;.  switch( 
1f70: 2a 7a 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27  *z ){.    case '
1f80: 20 27 3a 20 63 61 73 65 20 27 5c 74 27 3a 20 63   ': case '\t': c
1f90: 61 73 65 20 27 5c 6e 27 3a 20 63 61 73 65 20 27  ase '\n': case '
1fa0: 5c 66 27 3a 20 63 61 73 65 20 27 5c 72 27 3a 20  \f': case '\r': 
1fb0: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  {.      for(i=1;
1fc0: 20 69 73 73 70 61 63 65 28 7a 5b 69 5d 29 3b 20   isspace(z[i]); 
1fd0: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f  i++){}.      *to
1fe0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 53 50 41  kenType = TK_SPA
1ff0: 43 45 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  CE;.      return
2000: 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61   i;.    }.    ca
2010: 73 65 20 27 2d 27 3a 20 7b 0a 20 20 20 20 20 20  se '-': {.      
2020: 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b  if( z[1]=='-' ){
2030: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 32  .        for(i=2
2040: 3b 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 20 26 26  ; (c=z[i])!=0 &&
2050: 20 63 21 3d 27 5c 6e 27 3b 20 69 2b 2b 29 7b 7d   c!='\n'; i++){}
2060: 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54  .        *tokenT
2070: 79 70 65 20 3d 20 54 4b 5f 43 4f 4d 4d 45 4e 54  ype = TK_COMMENT
2080: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
2090: 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   i;.      }.    
20a0: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
20b0: 4b 5f 4d 49 4e 55 53 3b 0a 20 20 20 20 20 20 72  K_MINUS;.      r
20c0: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
20d0: 20 20 20 63 61 73 65 20 27 28 27 3a 20 7b 0a 20     case '(': {. 
20e0: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
20f0: 3d 20 54 4b 5f 4c 50 3b 0a 20 20 20 20 20 20 72  = TK_LP;.      r
2100: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2110: 20 20 20 63 61 73 65 20 27 29 27 3a 20 7b 0a 20     case ')': {. 
2120: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
2130: 3d 20 54 4b 5f 52 50 3b 0a 20 20 20 20 20 20 72  = TK_RP;.      r
2140: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2150: 20 20 20 63 61 73 65 20 27 3b 27 3a 20 7b 0a 20     case ';': {. 
2160: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
2170: 3d 20 54 4b 5f 53 45 4d 49 3b 0a 20 20 20 20 20  = TK_SEMI;.     
2180: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
2190: 0a 20 20 20 20 63 61 73 65 20 27 2b 27 3a 20 7b  .    case '+': {
21a0: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
21b0: 65 20 3d 20 54 4b 5f 50 4c 55 53 3b 0a 20 20 20  e = TK_PLUS;.   
21c0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
21d0: 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2a 27 3a   }.    case '*':
21e0: 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54   {.      *tokenT
21f0: 79 70 65 20 3d 20 54 4b 5f 53 54 41 52 3b 0a 20  ype = TK_STAR;. 
2200: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
2210: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2f     }.    case '/
2220: 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  ': {.      if( z
2230: 5b 31 5d 21 3d 27 2a 27 20 7c 7c 20 7a 5b 32 5d  [1]!='*' || z[2]
2240: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2a  ==0 ){.        *
2250: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 53  tokenType = TK_S
2260: 4c 41 53 48 3b 0a 20 20 20 20 20 20 20 20 72 65  LASH;.        re
2270: 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a  turn 1;.      }.
2280: 20 20 20 20 20 20 66 6f 72 28 69 3d 33 2c 20 63        for(i=3, c
2290: 3d 7a 5b 32 5d 3b 20 28 63 21 3d 27 2a 27 20 7c  =z[2]; (c!='*' |
22a0: 7c 20 7a 5b 69 5d 21 3d 27 2f 27 29 20 26 26 20  | z[i]!='/') && 
22b0: 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b  (c=z[i])!=0; i++
22c0: 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 63 20  ){}.      if( c 
22d0: 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20 2a 74 6f  ) i++;.      *to
22e0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f 4d  kenType = TK_COM
22f0: 4d 45 4e 54 3b 0a 20 20 20 20 20 20 72 65 74 75  MENT;.      retu
2300: 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn i;.    }.    
2310: 63 61 73 65 20 27 25 27 3a 20 7b 0a 20 20 20 20  case '%': {.    
2320: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
2330: 4b 5f 52 45 4d 3b 0a 20 20 20 20 20 20 72 65 74  K_REM;.      ret
2340: 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
2350: 20 63 61 73 65 20 27 3d 27 3a 20 7b 0a 20 20 20   case '=': {.   
2360: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
2370: 54 4b 5f 45 51 3b 0a 20 20 20 20 20 20 72 65 74  TK_EQ;.      ret
2380: 75 72 6e 20 31 20 2b 20 28 7a 5b 31 5d 3d 3d 27  urn 1 + (z[1]=='
2390: 3d 27 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  =');.    }.    c
23a0: 61 73 65 20 27 3c 27 3a 20 7b 0a 20 20 20 20 20  ase '<': {.     
23b0: 20 69 66 28 20 28 63 3d 7a 5b 31 5d 29 3d 3d 27   if( (c=z[1])=='
23c0: 3d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74  =' ){.        *t
23d0: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 45  okenType = TK_LE
23e0: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
23f0: 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20   2;.      }else 
2400: 69 66 28 20 63 3d 3d 27 3e 27 20 29 7b 0a 20 20  if( c=='>' ){.  
2410: 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65        *tokenType
2420: 20 3d 20 54 4b 5f 4e 45 3b 0a 20 20 20 20 20 20   = TK_NE;.      
2430: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20    return 2;.    
2440: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
2450: 3c 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74  <' ){.        *t
2460: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 53  okenType = TK_LS
2470: 48 49 46 54 3b 0a 20 20 20 20 20 20 20 20 72 65  HIFT;.        re
2480: 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65  turn 2;.      }e
2490: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  lse{.        *to
24a0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4c 54 3b  kenType = TK_LT;
24b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
24c0: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
24d0: 0a 20 20 20 20 63 61 73 65 20 27 3e 27 3a 20 7b  .    case '>': {
24e0: 0a 20 20 20 20 20 20 69 66 28 20 28 63 3d 7a 5b  .      if( (c=z[
24f0: 31 5d 29 3d 3d 27 3d 27 20 29 7b 0a 20 20 20 20  1])=='=' ){.    
2500: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
2510: 20 54 4b 5f 47 45 3b 0a 20 20 20 20 20 20 20 20   TK_GE;.        
2520: 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20  return 2;.      
2530: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3e 27  }else if( c=='>'
2540: 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b   ){.        *tok
2550: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 52 53 48 49  enType = TK_RSHI
2560: 46 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  FT;.        retu
2570: 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73  rn 2;.      }els
2580: 65 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65  e{.        *toke
2590: 6e 54 79 70 65 20 3d 20 54 4b 5f 47 54 3b 0a 20  nType = TK_GT;. 
25a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
25b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
25c0: 20 20 20 63 61 73 65 20 27 21 27 3a 20 7b 0a 20     case '!': {. 
25d0: 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 21 3d 27       if( z[1]!='
25e0: 3d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74  =' ){.        *t
25f0: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c  okenType = TK_IL
2600: 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20 20 20 72  LEGAL;.        r
2610: 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d  eturn 2;.      }
2620: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74  else{.        *t
2630: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 4e 45  okenType = TK_NE
2640: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
2650: 20 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   2;.      }.    
2660: 7d 0a 20 20 20 20 63 61 73 65 20 27 7c 27 3a 20  }.    case '|': 
2670: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d  {.      if( z[1]
2680: 21 3d 27 7c 27 20 29 7b 0a 20 20 20 20 20 20 20  !='|' ){.       
2690: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
26a0: 5f 42 49 54 4f 52 3b 0a 20 20 20 20 20 20 20 20  _BITOR;.        
26b0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20  return 1;.      
26c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a  }else{.        *
26d0: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 43  tokenType = TK_C
26e0: 4f 4e 43 41 54 3b 0a 20 20 20 20 20 20 20 20 72  ONCAT;.        r
26f0: 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d  eturn 2;.      }
2700: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
2710: 27 2c 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  ',': {.      *to
2720: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f 4d  kenType = TK_COM
2730: 4d 41 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  MA;.      return
2740: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61   1;.    }.    ca
2750: 73 65 20 27 26 27 3a 20 7b 0a 20 20 20 20 20 20  se '&': {.      
2760: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
2770: 42 49 54 41 4e 44 3b 0a 20 20 20 20 20 20 72 65  BITAND;.      re
2780: 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
2790: 20 20 63 61 73 65 20 27 7e 27 3a 20 7b 0a 20 20    case '~': {.  
27a0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
27b0: 20 54 4b 5f 42 49 54 4e 4f 54 3b 0a 20 20 20 20   TK_BITNOT;.    
27c0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
27d0: 7d 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a  }.    case '\'':
27e0: 20 63 61 73 65 20 27 22 27 3a 20 7b 0a 20 20 20   case '"': {.   
27f0: 20 20 20 69 6e 74 20 64 65 6c 69 6d 20 3d 20 7a     int delim = z
2800: 5b 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  [0];.      for(i
2810: 3d 31 3b 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b  =1; (c=z[i])!=0;
2820: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
2830: 66 28 20 63 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20  f( c==delim ){. 
2840: 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69           if( z[i
2850: 2b 31 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20 20  +1]==delim ){.  
2860: 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20            i++;. 
2870: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
2880: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
2890: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
28a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
28b0: 0a 20 20 20 20 20 20 69 66 28 20 63 20 29 20 69  .      if( c ) i
28c0: 2b 2b 3b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e  ++;.      *token
28d0: 54 79 70 65 20 3d 20 54 4b 5f 53 54 52 49 4e 47  Type = TK_STRING
28e0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69  ;.      return i
28f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
2900: 20 27 2e 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74   '.': {.      *t
2910: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 44 4f  okenType = TK_DO
2920: 54 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  T;.      return 
2930: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  1;.    }.    cas
2940: 65 20 27 30 27 3a 20 63 61 73 65 20 27 31 27 3a  e '0': case '1':
2950: 20 63 61 73 65 20 27 32 27 3a 20 63 61 73 65 20   case '2': case 
2960: 27 33 27 3a 20 63 61 73 65 20 27 34 27 3a 0a 20  '3': case '4':. 
2970: 20 20 20 63 61 73 65 20 27 35 27 3a 20 63 61 73     case '5': cas
2980: 65 20 27 36 27 3a 20 63 61 73 65 20 27 37 27 3a  e '6': case '7':
2990: 20 63 61 73 65 20 27 38 27 3a 20 63 61 73 65 20   case '8': case 
29a0: 27 39 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '9': {.      *to
29b0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4e 54  kenType = TK_INT
29c0: 45 47 45 52 3b 0a 20 20 20 20 20 20 66 6f 72 28  EGER;.      for(
29d0: 69 3d 31 3b 20 69 73 64 69 67 69 74 28 7a 5b 69  i=1; isdigit(z[i
29e0: 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ]); i++){}.     
29f0: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 2e 27 20 26   if( z[i]=='.' &
2a00: 26 20 69 73 64 69 67 69 74 28 7a 5b 69 2b 31 5d  & isdigit(z[i+1]
2a10: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 20 2b  ) ){.        i +
2a20: 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 77 68 69  = 2;.        whi
2a30: 6c 65 28 20 69 73 64 69 67 69 74 28 7a 5b 69 5d  le( isdigit(z[i]
2a40: 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ i++; }.    
2a50: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
2a60: 20 54 4b 5f 46 4c 4f 41 54 3b 0a 20 20 20 20 20   TK_FLOAT;.     
2a70: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 5b   }.      if( (z[
2a80: 69 5d 3d 3d 27 65 27 20 7c 7c 20 7a 5b 69 5d 3d  i]=='e' || z[i]=
2a90: 3d 27 45 27 29 20 26 26 0a 20 20 20 20 20 20 20  ='E') &&.       
2aa0: 20 20 20 20 28 20 69 73 64 69 67 69 74 28 7a 5b      ( isdigit(z[
2ab0: 69 2b 31 5d 29 20 0a 20 20 20 20 20 20 20 20 20  i+1]) .         
2ac0: 20 20 20 7c 7c 20 28 28 7a 5b 69 2b 31 5d 3d 3d     || ((z[i+1]==
2ad0: 27 2b 27 20 7c 7c 20 7a 5b 69 2b 31 5d 3d 3d 27  '+' || z[i+1]=='
2ae0: 2d 27 29 20 26 26 20 69 73 64 69 67 69 74 28 7a  -') && isdigit(z
2af0: 5b 69 2b 32 5d 29 29 0a 20 20 20 20 20 20 20 20  [i+2])).        
2b00: 20 20 20 29 0a 20 20 20 20 20 20 29 7b 0a 20 20     ).      ){.  
2b10: 20 20 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20        i += 2;.  
2b20: 20 20 20 20 20 20 77 68 69 6c 65 28 20 69 73 64        while( isd
2b30: 69 67 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69 2b  igit(z[i]) ){ i+
2b40: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f  +; }.        *to
2b50: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f  kenType = TK_FLO
2b60: 41 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  AT;.      }.    
2b70: 20 20 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20    return i;.    
2b80: 7d 0a 20 20 20 20 63 61 73 65 20 27 5b 27 3a 20  }.    case '[': 
2b90: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  {.      for(i=1,
2ba0: 20 63 3d 7a 5b 30 5d 3b 20 63 21 3d 27 5d 27 20   c=z[0]; c!=']' 
2bb0: 26 26 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20  && (c=z[i])!=0; 
2bc0: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f  i++){}.      *to
2bd0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 44 3b  kenType = TK_ID;
2be0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
2bf0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
2c00: 27 3f 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '?': {.      *to
2c10: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 56 41 52  kenType = TK_VAR
2c20: 49 41 42 4c 45 3b 0a 20 20 20 20 20 20 66 6f 72  IABLE;.      for
2c30: 28 69 3d 31 3b 20 69 73 64 69 67 69 74 28 7a 5b  (i=1; isdigit(z[
2c40: 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  i]); i++){}.    
2c50: 20 20 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20    return i;.    
2c60: 7d 0a 20 20 20 20 63 61 73 65 20 27 3a 27 3a 20  }.    case ':': 
2c70: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  {.      for(i=1;
2c80: 20 49 64 43 68 61 72 28 7a 5b 69 5d 29 3b 20 69   IdChar(z[i]); i
2c90: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f 6b  ++){}.      *tok
2ca0: 65 6e 54 79 70 65 20 3d 20 69 3e 31 20 3f 20 54  enType = i>1 ? T
2cb0: 4b 5f 56 41 52 49 41 42 4c 45 20 3a 20 54 4b 5f  K_VARIABLE : TK_
2cc0: 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20 72  ILLEGAL;.      r
2cd0: 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20  eturn i;.    }. 
2ce0: 20 20 20 63 61 73 65 20 27 24 27 3a 20 7b 0a 20     case '$': {. 
2cf0: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
2d00: 3d 20 54 4b 5f 56 41 52 49 41 42 4c 45 3b 0a 20  = TK_VARIABLE;. 
2d10: 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27       if( z[1]=='
2d20: 7b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  {' ){.        in
2d30: 74 20 6e 42 72 61 63 65 20 3d 20 31 3b 0a 20 20  t nBrace = 1;.  
2d40: 20 20 20 20 20 20 66 6f 72 28 69 3d 32 3b 20 28        for(i=2; (
2d50: 63 3d 7a 5b 69 5d 29 21 3d 30 20 26 26 20 6e 42  c=z[i])!=0 && nB
2d60: 72 61 63 65 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  race; i++){.    
2d70: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 7b 27        if( c=='{'
2d80: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2d90: 6e 42 72 61 63 65 2b 2b 3b 0a 20 20 20 20 20 20  nBrace++;.      
2da0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
2db0: 3d 27 7d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='}' ){.        
2dc0: 20 20 20 20 6e 42 72 61 63 65 2d 2d 3b 0a 20 20      nBrace--;.  
2dd0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2de0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
2df0: 63 3d 3d 30 20 29 20 2a 74 6f 6b 65 6e 54 79 70  c==0 ) *tokenTyp
2e00: 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a  e = TK_ILLEGAL;.
2e10: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2e20: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a       int n = 0;.
2e30: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b          for(i=1;
2e40: 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b   (c=z[i])!=0; i+
2e50: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
2e60: 28 20 69 73 61 6c 6e 75 6d 28 63 29 20 7c 7c 20  ( isalnum(c) || 
2e70: 63 3d 3d 27 5f 27 20 29 7b 0a 20 20 20 20 20 20  c=='_' ){.      
2e80: 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20        n++;.     
2e90: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
2ea0: 3d 3d 27 28 27 20 26 26 20 6e 3e 30 20 29 7b 0a  =='(' && n>0 ){.
2eb0: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 7b 0a              do{.
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 2b                i+
2ed0: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  +;.            }
2ee0: 77 68 69 6c 65 28 20 28 63 3d 7a 5b 69 5d 29 21  while( (c=z[i])!
2ef0: 3d 30 20 26 26 20 21 69 73 73 70 61 63 65 28 63  =0 && !isspace(c
2f00: 29 20 26 26 20 63 21 3d 27 29 27 20 29 3b 0a 20  ) && c!=')' );. 
2f10: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63             if( c
2f20: 3d 3d 27 29 27 20 29 7b 0a 20 20 20 20 20 20 20  ==')' ){.       
2f30: 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
2f40: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 74 6f               *to
2f60: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c  kenType = TK_ILL
2f70: 45 47 41 4c 3b 0a 20 20 20 20 20 20 20 20 20 20  EGAL;.          
2f80: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
2f90: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
2fa0: 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3a   }else if( c==':
2fb0: 27 20 26 26 20 7a 5b 69 2b 31 5d 3d 3d 27 3a 27  ' && z[i+1]==':'
2fc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2fd0: 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  i++;.          }
2fe0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
2ff0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
3000: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
3010: 20 20 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20         if( n==0 
3020: 29 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54  ) *tokenType = T
3030: 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20 20  K_ILLEGAL;.     
3040: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
3050: 69 3b 0a 20 20 20 20 7d 20 0a 20 20 20 20 63 61  i;.    } .    ca
3060: 73 65 20 27 78 27 3a 20 63 61 73 65 20 27 58 27  se 'x': case 'X'
3070: 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 28 63  : {.      if( (c
3080: 3d 7a 5b 31 5d 29 3d 3d 27 5c 27 27 20 7c 7c 20  =z[1])=='\'' || 
3090: 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20  c=='"' ){.      
30a0: 20 20 69 6e 74 20 64 65 6c 69 6d 20 3d 20 63 3b    int delim = c;
30b0: 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54  .        *tokenT
30c0: 79 70 65 20 3d 20 54 4b 5f 42 4c 4f 42 3b 0a 20  ype = TK_BLOB;. 
30d0: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 32 3b 20         for(i=2; 
30e0: 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b  (c=z[i])!=0; i++
30f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
3100: 20 63 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20   c==delim ){.   
3110: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 25 32           if( i%2
3120: 20 29 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20   ) *tokenType = 
3130: 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20  TK_ILLEGAL;.    
3140: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3150: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3160: 20 20 20 20 20 69 66 28 20 21 69 73 78 64 69 67       if( !isxdig
3170: 69 74 28 63 29 20 29 7b 0a 20 20 20 20 20 20 20  it(c) ){.       
3180: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
3190: 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20  = TK_ILLEGAL;.  
31a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31b0: 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   i;.          }.
31c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
31d0: 20 20 69 66 28 20 63 20 29 20 69 2b 2b 3b 0a 20    if( c ) i++;. 
31e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b         return i;
31f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
3200: 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
3210: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
3220: 6e 65 78 74 20 63 61 73 65 20 2a 2f 0a 20 20 20  next case */.   
3230: 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20   }.    default: 
3240: 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49 64 43  {.      if( !IdC
3250: 68 61 72 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20  har(*z) ){.     
3260: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
3270: 7d 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  }.      for(i=1;
3280: 20 49 64 43 68 61 72 28 7a 5b 69 5d 29 3b 20 69   IdChar(z[i]); i
3290: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f 6b  ++){}.      *tok
32a0: 65 6e 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33  enType = sqlite3
32b0: 4b 65 79 77 6f 72 64 43 6f 64 65 28 28 63 68 61  KeywordCode((cha
32c0: 72 2a 29 7a 2c 20 69 29 3b 0a 20 20 20 20 20 20  r*)z, i);.      
32d0: 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a  return i;.    }.
32e0: 20 20 7d 0a 20 20 2a 74 6f 6b 65 6e 54 79 70 65    }.  *tokenType
32f0: 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20   = TK_ILLEGAL;. 
3300: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
3310: 0a 2a 2a 20 52 75 6e 20 74 68 65 20 70 61 72 73  .** Run the pars
3320: 65 72 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20  er on the given 
3330: 53 51 4c 20 73 74 72 69 6e 67 2e 20 20 54 68 65  SQL string.  The
3340: 20 70 61 72 73 65 72 20 73 74 72 75 63 74 75 72   parser structur
3350: 65 20 69 73 0a 2a 2a 20 70 61 73 73 65 64 20 69  e is.** passed i
3360: 6e 2e 20 20 41 6e 20 53 51 4c 49 54 45 5f 20 73  n.  An SQLITE_ s
3370: 74 61 74 75 73 20 63 6f 64 65 20 69 73 20 72 65  tatus code is re
3380: 74 75 72 6e 65 64 2e 20 20 49 66 20 61 6e 20 65  turned.  If an e
3390: 72 72 6f 72 20 6f 63 63 75 72 73 0a 2a 2a 20 61  rror occurs.** a
33a0: 6e 64 20 70 7a 45 72 72 4d 73 67 21 3d 4e 55 4c  nd pzErrMsg!=NUL
33b0: 4c 20 74 68 65 6e 20 61 6e 20 65 72 72 6f 72 20  L then an error 
33c0: 6d 65 73 73 61 67 65 20 6d 69 67 68 74 20 62 65  message might be
33d0: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 0a 2a   written into .*
33e0: 2a 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  * memory obtaine
33f0: 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
3400: 61 6e 64 20 2a 70 7a 45 72 72 4d 73 67 20 6d 61  and *pzErrMsg ma
3410: 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  de to point to t
3420: 68 61 74 0a 2a 2a 20 65 72 72 6f 72 20 6d 65 73  hat.** error mes
3430: 73 61 67 65 2e 20 20 4f 72 20 6d 61 79 62 65 20  sage.  Or maybe 
3440: 6e 6f 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  not..*/.int sqli
3450: 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
3460: 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
3470: 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 63 68  t char *zSql, ch
3480: 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a  ar **pzErrMsg){.
3490: 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b 0a    int nErr = 0;.
34a0: 20 20 69 6e 74 20 69 3b 0a 20 20 76 6f 69 64 20    int i;.  void 
34b0: 2a 70 45 6e 67 69 6e 65 3b 0a 20 20 69 6e 74 20  *pEngine;.  int 
34c0: 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20 69 6e 74  tokenType;.  int
34d0: 20 6c 61 73 74 54 6f 6b 65 6e 50 61 72 73 65 64   lastTokenParsed
34e0: 20 3d 20 2d 31 3b 0a 20 20 73 71 6c 69 74 65 33   = -1;.  sqlite3
34f0: 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64   *db = pParse->d
3500: 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69 64  b;.  extern void
3510: 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
3520: 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 69 6e  lloc(void*(*)(in
3530: 74 29 29 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f  t));.  extern vo
3540: 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
3550: 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
3560: 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 20 20 65  (*)(void*));.  e
3570: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
3580: 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
3590: 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65  nt, Token, Parse
35a0: 2a 29 3b 0a 0a 20 20 64 62 2d 3e 66 6c 61 67 73  *);..  db->flags
35b0: 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 74 65   &= ~SQLITE_Inte
35c0: 72 72 75 70 74 3b 0a 20 20 70 50 61 72 73 65 2d  rrupt;.  pParse-
35d0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
35e0: 0a 20 20 69 20 3d 20 30 3b 0a 20 20 70 45 6e 67  .  i = 0;.  pEng
35f0: 69 6e 65 20 3d 20 73 71 6c 69 74 65 33 50 61 72  ine = sqlite3Par
3600: 73 65 72 41 6c 6c 6f 63 28 28 76 6f 69 64 2a 28  serAlloc((void*(
3610: 2a 29 28 69 6e 74 29 29 6d 61 6c 6c 6f 63 29 3b  *)(int))malloc);
3620: 0a 20 20 69 66 28 20 70 45 6e 67 69 6e 65 3d 3d  .  if( pEngine==
3630: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
3640: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
3650: 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  sg, "out of memo
3660: 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  ry", (char*)0);.
3670: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
3680: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 50 61 72  }.  assert( pPar
3690: 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e 64  se->sLastToken.d
36a0: 79 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  yn==0 );.  asser
36b0: 74 28 20 70 50 61 72 73 65 2d 3e 70 4e 65 77 54  t( pParse->pNewT
36c0: 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
36d0: 65 72 74 28 20 70 50 61 72 73 65 2d 3e 70 4e 65  ert( pParse->pNe
36e0: 77 54 72 69 67 67 65 72 3d 3d 30 20 29 3b 0a 20  wTrigger==0 );. 
36f0: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
3700: 3e 6e 56 61 72 3d 3d 30 20 29 3b 0a 20 20 61 73  >nVar==0 );.  as
3710: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 56  sert( pParse->nV
3720: 61 72 45 78 70 72 3d 3d 30 20 29 3b 0a 20 20 61  arExpr==0 );.  a
3730: 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e  ssert( pParse->n
3740: 56 61 72 45 78 70 72 41 6c 6c 6f 63 3d 3d 30 20  VarExprAlloc==0 
3750: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 61  );.  assert( pPa
3760: 72 73 65 2d 3e 61 70 56 61 72 45 78 70 72 3d 3d  rse->apVarExpr==
3770: 30 20 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a  0 );.  pParse->z
3780: 54 61 69 6c 20 3d 20 70 50 61 72 73 65 2d 3e 7a  Tail = pParse->z
3790: 53 71 6c 20 3d 20 7a 53 71 6c 3b 0a 20 20 77 68  Sql = zSql;.  wh
37a0: 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c  ile( sqlite3_mal
37b0: 6c 6f 63 5f 66 61 69 6c 65 64 3d 3d 30 20 26 26  loc_failed==0 &&
37c0: 20 7a 53 71 6c 5b 69 5d 21 3d 30 20 29 7b 0a 20   zSql[i]!=0 ){. 
37d0: 20 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20     assert( i>=0 
37e0: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 73  );.    pParse->s
37f0: 4c 61 73 74 54 6f 6b 65 6e 2e 7a 20 3d 20 26 7a  LastToken.z = &z
3800: 53 71 6c 5b 69 5d 3b 0a 20 20 20 20 61 73 73 65  Sql[i];.    asse
3810: 72 74 28 20 70 50 61 72 73 65 2d 3e 73 4c 61 73  rt( pParse->sLas
3820: 74 54 6f 6b 65 6e 2e 64 79 6e 3d 3d 30 20 29 3b  tToken.dyn==0 );
3830: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 73 4c 61  .    pParse->sLa
3840: 73 74 54 6f 6b 65 6e 2e 6e 20 3d 20 73 71 6c 69  stToken.n = sqli
3850: 74 65 47 65 74 54 6f 6b 65 6e 28 28 75 6e 73 69  teGetToken((unsi
3860: 67 6e 65 64 20 63 68 61 72 2a 29 26 7a 53 71 6c  gned char*)&zSql
3870: 5b 69 5d 2c 20 26 74 6f 6b 65 6e 54 79 70 65 29  [i], &tokenType)
3880: 3b 0a 20 20 20 20 69 20 2b 3d 20 70 50 61 72 73  ;.    i += pPars
3890: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e 6e 3b  e->sLastToken.n;
38a0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 74 6f 6b  .    switch( tok
38b0: 65 6e 54 79 70 65 20 29 7b 0a 20 20 20 20 20 20  enType ){.      
38c0: 63 61 73 65 20 54 4b 5f 53 50 41 43 45 3a 0a 20  case TK_SPACE:. 
38d0: 20 20 20 20 20 63 61 73 65 20 54 4b 5f 43 4f 4d       case TK_COM
38e0: 4d 45 4e 54 3a 20 7b 0a 20 20 20 20 20 20 20 20  MENT: {.        
38f0: 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
3900: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70   SQLITE_Interrup
3910: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)!=0 ){.       
3920: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
3930: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
3940: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
3950: 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45  te3SetString(pzE
3960: 72 72 4d 73 67 2c 20 22 69 6e 74 65 72 72 75 70  rrMsg, "interrup
3970: 74 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  t", (char*)0);. 
3980: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
3990: 6f 72 74 5f 70 61 72 73 65 3b 0a 20 20 20 20 20  ort_parse;.     
39a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65     }.        bre
39b0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
39c0: 20 20 63 61 73 65 20 54 4b 5f 49 4c 4c 45 47 41    case TK_ILLEGA
39d0: 4c 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  L: {.        if(
39e0: 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
39f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65         sqliteFre
3a00: 65 28 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  e(*pzErrMsg);.  
3a10: 20 20 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73          *pzErrMs
3a20: 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  g = sqlite3MPrin
3a30: 74 66 28 22 75 6e 72 65 63 6f 67 6e 69 7a 65 64  tf("unrecognized
3a40: 20 74 6f 6b 65 6e 3a 20 5c 22 25 54 5c 22 22 2c   token: \"%T\"",
3a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a60: 20 20 20 20 20 20 20 20 20 20 20 26 70 50 61 72             &pPar
3a70: 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 29 3b  se->sLastToken);
3a80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
3a90: 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20     nErr++;.     
3aa0: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 70 61     goto abort_pa
3ab0: 72 73 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  rse;.      }.   
3ac0: 20 20 20 63 61 73 65 20 54 4b 5f 53 45 4d 49 3a     case TK_SEMI:
3ad0: 20 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73   {.        pPars
3ae0: 65 2d 3e 7a 54 61 69 6c 20 3d 20 26 7a 53 71 6c  e->zTail = &zSql
3af0: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  [i];.        /* 
3b00: 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20 74  Fall thru into t
3b10: 68 65 20 64 65 66 61 75 6c 74 20 63 61 73 65 20  he default case 
3b20: 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  */.      }.     
3b30: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
3b40: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
3b50: 72 28 70 45 6e 67 69 6e 65 2c 20 74 6f 6b 65 6e  r(pEngine, token
3b60: 54 79 70 65 2c 20 70 50 61 72 73 65 2d 3e 73 4c  Type, pParse->sL
3b70: 61 73 74 54 6f 6b 65 6e 2c 20 70 50 61 72 73 65  astToken, pParse
3b80: 29 3b 0a 20 20 20 20 20 20 20 20 6c 61 73 74 54  );.        lastT
3b90: 6f 6b 65 6e 50 61 72 73 65 64 20 3d 20 74 6f 6b  okenParsed = tok
3ba0: 65 6e 54 79 70 65 3b 0a 20 20 20 20 20 20 20 20  enType;.        
3bb0: 69 66 28 20 70 50 61 72 73 65 2d 3e 72 63 21 3d  if( pParse->rc!=
3bc0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3bd0: 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
3be0: 74 5f 70 61 72 73 65 3b 0a 20 20 20 20 20 20 20  t_parse;.       
3bf0: 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b   }.        break
3c00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3c10: 20 20 7d 0a 61 62 6f 72 74 5f 70 61 72 73 65 3a    }.abort_parse:
3c20: 0a 20 20 69 66 28 20 7a 53 71 6c 5b 69 5d 3d 3d  .  if( zSql[i]==
3c30: 30 20 26 26 20 6e 45 72 72 3d 3d 30 20 26 26 20  0 && nErr==0 && 
3c40: 70 50 61 72 73 65 2d 3e 72 63 3d 3d 53 51 4c 49  pParse->rc==SQLI
3c50: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28  TE_OK ){.    if(
3c60: 20 6c 61 73 74 54 6f 6b 65 6e 50 61 72 73 65 64   lastTokenParsed
3c70: 21 3d 54 4b 5f 53 45 4d 49 20 29 7b 0a 20 20 20  !=TK_SEMI ){.   
3c80: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
3c90: 28 70 45 6e 67 69 6e 65 2c 20 54 4b 5f 53 45 4d  (pEngine, TK_SEM
3ca0: 49 2c 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74  I, pParse->sLast
3cb0: 54 6f 6b 65 6e 2c 20 70 50 61 72 73 65 29 3b 0a  Token, pParse);.
3cc0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 7a 54        pParse->zT
3cd0: 61 69 6c 20 3d 20 26 7a 53 71 6c 5b 69 5d 3b 0a  ail = &zSql[i];.
3ce0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
3cf0: 33 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65 2c  3Parser(pEngine,
3d00: 20 30 2c 20 70 50 61 72 73 65 2d 3e 73 4c 61 73   0, pParse->sLas
3d10: 74 54 6f 6b 65 6e 2c 20 70 50 61 72 73 65 29 3b  tToken, pParse);
3d20: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 50 61  .  }.  sqlite3Pa
3d30: 72 73 65 72 46 72 65 65 28 70 45 6e 67 69 6e 65  rserFree(pEngine
3d40: 2c 20 66 72 65 65 29 3b 0a 20 20 69 66 28 20 73  , free);.  if( s
3d50: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
3d60: 69 6c 65 64 20 29 7b 0a 20 20 20 20 70 50 61 72  iled ){.    pPar
3d70: 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f  se->rc = SQLITE_
3d80: 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69 66 28  NOMEM;.  }.  if(
3d90: 20 70 50 61 72 73 65 2d 3e 72 63 21 3d 53 51 4c   pParse->rc!=SQL
3da0: 49 54 45 5f 4f 4b 20 26 26 20 70 50 61 72 73 65  ITE_OK && pParse
3db0: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ->rc!=SQLITE_DON
3dc0: 45 20 26 26 20 70 50 61 72 73 65 2d 3e 7a 45 72  E && pParse->zEr
3dd0: 72 4d 73 67 3d 3d 30 20 29 7b 0a 20 20 20 20 73  rMsg==0 ){.    s
3de0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
3df0: 26 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67  &pParse->zErrMsg
3e00: 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
3e10: 70 50 61 72 73 65 2d 3e 72 63 29 2c 0a 20 20 20  pParse->rc),.   
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 7d 0a   (char*)0);.  }.
3e40: 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 7a 45    if( pParse->zE
3e50: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 69 66 28  rrMsg ){.    if(
3e60: 20 70 7a 45 72 72 4d 73 67 20 26 26 20 2a 70 7a   pzErrMsg && *pz
3e70: 45 72 72 4d 73 67 3d 3d 30 20 29 7b 0a 20 20 20  ErrMsg==0 ){.   
3e80: 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 70     *pzErrMsg = p
3e90: 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 3b 0a  Parse->zErrMsg;.
3ea0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3eb0: 20 73 71 6c 69 74 65 46 72 65 65 28 70 50 61 72   sqliteFree(pPar
3ec0: 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  se->zErrMsg);.  
3ed0: 20 20 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e    }.    pParse->
3ee0: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
3ef0: 20 69 66 28 20 21 6e 45 72 72 20 29 20 6e 45 72   if( !nErr ) nEr
3f00: 72 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  r++;.  }.  if( p
3f10: 50 61 72 73 65 2d 3e 70 56 64 62 65 20 26 26 20  Parse->pVdbe && 
3f20: 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 29  pParse->nErr>0 )
3f30: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
3f40: 65 44 65 6c 65 74 65 28 70 50 61 72 73 65 2d 3e  eDelete(pParse->
3f50: 70 56 64 62 65 29 3b 0a 20 20 20 20 70 50 61 72  pVdbe);.    pPar
3f60: 73 65 2d 3e 70 56 64 62 65 20 3d 20 30 3b 0a 20  se->pVdbe = 0;. 
3f70: 20 7d 0a 20 20 73 71 6c 69 74 65 33 44 65 6c 65   }.  sqlite3Dele
3f80: 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2d 3e  teTable(pParse->
3f90: 64 62 2c 20 70 50 61 72 73 65 2d 3e 70 4e 65 77  db, pParse->pNew
3fa0: 54 61 62 6c 65 29 3b 0a 20 20 73 71 6c 69 74 65  Table);.  sqlite
3fb0: 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 70  3DeleteTrigger(p
3fc0: 50 61 72 73 65 2d 3e 70 4e 65 77 54 72 69 67 67  Parse->pNewTrigg
3fd0: 65 72 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  er);.  sqliteFre
3fe0: 65 28 70 50 61 72 73 65 2d 3e 61 70 56 61 72 45  e(pParse->apVarE
3ff0: 78 70 72 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  xpr);.  if( nErr
4000: 3e 30 20 26 26 20 28 70 50 61 72 73 65 2d 3e 72  >0 && (pParse->r
4010: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4020: 70 50 61 72 73 65 2d 3e 72 63 3d 3d 53 51 4c 49  pParse->rc==SQLI
4030: 54 45 5f 44 4f 4e 45 29 20 29 7b 0a 20 20 20 20  TE_DONE) ){.    
4040: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c  pParse->rc = SQL
4050: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
4060: 20 72 65 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a   return nErr;.}.
4070: 0a 2f 2a 0a 2a 2a 20 54 6f 6b 65 6e 20 74 79 70  ./*.** Token typ
4080: 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 73  es used by the s
4090: 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28  qlite3_complete(
40a0: 29 20 72 6f 75 74 69 6e 65 2e 20 20 53 65 65 20  ) routine.  See 
40b0: 74 68 65 20 68 65 61 64 65 72 0a 2a 2a 20 63 6f  the header.** co
40c0: 6d 6d 65 6e 74 73 20 6f 6e 20 74 68 61 74 20 70  mments on that p
40d0: 72 6f 63 65 64 75 72 65 20 66 6f 72 20 61 64 64  rocedure for add
40e0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
40f0: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
4100: 74 6b 45 58 50 4c 41 49 4e 20 30 0a 23 64 65 66  tkEXPLAIN 0.#def
4110: 69 6e 65 20 74 6b 43 52 45 41 54 45 20 20 31 0a  ine tkCREATE  1.
4120: 23 64 65 66 69 6e 65 20 74 6b 54 45 4d 50 20 20  #define tkTEMP  
4130: 20 20 32 0a 23 64 65 66 69 6e 65 20 74 6b 54 52    2.#define tkTR
4140: 49 47 47 45 52 20 33 0a 23 64 65 66 69 6e 65 20  IGGER 3.#define 
4150: 74 6b 45 4e 44 20 20 20 20 20 34 0a 23 64 65 66  tkEND     4.#def
4160: 69 6e 65 20 74 6b 53 45 4d 49 20 20 20 20 35 0a  ine tkSEMI    5.
4170: 23 64 65 66 69 6e 65 20 74 6b 57 53 20 20 20 20  #define tkWS    
4180: 20 20 36 0a 23 64 65 66 69 6e 65 20 74 6b 4f 54    6.#define tkOT
4190: 48 45 52 20 20 20 37 0a 0a 2f 2a 0a 2a 2a 20 52  HER   7../*.** R
41a0: 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 74 68  eturn TRUE if th
41b0: 65 20 67 69 76 65 6e 20 53 51 4c 20 73 74 72 69  e given SQL stri
41c0: 6e 67 20 65 6e 64 73 20 69 6e 20 61 20 73 65 6d  ng ends in a sem
41d0: 69 63 6f 6c 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 70  icolon..**.** Sp
41e0: 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 69  ecial handling i
41f0: 73 20 72 65 71 75 69 72 65 20 66 6f 72 20 43 52  s require for CR
4200: 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61  EATE TRIGGER sta
4210: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20 57 68 65 6e  tements..** When
4220: 65 76 65 72 20 74 68 65 20 43 52 45 41 54 45 20  ever the CREATE 
4230: 54 52 49 47 47 45 52 20 6b 65 79 77 6f 72 64 73  TRIGGER keywords
4240: 20 61 72 65 20 73 65 65 6e 2c 20 74 68 65 20 73   are seen, the s
4250: 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 6d 75 73 74  tatement.** must
4260: 20 65 6e 64 20 77 69 74 68 20 22 3b 45 4e 44 3b   end with ";END;
4270: 22 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6d  "..**.** This im
4280: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73 65  plementation use
4290: 73 20 61 20 73 74 61 74 65 20 6d 61 63 68 69 6e  s a state machin
42a0: 65 20 77 69 74 68 20 37 20 73 74 61 74 65 73 3a  e with 7 states:
42b0: 0a 2a 2a 0a 2a 2a 20 20 20 28 30 29 20 53 54 41  .**.**   (0) STA
42c0: 52 54 20 20 20 20 20 41 74 20 74 68 65 20 62 65  RT     At the be
42d0: 67 69 6e 6e 69 6e 67 20 6f 72 20 65 6e 64 20 6f  ginning or end o
42e0: 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  f an SQL stateme
42f0: 6e 74 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e  nt.  This routin
4300: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
4310: 20 20 20 20 20 72 65 74 75 72 6e 73 20 31 20 69       returns 1 i
4320: 66 20 69 74 20 65 6e 64 73 20 69 6e 20 74 68 65  f it ends in the
4330: 20 53 54 41 52 54 20 73 74 61 74 65 20 61 6e 64   START state and
4340: 20 30 20 69 66 20 69 74 20 65 6e 64 73 0a 2a 2a   0 if it ends.**
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 69 6e 20 61 6e 79 20 6f 74 68 65 72 20 73 74   in any other st
4370: 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29  ate..**.**   (1)
4380: 20 45 58 50 4c 41 49 4e 20 20 20 54 68 65 20 6b   EXPLAIN   The k
4390: 65 79 77 6f 72 64 20 45 58 50 4c 41 49 4e 20 68  eyword EXPLAIN h
43a0: 61 73 20 62 65 65 6e 20 73 65 65 6e 20 61 74 20  as been seen at 
43b0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
43c0: 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
43d0: 20 20 20 20 20 61 20 73 74 61 74 65 6d 65 6e 74       a statement
43e0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32 29 20 43 52  ..**.**   (2) CR
43f0: 45 41 54 45 20 20 20 20 54 68 65 20 6b 65 79 77  EATE    The keyw
4400: 6f 72 64 20 43 52 45 41 54 45 20 68 61 73 20 62  ord CREATE has b
4410: 65 65 6e 20 73 65 65 6e 20 61 74 20 74 68 65 20  een seen at the 
4420: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 0a 2a  beginning of a.*
4430: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
4440: 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 70 6f 73    statement, pos
4450: 73 69 62 6c 79 20 70 72 65 63 65 65 64 65 64 20  sibly preceeded 
4460: 62 79 20 45 58 50 4c 41 49 4e 20 61 6e 64 2f 6f  by EXPLAIN and/o
4470: 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 2a 2a  r followed by.**
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41   TEMP or TEMPORA
44a0: 52 59 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 4e  RY.**.**   (3) N
44b0: 4f 52 4d 41 4c 20 20 20 20 57 65 20 61 72 65 20  ORMAL    We are 
44c0: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
44d0: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 69 63 68   statement which
44e0: 20 65 6e 64 73 20 77 69 74 68 20 61 20 73 69 6e   ends with a sin
44f0: 67 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  gle.**          
4500: 20 20 20 20 20 20 20 73 65 6d 69 63 6f 6c 6f 6e         semicolon
4510: 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 34 29 20 54 52  ..**.**   (4) TR
4520: 49 47 47 45 52 20 20 20 57 65 20 61 72 65 20 69  IGGER   We are i
4530: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
4540: 61 20 74 72 69 67 67 65 72 20 64 65 66 69 6e 69  a trigger defini
4550: 74 69 6f 6e 20 74 68 61 74 20 6d 75 73 74 20 62  tion that must b
4560: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
4570: 20 20 20 20 20 65 6e 64 65 64 20 62 79 20 61 20       ended by a 
4580: 73 65 6d 69 63 6f 6c 6f 6e 2c 20 74 68 65 20 6b  semicolon, the k
4590: 65 79 77 6f 72 64 20 45 4e 44 2c 20 61 6e 64 20  eyword END, and 
45a0: 61 6e 6f 74 68 65 72 20 73 65 6d 69 63 6f 6c 6f  another semicolo
45b0: 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 35 29 20 53  n..**.**   (5) S
45c0: 45 4d 49 20 20 20 20 20 20 57 65 27 76 65 20 73  EMI      We've s
45d0: 65 65 6e 20 74 68 65 20 66 69 72 73 74 20 73 65  een the first se
45e0: 6d 69 63 6f 6c 6f 6e 20 69 6e 20 74 68 65 20 22  micolon in the "
45f0: 3b 45 4e 44 3b 22 20 74 68 61 74 20 6f 63 63 75  ;END;" that occu
4600: 72 73 20 61 74 0a 2a 2a 20 20 20 20 20 20 20 20  rs at.**        
4610: 20 20 20 20 20 20 20 20 20 74 68 65 20 65 6e 64           the end
4620: 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 64 65   of a trigger de
4630: 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
4640: 20 20 28 36 29 20 45 4e 44 20 20 20 20 20 20 20    (6) END       
4650: 57 65 27 76 65 20 73 65 65 6e 20 74 68 65 20 22  We've seen the "
4660: 3b 45 4e 44 22 20 6f 66 20 74 68 65 20 22 3b 45  ;END" of the ";E
4670: 4e 44 3b 22 20 74 68 61 74 20 6f 63 63 75 72 73  ND;" that occurs
4680: 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 20   at the end.**  
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
46a0: 66 20 61 20 74 72 69 67 67 65 72 20 64 69 66 69  f a trigger difi
46b0: 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 72  nition..**.** Tr
46c0: 61 6e 73 69 74 69 6f 6e 73 20 62 65 74 77 65 65  ansitions betwee
46d0: 6e 20 73 74 61 74 65 73 20 61 62 6f 76 65 20 61  n states above a
46e0: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re determined by
46f0: 20 74 6f 6b 65 6e 73 20 65 78 74 72 61 63 74 65   tokens extracte
4700: 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 69 6e  d.** from the in
4710: 70 75 74 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  put.  The follow
4720: 69 6e 67 20 74 6f 6b 65 6e 73 20 61 72 65 20 73  ing tokens are s
4730: 69 67 6e 69 66 69 63 61 6e 74 3a 0a 2a 2a 0a 2a  ignificant:.**.*
4740: 2a 20 20 20 28 30 29 20 74 6b 45 58 50 4c 41 49  *   (0) tkEXPLAI
4750: 4e 20 20 20 54 68 65 20 22 65 78 70 6c 61 69 6e  N   The "explain
4760: 22 20 6b 65 79 77 6f 72 64 2e 0a 2a 2a 20 20 20  " keyword..**   
4770: 28 31 29 20 74 6b 43 52 45 41 54 45 20 20 20 20  (1) tkCREATE    
4780: 54 68 65 20 22 63 72 65 61 74 65 22 20 6b 65 79  The "create" key
4790: 77 6f 72 64 2e 0a 2a 2a 20 20 20 28 32 29 20 74  word..**   (2) t
47a0: 6b 54 45 4d 50 20 20 20 20 20 20 54 68 65 20 22  kTEMP      The "
47b0: 74 65 6d 70 22 20 6f 72 20 22 74 65 6d 70 6f 72  temp" or "tempor
47c0: 61 72 79 22 20 6b 65 79 77 6f 72 64 2e 0a 2a 2a  ary" keyword..**
47d0: 20 20 20 28 33 29 20 74 6b 54 52 49 47 47 45 52     (3) tkTRIGGER
47e0: 20 20 20 54 68 65 20 22 74 72 69 67 67 65 72 22     The "trigger"
47f0: 20 6b 65 79 77 6f 72 64 2e 0a 2a 2a 20 20 20 28   keyword..**   (
4800: 34 29 20 74 6b 45 4e 44 20 20 20 20 20 20 20 54  4) tkEND       T
4810: 68 65 20 22 65 6e 64 22 20 6b 65 79 77 6f 72 64  he "end" keyword
4820: 2e 0a 2a 2a 20 20 20 28 35 29 20 74 6b 53 45 4d  ..**   (5) tkSEM
4830: 49 20 20 20 20 20 20 41 20 73 65 6d 69 63 6f 6c  I      A semicol
4840: 6f 6e 2e 0a 2a 2a 20 20 20 28 36 29 20 74 6b 57  on..**   (6) tkW
4850: 53 20 20 20 20 20 20 20 20 57 68 69 74 65 73 70  S        Whitesp
4860: 61 63 65 0a 2a 2a 20 20 20 28 37 29 20 74 6b 4f  ace.**   (7) tkO
4870: 54 48 45 52 20 20 20 20 20 41 6e 79 20 6f 74 68  THER     Any oth
4880: 65 72 20 53 51 4c 20 74 6f 6b 65 6e 2e 0a 2a 2a  er SQL token..**
4890: 0a 2a 2a 20 57 68 69 74 65 73 70 61 63 65 20 6e  .** Whitespace n
48a0: 65 76 65 72 20 63 61 75 73 65 73 20 61 20 73 74  ever causes a st
48b0: 61 74 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 61  ate transition a
48c0: 6e 64 20 69 73 20 61 6c 77 61 79 73 20 69 67 6e  nd is always ign
48d0: 6f 72 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ored..*/.int sql
48e0: 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 63 6f  ite3_complete(co
48f0: 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b  nst char *zSql){
4900: 0a 20 20 75 38 20 73 74 61 74 65 20 3d 20 30 3b  .  u8 state = 0;
4910: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 74     /* Current st
4920: 61 74 65 2c 20 75 73 69 6e 67 20 6e 75 6d 62 65  ate, using numbe
4930: 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20 68 65  rs defined in he
4940: 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 2a 2f 0a  ader comment */.
4950: 20 20 75 38 20 74 6f 6b 65 6e 3b 20 20 20 20 20    u8 token;     
4960: 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 74 68    /* Value of th
4970: 65 20 6e 65 78 74 20 74 6f 6b 65 6e 20 2a 2f 0a  e next token */.
4980: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
4990: 69 6e 67 20 6d 61 74 72 69 78 20 64 65 66 69 6e  ing matrix defin
49a0: 65 73 20 74 68 65 20 74 72 61 6e 73 69 74 69 6f  es the transitio
49b0: 6e 20 66 72 6f 6d 20 6f 6e 65 20 73 74 61 74 65  n from one state
49c0: 20 74 6f 20 61 6e 6f 74 68 65 72 0a 20 20 2a 2a   to another.  **
49d0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 77 68   according to wh
49e0: 61 74 20 74 6f 6b 65 6e 20 69 73 20 73 65 65 6e  at token is seen
49f0: 2e 20 20 74 72 61 6e 73 5b 73 74 61 74 65 5d 5b  .  trans[state][
4a00: 74 6f 6b 65 6e 5d 20 72 65 74 75 72 6e 73 20 74  token] returns t
4a10: 68 65 0a 20 20 2a 2a 20 6e 65 78 74 20 73 74 61  he.  ** next sta
4a20: 74 65 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69  te..  */.  stati
4a30: 63 20 63 6f 6e 73 74 20 75 38 20 74 72 61 6e 73  c const u8 trans
4a40: 5b 37 5d 5b 38 5d 20 3d 20 7b 0a 20 20 20 20 20  [7][8] = {.     
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a60: 2f 2a 20 54 6f 6b 65 6e 3a 20 20 20 20 20 20 20  /* Token:       
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a90: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20           */.    
4aa0: 20 2f 2a 20 53 74 61 74 65 3a 20 20 20 20 20 20   /* State:      
4ab0: 20 2a 2a 20 20 45 58 50 4c 41 49 4e 20 20 43 52   **  EXPLAIN  CR
4ac0: 45 41 54 45 20 20 54 45 4d 50 20 20 54 52 49 47  EATE  TEMP  TRIG
4ad0: 47 45 52 20 20 45 4e 44 20 20 53 45 4d 49 20 20  GER  END  SEMI  
4ae0: 57 53 20 20 4f 54 48 45 52 20 2a 2f 0a 20 20 20  WS  OTHER */.   
4af0: 20 20 2f 2a 20 30 20 20 20 53 54 41 52 54 3a 20    /* 0   START: 
4b00: 2a 2f 20 7b 20 20 20 20 20 20 20 31 2c 20 20 20  */ {       1,   
4b10: 20 20 20 32 2c 20 20 20 20 33 2c 20 20 20 20 20     2,    3,     
4b20: 20 20 33 2c 20 20 20 33 2c 20 20 20 20 30 2c 20    3,   3,    0, 
4b30: 20 30 2c 20 20 20 20 20 33 2c 20 7d 2c 0a 20 20   0,     3, },.  
4b40: 20 20 20 2f 2a 20 31 20 45 58 50 4c 41 49 4e 3a     /* 1 EXPLAIN:
4b50: 20 2a 2f 20 7b 20 20 20 20 20 20 20 33 2c 20 20   */ {       3,  
4b60: 20 20 20 20 32 2c 20 20 20 20 33 2c 20 20 20 20      2,    3,    
4b70: 20 20 20 33 2c 20 20 20 33 2c 20 20 20 20 30 2c     3,   3,    0,
4b80: 20 20 31 2c 20 20 20 20 20 33 2c 20 7d 2c 0a 20    1,     3, },. 
4b90: 20 20 20 20 2f 2a 20 32 20 20 43 52 45 41 54 45      /* 2  CREATE
4ba0: 3a 20 2a 2f 20 7b 20 20 20 20 20 20 20 33 2c 20  : */ {       3, 
4bb0: 20 20 20 20 20 33 2c 20 20 20 20 32 2c 20 20 20       3,    2,   
4bc0: 20 20 20 20 34 2c 20 20 20 33 2c 20 20 20 20 30      4,   3,    0
4bd0: 2c 20 20 32 2c 20 20 20 20 20 33 2c 20 7d 2c 0a  ,  2,     3, },.
4be0: 20 20 20 20 20 2f 2a 20 33 20 20 4e 4f 52 4d 41       /* 3  NORMA
4bf0: 4c 3a 20 2a 2f 20 7b 20 20 20 20 20 20 20 33 2c  L: */ {       3,
4c00: 20 20 20 20 20 20 33 2c 20 20 20 20 33 2c 20 20        3,    3,  
4c10: 20 20 20 20 20 33 2c 20 20 20 33 2c 20 20 20 20       3,   3,    
4c20: 30 2c 20 20 33 2c 20 20 20 20 20 33 2c 20 7d 2c  0,  3,     3, },
4c30: 0a 20 20 20 20 20 2f 2a 20 34 20 54 52 49 47 47  .     /* 4 TRIGG
4c40: 45 52 3a 20 2a 2f 20 7b 20 20 20 20 20 20 20 34  ER: */ {       4
4c50: 2c 20 20 20 20 20 20 34 2c 20 20 20 20 34 2c 20  ,      4,    4, 
4c60: 20 20 20 20 20 20 34 2c 20 20 20 34 2c 20 20 20        4,   4,   
4c70: 20 35 2c 20 20 34 2c 20 20 20 20 20 34 2c 20 7d   5,  4,     4, }
4c80: 2c 0a 20 20 20 20 20 2f 2a 20 35 20 20 20 20 53  ,.     /* 5    S
4c90: 45 4d 49 3a 20 2a 2f 20 7b 20 20 20 20 20 20 20  EMI: */ {       
4ca0: 34 2c 20 20 20 20 20 20 34 2c 20 20 20 20 34 2c  4,      4,    4,
4cb0: 20 20 20 20 20 20 20 34 2c 20 20 20 36 2c 20 20         4,   6,  
4cc0: 20 20 35 2c 20 20 35 2c 20 20 20 20 20 34 2c 20    5,  5,     4, 
4cd0: 7d 2c 0a 20 20 20 20 20 2f 2a 20 36 20 20 20 20  },.     /* 6    
4ce0: 20 45 4e 44 3a 20 2a 2f 20 7b 20 20 20 20 20 20   END: */ {      
4cf0: 20 34 2c 20 20 20 20 20 20 34 2c 20 20 20 20 34   4,      4,    4
4d00: 2c 20 20 20 20 20 20 20 34 2c 20 20 20 34 2c 20  ,       4,   4, 
4d10: 20 20 20 30 2c 20 20 36 2c 20 20 20 20 20 34 2c     0,  6,     4,
4d20: 20 7d 2c 0a 20 20 7d 3b 0a 0a 20 20 77 68 69 6c   },.  };..  whil
4d30: 65 28 20 2a 7a 53 71 6c 20 29 7b 0a 20 20 20 20  e( *zSql ){.    
4d40: 73 77 69 74 63 68 28 20 2a 7a 53 71 6c 20 29 7b  switch( *zSql ){
4d50: 0a 20 20 20 20 20 20 63 61 73 65 20 27 3b 27 3a  .      case ';':
4d60: 20 7b 20 20 2f 2a 20 41 20 73 65 6d 69 63 6f 6c   {  /* A semicol
4d70: 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 74 6f  on */.        to
4d80: 6b 65 6e 20 3d 20 74 6b 53 45 4d 49 3b 0a 20 20  ken = tkSEMI;.  
4d90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4da0: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
4db0: 27 20 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20  ' ':.      case 
4dc0: 27 5c 72 27 3a 0a 20 20 20 20 20 20 63 61 73 65  '\r':.      case
4dd0: 20 27 5c 74 27 3a 0a 20 20 20 20 20 20 63 61 73   '\t':.      cas
4de0: 65 20 27 5c 6e 27 3a 0a 20 20 20 20 20 20 63 61  e '\n':.      ca
4df0: 73 65 20 27 5c 66 27 3a 20 7b 20 20 2f 2a 20 57  se '\f': {  /* W
4e00: 68 69 74 65 20 73 70 61 63 65 20 69 73 20 69 67  hite space is ig
4e10: 6e 6f 72 65 64 20 2a 2f 0a 20 20 20 20 20 20 20  nored */.       
4e20: 20 74 6f 6b 65 6e 20 3d 20 74 6b 57 53 3b 0a 20   token = tkWS;. 
4e30: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4e40: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
4e50: 20 27 2f 27 3a 20 7b 20 20 20 2f 2a 20 43 2d 73   '/': {   /* C-s
4e60: 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 2a 2f  tyle comments */
4e70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 53 71  .        if( zSq
4e80: 6c 5b 31 5d 21 3d 27 2a 27 20 29 7b 0a 20 20 20  l[1]!='*' ){.   
4e90: 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74         token = t
4ea0: 6b 4f 54 48 45 52 3b 0a 20 20 20 20 20 20 20 20  kOTHER;.        
4eb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
4ec0: 20 7d 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20   }.        zSql 
4ed0: 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 77 68  += 2;.        wh
4ee0: 69 6c 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20  ile( zSql[0] && 
4ef0: 28 7a 53 71 6c 5b 30 5d 21 3d 27 2a 27 20 7c 7c  (zSql[0]!='*' ||
4f00: 20 7a 53 71 6c 5b 31 5d 21 3d 27 2f 27 29 20 29   zSql[1]!='/') )
4f10: 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20  { zSql++; }.    
4f20: 20 20 20 20 69 66 28 20 7a 53 71 6c 5b 30 5d 3d      if( zSql[0]=
4f30: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
4f40: 20 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20         zSql++;. 
4f50: 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74         token = t
4f60: 6b 57 53 3b 0a 20 20 20 20 20 20 20 20 62 72 65  kWS;.        bre
4f70: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
4f80: 20 20 63 61 73 65 20 27 2d 27 3a 20 7b 20 20 20    case '-': {   
4f90: 2f 2a 20 53 51 4c 2d 73 74 79 6c 65 20 63 6f 6d  /* SQL-style com
4fa0: 6d 65 6e 74 73 20 66 72 6f 6d 20 22 2d 2d 22 20  ments from "--" 
4fb0: 74 6f 20 65 6e 64 20 6f 66 20 6c 69 6e 65 20 2a  to end of line *
4fc0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 53  /.        if( zS
4fd0: 71 6c 5b 31 5d 21 3d 27 2d 27 20 29 7b 0a 20 20  ql[1]!='-' ){.  
4fe0: 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20          token = 
4ff0: 74 6b 4f 54 48 45 52 3b 0a 20 20 20 20 20 20 20  tkOTHER;.       
5000: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5010: 20 20 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c    }.        whil
5020: 65 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53 71  e( *zSql && *zSq
5030: 6c 21 3d 27 5c 6e 27 20 29 7b 20 7a 53 71 6c 2b  l!='\n' ){ zSql+
5040: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  +; }.        if(
5050: 20 2a 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75   *zSql==0 ) retu
5060: 72 6e 20 73 74 61 74 65 3d 3d 30 3b 0a 20 20 20  rn state==0;.   
5070: 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74 6b 57       token = tkW
5080: 53 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  S;.        break
5090: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
50a0: 63 61 73 65 20 27 5b 27 3a 20 7b 20 20 20 2f 2a  case '[': {   /*
50b0: 20 4d 69 63 72 6f 73 6f 66 74 2d 73 74 79 6c 65   Microsoft-style
50c0: 20 69 64 65 6e 74 69 66 69 65 72 73 20 69 6e 20   identifiers in 
50d0: 5b 2e 2e 2e 5d 20 2a 2f 0a 20 20 20 20 20 20 20  [...] */.       
50e0: 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20   zSql++;.       
50f0: 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c 20 26 26   while( *zSql &&
5100: 20 2a 7a 53 71 6c 21 3d 27 5d 27 20 29 7b 20 7a   *zSql!=']' ){ z
5110: 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  Sql++; }.       
5120: 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30 20 29 20   if( *zSql==0 ) 
5130: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
5140: 20 20 74 6f 6b 65 6e 20 3d 20 74 6b 4f 54 48 45    token = tkOTHE
5150: 52 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  R;.        break
5160: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5170: 63 61 73 65 20 27 22 27 3a 20 20 20 20 20 2f 2a  case '"':     /*
5180: 20 73 69 6e 67 6c 65 2d 20 61 6e 64 20 64 6f 75   single- and dou
5190: 62 6c 65 2d 71 75 6f 74 65 64 20 73 74 72 69 6e  ble-quoted strin
51a0: 67 73 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65  gs */.      case
51b0: 20 27 5c 27 27 3a 20 7b 0a 20 20 20 20 20 20 20   '\'': {.       
51c0: 20 69 6e 74 20 63 20 3d 20 2a 7a 53 71 6c 3b 0a   int c = *zSql;.
51d0: 20 20 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a          zSql++;.
51e0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a          while( *
51f0: 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 63  zSql && *zSql!=c
5200: 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20   ){ zSql++; }.  
5210: 20 20 20 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d        if( *zSql=
5220: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
5230: 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74         token = t
5240: 6b 4f 54 48 45 52 3b 0a 20 20 20 20 20 20 20 20  kOTHER;.        
5250: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5260: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
5270: 20 20 20 20 20 20 20 20 69 6e 74 20 63 3b 0a 20          int c;. 
5280: 20 20 20 20 20 20 20 69 66 28 20 49 64 43 68 61         if( IdCha
5290: 72 28 28 75 38 29 2a 7a 53 71 6c 29 20 29 7b 0a  r((u8)*zSql) ){.
52a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4b 65 79            /* Key
52b0: 77 6f 72 64 73 20 61 6e 64 20 75 6e 71 75 6f 74  words and unquot
52c0: 65 64 20 69 64 65 6e 74 69 66 69 65 72 73 20 2a  ed identifiers *
52d0: 2f 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  /.          int 
52e0: 6e 49 64 3b 0a 20 20 20 20 20 20 20 20 20 20 66  nId;.          f
52f0: 6f 72 28 6e 49 64 3d 31 3b 20 49 64 43 68 61 72  or(nId=1; IdChar
5300: 28 7a 53 71 6c 5b 6e 49 64 5d 29 3b 20 6e 49 64  (zSql[nId]); nId
5310: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 20 20  ++){}.          
5320: 73 77 69 74 63 68 28 20 2a 7a 53 71 6c 20 29 7b  switch( *zSql ){
5330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
5340: 65 20 27 63 27 3a 20 63 61 73 65 20 27 43 27 3a  e 'c': case 'C':
5350: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5360: 20 69 66 28 20 6e 49 64 3d 3d 36 20 26 26 20 73   if( nId==6 && s
5370: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
5380: 53 71 6c 2c 20 22 63 72 65 61 74 65 22 2c 20 36  Sql, "create", 6
5390: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
53a0: 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20          token = 
53b0: 74 6b 43 52 45 41 54 45 3b 0a 20 20 20 20 20 20  tkCREATE;.      
53c0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
53e0: 6f 6b 65 6e 20 3d 20 74 6b 4f 54 48 45 52 3b 0a  oken = tkOTHER;.
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
5400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
5410: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
5420: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   }.            c
5430: 61 73 65 20 27 74 27 3a 20 63 61 73 65 20 27 54  ase 't': case 'T
5440: 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ': {.           
5450: 20 20 20 69 66 28 20 6e 49 64 3d 3d 37 20 26 26     if( nId==7 &&
5460: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
5470: 28 7a 53 71 6c 2c 20 22 74 72 69 67 67 65 72 22  (zSql, "trigger"
5480: 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 7)==0 ){.     
5490: 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65 6e             token
54a0: 20 3d 20 74 6b 54 52 49 47 47 45 52 3b 0a 20 20   = tkTRIGGER;.  
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
54c0: 65 20 69 66 28 20 6e 49 64 3d 3d 34 20 26 26 20  e if( nId==4 && 
54d0: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
54e0: 7a 53 71 6c 2c 20 22 74 65 6d 70 22 2c 20 34 29  zSql, "temp", 4)
54f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
5500: 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74         token = t
5510: 6b 54 45 4d 50 3b 0a 20 20 20 20 20 20 20 20 20  kTEMP;.         
5520: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e       }else if( n
5530: 49 64 3d 3d 39 20 26 26 20 73 71 6c 69 74 65 33  Id==9 && sqlite3
5540: 53 74 72 4e 49 43 6d 70 28 7a 53 71 6c 2c 20 22  StrNICmp(zSql, "
5550: 74 65 6d 70 6f 72 61 72 79 22 2c 20 39 29 3d 3d  temporary", 9)==
5560: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
5570: 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74 6b 54       token = tkT
5580: 45 4d 50 3b 0a 20 20 20 20 20 20 20 20 20 20 20  EMP;.           
5590: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
55a0: 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20            token 
55b0: 3d 20 74 6b 4f 54 48 45 52 3b 0a 20 20 20 20 20  = tkOTHER;.     
55c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
55d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
55f0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27            case '
5600: 65 27 3a 20 20 63 61 73 65 20 27 45 27 3a 20 7b  e':  case 'E': {
5610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
5620: 66 28 20 6e 49 64 3d 3d 33 20 26 26 20 73 71 6c  f( nId==3 && sql
5630: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 53 71  ite3StrNICmp(zSq
5640: 6c 2c 20 22 65 6e 64 22 2c 20 33 29 3d 3d 30 20  l, "end", 3)==0 
5650: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
5660: 20 20 20 74 6f 6b 65 6e 20 3d 20 74 6b 45 4e 44     token = tkEND
5670: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5680: 7d 65 6c 73 65 20 69 66 28 20 6e 49 64 3d 3d 37  }else if( nId==7
5690: 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49   && sqlite3StrNI
56a0: 43 6d 70 28 7a 53 71 6c 2c 20 22 65 78 70 6c 61  Cmp(zSql, "expla
56b0: 69 6e 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  in", 7)==0 ){.  
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
56d0: 6b 65 6e 20 3d 20 74 6b 45 58 50 4c 41 49 4e 3b  ken = tkEXPLAIN;
56e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
56f0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
5700: 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 74 6b        token = tk
5710: 4f 54 48 45 52 3b 0a 20 20 20 20 20 20 20 20 20  OTHER;.         
5720: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
5730: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5740: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5750: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
5760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
5770: 6f 6b 65 6e 20 3d 20 74 6b 4f 54 48 45 52 3b 0a  oken = tkOTHER;.
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
5790: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  eak;.           
57a0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
57b0: 20 20 20 20 20 20 20 20 20 7a 53 71 6c 20 2b 3d           zSql +=
57c0: 20 6e 49 64 2d 31 3b 0a 20 20 20 20 20 20 20 20   nId-1;.        
57d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
57e0: 20 2f 2a 20 4f 70 65 72 61 74 6f 72 73 20 61 6e   /* Operators an
57f0: 64 20 73 70 65 63 69 61 6c 20 73 79 6d 62 6f 6c  d special symbol
5800: 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 74  s */.          t
5810: 6f 6b 65 6e 20 3d 20 74 6b 4f 54 48 45 52 3b 0a  oken = tkOTHER;.
5820: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5830: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
5840: 0a 20 20 20 20 7d 0a 20 20 20 20 73 74 61 74 65  .    }.    state
5850: 20 3d 20 74 72 61 6e 73 5b 73 74 61 74 65 5d 5b   = trans[state][
5860: 74 6f 6b 65 6e 5d 3b 0a 20 20 20 20 7a 53 71 6c  token];.    zSql
5870: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
5880: 20 73 74 61 74 65 3d 3d 30 3b 0a 7d 0a 0a 2f 2a   state==0;.}../*
5890: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
58a0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
58b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  the sqlite3_comp
58c0: 6c 65 74 65 28 29 20 72 6f 75 74 69 6e 65 20 64  lete() routine d
58d0: 65 73 63 72 69 62 65 64 0a 2a 2a 20 61 62 6f 76  escribed.** abov
58e0: 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74  e, except that t
58f0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
5900: 72 65 71 75 69 72 65 64 20 74 6f 20 62 65 20 55  required to be U
5910: 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 2c 20 6e  TF-16 encoded, n
5920: 6f 74 0a 2a 2a 20 55 54 46 2d 38 2e 0a 2a 2f 0a  ot.** UTF-8..*/.
5930: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  int sqlite3_comp
5940: 6c 65 74 65 31 36 28 63 6f 6e 73 74 20 76 6f 69  lete16(const voi
5950: 64 20 2a 7a 53 71 6c 29 7b 0a 20 20 73 71 6c 69  d *zSql){.  sqli
5960: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
5970: 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a  .  char const *z
5980: 53 71 6c 38 3b 0a 20 20 69 6e 74 20 72 63 20 3d  Sql8;.  int rc =
5990: 20 30 3b 0a 0a 20 20 70 56 61 6c 20 3d 20 73 71   0;..  pVal = sq
59a0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
59b0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
59c0: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
59d0: 7a 53 71 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  zSql, SQLITE_UTF
59e0: 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45  16NATIVE, SQLITE
59f0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 53 71 6c  _STATIC);.  zSql
5a00: 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  8 = sqlite3Value
5a10: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
5a20: 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 7a  E_UTF8);.  if( z
5a30: 53 71 6c 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  Sql8 ){.    rc =
5a40: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
5a50: 65 28 7a 53 71 6c 38 29 3b 0a 20 20 7d 0a 20 20  e(zSql8);.  }.  
5a60: 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
5a70: 28 70 56 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e  (pVal);.  return
5a80: 20 72 63 3b 0a 7d 0a                              rc;.}.