/ Hex Artifact Content
Login

Artifact bfdc945527a4645bf54c8bf34d1f18c019b37117:


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 31 34 38 20  enize.c,v 1.148 
0250: 32 30 30 38 2f 30 37 2f 32 38 20 31 39 3a 33 34  2008/07/28 19:34
0260: 3a 35 34 20 64 72 68 20 45 78 70 20 24 0a 2a 2f  :54 drh Exp $.*/
0270: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
0280: 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65  eInt.h".#include
0290: 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e 63 6c   <ctype.h>.#incl
02a0: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 0a  ude <stdlib.h>..
02b0: 2f 2a 0a 2a 2a 20 54 68 65 20 63 68 61 72 4d 61  /*.** The charMa
02c0: 70 28 29 20 6d 61 63 72 6f 20 6d 61 70 73 20 61  p() macro maps a
02d0: 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61 63  lphabetic charac
02e0: 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69 72 0a  ters into their.
02f0: 2a 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20 41 53  ** lower-case AS
0300: 43 49 49 20 65 71 75 69 76 61 6c 65 6e 74 2e 20  CII equivalent. 
0310: 20 4f 6e 20 41 53 43 49 49 20 6d 61 63 68 69 6e   On ASCII machin
0320: 65 73 2c 20 74 68 69 73 20 69 73 20 6a 75 73 74  es, this is just
0330: 0a 2a 2a 20 61 6e 20 75 70 70 65 72 2d 74 6f 2d  .** an upper-to-
0340: 6c 6f 77 65 72 20 63 61 73 65 20 6d 61 70 2e 20  lower case map. 
0350: 20 4f 6e 20 45 42 43 44 49 43 20 6d 61 63 68 69   On EBCDIC machi
0360: 6e 65 73 20 77 65 20 61 6c 73 6f 20 6e 65 65 64  nes we also need
0370: 0a 2a 2a 20 74 6f 20 61 64 6a 75 73 74 20 74 68  .** to adjust th
0380: 65 20 65 6e 63 6f 64 69 6e 67 2e 20 20 4f 6e 6c  e encoding.  Onl
0390: 79 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61  y alphabetic cha
03a0: 72 61 63 74 65 72 73 20 61 6e 64 20 75 6e 64 65  racters and unde
03b0: 72 73 63 6f 72 65 73 0a 2a 2a 20 6e 65 65 64 20  rscores.** need 
03c0: 74 6f 20 62 65 20 74 72 61 6e 73 6c 61 74 65 64  to be translated
03d0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
03e0: 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
03f0: 65 20 63 68 61 72 4d 61 70 28 58 29 20 73 71 6c  e charMap(X) sql
0400: 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
0410: 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
0420: 58 5d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  X].#endif.#ifdef
0430: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 0a 23   SQLITE_EBCDIC.#
0440: 20 64 65 66 69 6e 65 20 63 68 61 72 4d 61 70 28   define charMap(
0450: 58 29 20 65 62 63 64 69 63 54 6f 41 73 63 69 69  X) ebcdicToAscii
0460: 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
0470: 58 5d 0a 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  X].const unsigne
0480: 64 20 63 68 61 72 20 65 62 63 64 69 63 54 6f 41  d char ebcdicToA
0490: 73 63 69 69 5b 5d 20 3d 20 7b 0a 2f 2a 20 30 20  scii[] = {./* 0 
04a0: 20 20 31 20 20 20 32 20 20 20 33 20 20 20 34 20    1   2   3   4 
04b0: 20 20 35 20 20 20 36 20 20 20 37 20 20 20 38 20    5   6   7   8 
04c0: 20 20 39 20 20 20 41 20 20 20 42 20 20 20 43 20    9   A   B   C 
04d0: 20 20 44 20 20 20 45 20 20 20 46 20 2a 2f 0a 20    D   E   F */. 
04e0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
04f0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0500: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0510: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0520: 20 20 2f 2a 20 30 78 20 2a 2f 0a 20 20 20 30 2c    /* 0x */.   0,
0530: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0540: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0550: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0560: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 2f 2a    0,  0,  0,  /*
0570: 20 31 78 20 2a 2f 0a 20 20 20 30 2c 20 20 30 2c   1x */.   0,  0,
0580: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0590: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
05a0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
05b0: 20 20 30 2c 20 20 30 2c 20 20 2f 2a 20 32 78 20    0,  0,  /* 2x 
05c0: 2a 2f 0a 20 20 20 30 2c 20 20 30 2c 20 20 30 2c  */.   0,  0,  0,
05d0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
05e0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
05f0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0600: 20 20 30 2c 20 20 2f 2a 20 33 78 20 2a 2f 0a 20    0,  /* 3x */. 
0610: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0620: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0630: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0640: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0650: 20 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 30 2c    /* 4x */.   0,
0660: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0670: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0680: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0690: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 2f 2a    0,  0,  0,  /*
06a0: 20 35 78 20 2a 2f 0a 20 20 20 30 2c 20 20 30 2c   5x */.   0,  0,
06b0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
06c0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
06d0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 39 35 2c    0,  0,  0, 95,
06e0: 20 20 30 2c 20 20 30 2c 20 20 2f 2a 20 36 78 20    0,  0,  /* 6x 
06f0: 2a 2f 0a 20 20 20 30 2c 20 20 30 2c 20 20 30 2c  */.   0,  0,  0,
0700: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0710: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0720: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0730: 20 20 30 2c 20 20 2f 2a 20 37 78 20 2a 2f 0a 20    0,  /* 7x */. 
0740: 20 20 30 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c    0, 97, 98, 99,
0750: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
0760: 31 30 34 2c 31 30 35 2c 20 20 30 2c 20 20 30 2c  104,105,  0,  0,
0770: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0780: 20 20 2f 2a 20 38 78 20 2a 2f 0a 20 20 20 30 2c    /* 8x */.   0,
0790: 31 30 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c  106,107,108,109,
07a0: 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c  110,111,112,113,
07b0: 31 31 34 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c  114,  0,  0,  0,
07c0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 2f 2a    0,  0,  0,  /*
07d0: 20 39 78 20 2a 2f 0a 20 20 20 30 2c 20 20 30 2c   9x */.   0,  0,
07e0: 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c  115,116,117,118,
07f0: 31 31 39 2c 31 32 30 2c 31 32 31 2c 31 32 32 2c  119,120,121,122,
0800: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0810: 20 20 30 2c 20 20 30 2c 20 20 2f 2a 20 41 78 20    0,  0,  /* Ax 
0820: 2a 2f 0a 20 20 20 30 2c 20 20 30 2c 20 20 30 2c  */.   0,  0,  0,
0830: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0840: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0850: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0860: 20 20 30 2c 20 20 2f 2a 20 42 78 20 2a 2f 0a 20    0,  /* Bx */. 
0870: 20 20 30 2c 20 39 37 2c 20 39 38 2c 20 39 39 2c    0, 97, 98, 99,
0880: 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30 33 2c  100,101,102,103,
0890: 31 30 34 2c 31 30 35 2c 20 20 30 2c 20 20 30 2c  104,105,  0,  0,
08a0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
08b0: 20 20 2f 2a 20 43 78 20 2a 2f 0a 20 20 20 30 2c    /* Cx */.   0,
08c0: 31 30 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c  106,107,108,109,
08d0: 31 31 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c  110,111,112,113,
08e0: 31 31 34 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c  114,  0,  0,  0,
08f0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 2f 2a    0,  0,  0,  /*
0900: 20 44 78 20 2a 2f 0a 20 20 20 30 2c 20 20 30 2c   Dx */.   0,  0,
0910: 31 31 35 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c  115,116,117,118,
0920: 31 31 39 2c 31 32 30 2c 31 32 31 2c 31 32 32 2c  119,120,121,122,
0930: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0940: 20 20 30 2c 20 20 30 2c 20 20 2f 2a 20 45 78 20    0,  0,  /* Ex 
0950: 2a 2f 0a 20 20 20 30 2c 20 20 30 2c 20 20 30 2c  */.   0,  0,  0,
0960: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0970: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0980: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0990: 20 20 30 2c 20 20 2f 2a 20 46 78 20 2a 2f 0a 7d    0,  /* Fx */.}
09a0: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
09b0: 54 68 65 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  The sqlite3Keywo
09c0: 72 64 43 6f 64 65 20 66 75 6e 63 74 69 6f 6e 20  rdCode function 
09d0: 6c 6f 6f 6b 73 20 75 70 20 61 6e 20 69 64 65 6e  looks up an iden
09e0: 74 69 66 69 65 72 20 74 6f 20 64 65 74 65 72 6d  tifier to determ
09f0: 69 6e 65 20 69 66 0a 2a 2a 20 69 74 20 69 73 20  ine if.** it is 
0a00: 61 20 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 69  a keyword.  If i
0a10: 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2c 20  t is a keyword, 
0a20: 74 68 65 20 74 6f 6b 65 6e 20 63 6f 64 65 20 6f  the token code o
0a30: 66 20 74 68 61 74 20 6b 65 79 77 6f 72 64 20 69  f that keyword i
0a40: 73 20 0a 2a 2a 20 72 65 74 75 72 6e 65 64 2e 20  s .** returned. 
0a50: 20 49 66 20 74 68 65 20 69 6e 70 75 74 20 69 73   If the input is
0a60: 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 2c 20   not a keyword, 
0a70: 54 4b 5f 49 44 20 69 73 20 72 65 74 75 72 6e 65  TK_ID is returne
0a80: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6d 70  d..**.** The imp
0a90: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
0aa0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20  his routine was 
0ab0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 61 20 70  generated by a p
0ac0: 72 6f 67 72 61 6d 2c 0a 2a 2a 20 6d 6b 6b 65 79  rogram,.** mkkey
0ad0: 77 6f 72 64 68 61 73 68 2e 68 2c 20 6c 6f 63 61  wordhash.h, loca
0ae0: 74 65 64 20 69 6e 20 74 68 65 20 74 6f 6f 6c 20  ted in the tool 
0af0: 73 75 62 64 69 72 65 63 74 6f 72 79 20 6f 66 20  subdirectory of 
0b00: 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
0b10: 2e 0a 2a 2a 20 54 68 65 20 6f 75 74 70 75 74 20  ..** The output 
0b20: 6f 66 20 74 68 65 20 6d 6b 6b 65 79 77 6f 72 64  of the mkkeyword
0b30: 68 61 73 68 2e 63 20 70 72 6f 67 72 61 6d 20 69  hash.c program i
0b40: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 61  s written into a
0b50: 20 66 69 6c 65 0a 2a 2a 20 6e 61 6d 65 64 20 6b   file.** named k
0b60: 65 79 77 6f 72 64 68 61 73 68 2e 68 20 61 6e 64  eywordhash.h and
0b70: 20 74 68 65 6e 20 69 6e 63 6c 75 64 65 64 20 69   then included i
0b80: 6e 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20  nto this source 
0b90: 66 69 6c 65 20 62 79 0a 2a 2a 20 74 68 65 20 23  file by.** the #
0ba0: 69 6e 63 6c 75 64 65 20 62 65 6c 6f 77 2e 0a 2a  include below..*
0bb0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6b 65 79 77  /.#include "keyw
0bc0: 6f 72 64 68 61 73 68 2e 68 22 0a 0a 0a 2f 2a 0a  ordhash.h".../*.
0bd0: 2a 2a 20 49 66 20 58 20 69 73 20 61 20 63 68 61  ** If X is a cha
0be0: 72 61 63 74 65 72 20 74 68 61 74 20 63 61 6e 20  racter that can 
0bf0: 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 69 64  be used in an id
0c00: 65 6e 74 69 66 69 65 72 20 74 68 65 6e 0a 2a 2a  entifier then.**
0c10: 20 49 64 43 68 61 72 28 58 29 20 77 69 6c 6c 20   IdChar(X) will 
0c20: 62 65 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77  be true.  Otherw
0c30: 69 73 65 20 69 74 20 69 73 20 66 61 6c 73 65 2e  ise it is false.
0c40: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 41 53 43 49 49  .**.** For ASCII
0c50: 2c 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20  , any character 
0c60: 77 69 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72  with the high-or
0c70: 64 65 72 20 62 69 74 20 73 65 74 20 69 73 0a 2a  der bit set is.*
0c80: 2a 20 61 6c 6c 6f 77 65 64 20 69 6e 20 61 6e 20  * allowed in an 
0c90: 69 64 65 6e 74 69 66 69 65 72 2e 20 20 46 6f 72  identifier.  For
0ca0: 20 37 2d 62 69 74 20 63 68 61 72 61 63 74 65 72   7-bit character
0cb0: 73 2c 20 0a 2a 2a 20 73 71 6c 69 74 65 33 49 73  s, .** sqlite3Is
0cc0: 49 64 43 68 61 72 5b 58 5d 20 6d 75 73 74 20 62  IdChar[X] must b
0cd0: 65 20 31 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 45  e 1..**.** For E
0ce0: 42 43 44 49 43 2c 20 74 68 65 20 72 75 6c 65 73  BCDIC, the rules
0cf0: 20 61 72 65 20 6d 6f 72 65 20 63 6f 6d 70 6c 65   are more comple
0d00: 78 20 62 75 74 20 68 61 76 65 20 74 68 65 20 73  x but have the s
0d10: 61 6d 65 0a 2a 2a 20 65 6e 64 20 72 65 73 75 6c  ame.** end resul
0d20: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
0d30: 23 31 30 36 36 2e 20 20 74 68 65 20 53 51 4c 20  #1066.  the SQL 
0d40: 73 74 61 6e 64 61 72 64 20 64 6f 65 73 20 6e 6f  standard does no
0d50: 74 20 61 6c 6c 6f 77 20 27 24 27 20 69 6e 20 74  t allow '$' in t
0d60: 68 65 0a 2a 2a 20 6d 69 64 64 6c 65 20 6f 66 20  he.** middle of 
0d70: 69 64 65 6e 74 66 69 65 72 73 2e 20 20 42 75 74  identfiers.  But
0d80: 20 6d 61 6e 79 20 53 51 4c 20 69 6d 70 6c 65 6d   many SQL implem
0d90: 65 6e 74 61 74 69 6f 6e 73 20 64 6f 2e 20 0a 2a  entations do. .*
0da0: 2a 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c  * SQLite will al
0db0: 6c 6f 77 20 27 24 27 20 69 6e 20 69 64 65 6e 74  low '$' in ident
0dc0: 69 66 69 65 72 73 20 66 6f 72 20 63 6f 6d 70 61  ifiers for compa
0dd0: 74 69 62 69 6c 69 74 79 2e 0a 2a 2a 20 42 75 74  tibility..** But
0de0: 20 74 68 65 20 66 65 61 74 75 72 65 20 69 73 20   the feature is 
0df0: 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 0a 2a 2f  undocumented..*/
0e00: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
0e10: 53 43 49 49 0a 63 6f 6e 73 74 20 63 68 61 72 20  SCII.const char 
0e20: 73 71 6c 69 74 65 33 49 73 41 73 63 69 69 49 64  sqlite3IsAsciiId
0e30: 43 68 61 72 5b 5d 20 3d 20 7b 0a 2f 2a 20 78 30  Char[] = {./* x0
0e40: 20 78 31 20 78 32 20 78 33 20 78 34 20 78 35 20   x1 x2 x3 x4 x5 
0e50: 78 36 20 78 37 20 78 38 20 78 39 20 78 41 20 78  x6 x7 x8 x9 xA x
0e60: 42 20 78 43 20 78 44 20 78 45 20 78 46 20 2a 2f  B xC xD xE xF */
0e70: 0a 20 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  .    0, 0, 0, 0,
0e80: 20 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   1, 0, 0, 0, 0, 
0e90: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
0ea0: 2c 20 30 2c 20 20 2f 2a 20 32 78 20 2a 2f 0a 20  , 0,  /* 2x */. 
0eb0: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
0ec0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
0ed0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
0ee0: 30 2c 20 20 2f 2a 20 33 78 20 2a 2f 0a 20 20 20  0,  /* 3x */.   
0ef0: 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   0, 1, 1, 1, 1, 
0f00: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
0f10: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
0f20: 20 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 20 31    /* 4x */.    1
0f30: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
0f40: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
0f50: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20  0, 0, 0, 0, 1,  
0f60: 2f 2a 20 35 78 20 2a 2f 0a 20 20 20 20 30 2c 20  /* 5x */.    0, 
0f70: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
0f80: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
0f90: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 2f 2a   1, 1, 1, 1,  /*
0fa0: 20 36 78 20 2a 2f 0a 20 20 20 20 31 2c 20 31 2c   6x */.    1, 1,
0fb0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
0fc0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 30  1, 1, 1, 1, 0, 0
0fd0: 2c 20 30 2c 20 30 2c 20 30 2c 20 20 2f 2a 20 37  , 0, 0, 0,  /* 7
0fe0: 78 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  x */.};.#define 
0ff0: 49 64 43 68 61 72 28 43 29 20 20 28 28 28 63 3d  IdChar(C)  (((c=
1000: 43 29 26 30 78 38 30 29 21 3d 30 20 7c 7c 20 28  C)&0x80)!=0 || (
1010: 63 3e 30 78 31 66 20 26 26 20 73 71 6c 69 74 65  c>0x1f && sqlite
1020: 33 49 73 41 73 63 69 69 49 64 43 68 61 72 5b 63  3IsAsciiIdChar[c
1030: 2d 30 78 32 30 5d 29 29 0a 23 65 6e 64 69 66 0a  -0x20])).#endif.
1040: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 42  #ifdef SQLITE_EB
1050: 43 44 49 43 0a 63 6f 6e 73 74 20 63 68 61 72 20  CDIC.const char 
1060: 73 71 6c 69 74 65 33 49 73 45 62 63 64 69 63 49  sqlite3IsEbcdicI
1070: 64 43 68 61 72 5b 5d 20 3d 20 7b 0a 2f 2a 20 78  dChar[] = {./* x
1080: 30 20 78 31 20 78 32 20 78 33 20 78 34 20 78 35  0 x1 x2 x3 x4 x5
1090: 20 78 36 20 78 37 20 78 38 20 78 39 20 78 41 20   x6 x7 x8 x9 xA 
10a0: 78 42 20 78 43 20 78 44 20 78 45 20 78 46 20 2a  xB xC xD xE xF *
10b0: 2f 0a 20 20 20 20 30 2c 20 30 2c 20 31 2c 20 31  /.    0, 0, 1, 1
10c0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
10d0: 20 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   1, 0, 0, 0, 0, 
10e0: 30 2c 20 30 2c 20 20 2f 2a 20 34 78 20 2a 2f 0a  0, 0,  /* 4x */.
10f0: 20 20 20 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20      0, 1, 1, 1, 
1100: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1110: 2c 20 30 2c 20 31 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 1, 0, 0, 0,
1120: 20 30 2c 20 20 2f 2a 20 35 78 20 2a 2f 0a 20 20   0,  /* 5x */.  
1130: 20 20 30 2c 20 30 2c 20 31 2c 20 31 2c 20 31 2c    0, 0, 1, 1, 1,
1140: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1150: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 30 2c 20 30  0, 0, 0, 1, 0, 0
1160: 2c 20 20 2f 2a 20 36 78 20 2a 2f 0a 20 20 20 20  ,  /* 6x */.    
1170: 30 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  0, 1, 1, 1, 1, 1
1180: 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c  , 1, 1, 1, 0, 0,
1190: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
11a0: 20 2f 2a 20 37 78 20 2a 2f 0a 20 20 20 20 30 2c   /* 7x */.    0,
11b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
11c0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 30  1, 1, 1, 1, 0, 0
11d0: 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 20 2f  , 1, 1, 1, 0,  /
11e0: 2a 20 38 78 20 2a 2f 0a 20 20 20 20 30 2c 20 31  * 8x */.    0, 1
11f0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
1200: 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 30 2c 20   1, 1, 1, 0, 0, 
1210: 31 2c 20 30 2c 20 31 2c 20 30 2c 20 20 2f 2a 20  1, 0, 1, 0,  /* 
1220: 39 78 20 2a 2f 0a 20 20 20 20 31 2c 20 30 2c 20  9x */.    1, 0, 
1230: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1240: 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 31 2c  , 1, 1, 1, 0, 1,
1250: 20 31 2c 20 31 2c 20 30 2c 20 20 2f 2a 20 41 78   1, 1, 0,  /* Ax
1260: 20 2a 2f 0a 20 20 20 20 30 2c 20 30 2c 20 30 2c   */.    0, 0, 0,
1270: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
1280: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
1290: 2c 20 30 2c 20 30 2c 20 20 2f 2a 20 42 78 20 2a  , 0, 0,  /* Bx *
12a0: 2f 0a 20 20 20 20 30 2c 20 31 2c 20 31 2c 20 31  /.    0, 1, 1, 1
12b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
12c0: 20 31 2c 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 0, 1, 1, 1, 
12d0: 31 2c 20 31 2c 20 20 2f 2a 20 43 78 20 2a 2f 0a  1, 1,  /* Cx */.
12e0: 20 20 20 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20      0, 1, 1, 1, 
12f0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1300: 2c 20 30 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 0, 1, 1, 1, 1,
1310: 20 31 2c 20 20 2f 2a 20 44 78 20 2a 2f 0a 20 20   1,  /* Dx */.  
1320: 20 20 30 2c 20 30 2c 20 31 2c 20 31 2c 20 31 2c    0, 0, 1, 1, 1,
1330: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
1340: 30 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  0, 1, 1, 1, 1, 1
1350: 2c 20 20 2f 2a 20 45 78 20 2a 2f 0a 20 20 20 20  ,  /* Ex */.    
1360: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
1370: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c  , 1, 1, 1, 1, 0,
1380: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20   1, 1, 1, 1, 0, 
1390: 20 2f 2a 20 46 78 20 2a 2f 0a 7d 3b 0a 23 64 65   /* Fx */.};.#de
13a0: 66 69 6e 65 20 49 64 43 68 61 72 28 43 29 20 20  fine IdChar(C)  
13b0: 28 28 28 63 3d 43 29 3e 3d 30 78 34 32 20 26 26  (((c=C)>=0x42 &&
13c0: 20 73 71 6c 69 74 65 33 49 73 45 62 63 64 69 63   sqlite3IsEbcdic
13d0: 49 64 43 68 61 72 5b 63 2d 30 78 34 30 5d 29 29  IdChar[c-0x40]))
13e0: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
13f0: 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67 74  Return the lengt
1400: 68 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 20 74  h of the token t
1410: 68 61 74 20 62 65 67 69 6e 73 20 61 74 20 7a 5b  hat begins at z[
1420: 30 5d 2e 20 0a 2a 2a 20 53 74 6f 72 65 20 74 68  0]. .** Store th
1430: 65 20 74 6f 6b 65 6e 20 74 79 70 65 20 69 6e 20  e token type in 
1440: 2a 74 6f 6b 65 6e 54 79 70 65 20 62 65 66 6f 72  *tokenType befor
1450: 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 2a 2f 0a  e returning..*/.
1460: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
1470: 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
1480: 65 64 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  ed char *z, int 
1490: 2a 74 6f 6b 65 6e 54 79 70 65 29 7b 0a 20 20 69  *tokenType){.  i
14a0: 6e 74 20 69 2c 20 63 3b 0a 20 20 73 77 69 74 63  nt i, c;.  switc
14b0: 68 28 20 2a 7a 20 29 7b 0a 20 20 20 20 63 61 73  h( *z ){.    cas
14c0: 65 20 27 20 27 3a 20 63 61 73 65 20 27 5c 74 27  e ' ': case '\t'
14d0: 3a 20 63 61 73 65 20 27 5c 6e 27 3a 20 63 61 73  : case '\n': cas
14e0: 65 20 27 5c 66 27 3a 20 63 61 73 65 20 27 5c 72  e '\f': case '\r
14f0: 27 3a 20 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  ': {.      for(i
1500: 3d 31 3b 20 69 73 73 70 61 63 65 28 7a 5b 69 5d  =1; isspace(z[i]
1510: 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  ); i++){}.      
1520: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
1530: 53 50 41 43 45 3b 0a 20 20 20 20 20 20 72 65 74  SPACE;.      ret
1540: 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20  urn i;.    }.   
1550: 20 63 61 73 65 20 27 2d 27 3a 20 7b 0a 20 20 20   case '-': {.   
1560: 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27     if( z[1]=='-'
1570: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
1580: 69 3d 32 3b 20 28 63 3d 7a 5b 69 5d 29 21 3d 30  i=2; (c=z[i])!=0
1590: 20 26 26 20 63 21 3d 27 5c 6e 27 3b 20 69 2b 2b   && c!='\n'; i++
15a0: 29 7b 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b  ){}.        *tok
15b0: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 43 4f 4d 4d  enType = TK_COMM
15c0: 45 4e 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74  ENT;.        ret
15d0: 75 72 6e 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20  urn i;.      }. 
15e0: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
15f0: 3d 20 54 4b 5f 4d 49 4e 55 53 3b 0a 20 20 20 20  = TK_MINUS;.    
1600: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1610: 7d 0a 20 20 20 20 63 61 73 65 20 27 28 27 3a 20  }.    case '(': 
1620: 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79  {.      *tokenTy
1630: 70 65 20 3d 20 54 4b 5f 4c 50 3b 0a 20 20 20 20  pe = TK_LP;.    
1640: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1650: 7d 0a 20 20 20 20 63 61 73 65 20 27 29 27 3a 20  }.    case ')': 
1660: 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79  {.      *tokenTy
1670: 70 65 20 3d 20 54 4b 5f 52 50 3b 0a 20 20 20 20  pe = TK_RP;.    
1680: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1690: 7d 0a 20 20 20 20 63 61 73 65 20 27 3b 27 3a 20  }.    case ';': 
16a0: 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79  {.      *tokenTy
16b0: 70 65 20 3d 20 54 4b 5f 53 45 4d 49 3b 0a 20 20  pe = TK_SEMI;.  
16c0: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
16d0: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2b 27    }.    case '+'
16e0: 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e  : {.      *token
16f0: 54 79 70 65 20 3d 20 54 4b 5f 50 4c 55 53 3b 0a  Type = TK_PLUS;.
1700: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1710: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27      }.    case '
1720: 2a 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b  *': {.      *tok
1730: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 53 54 41 52  enType = TK_STAR
1740: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
1750: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
1760: 20 27 2f 27 3a 20 7b 0a 20 20 20 20 20 20 69 66   '/': {.      if
1770: 28 20 7a 5b 31 5d 21 3d 27 2a 27 20 7c 7c 20 7a  ( z[1]!='*' || z
1780: 5b 32 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [2]==0 ){.      
1790: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
17a0: 4b 5f 53 4c 41 53 48 3b 0a 20 20 20 20 20 20 20  K_SLASH;.       
17b0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
17c0: 20 7d 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 33   }.      for(i=3
17d0: 2c 20 63 3d 7a 5b 32 5d 3b 20 28 63 21 3d 27 2a  , c=z[2]; (c!='*
17e0: 27 20 7c 7c 20 7a 5b 69 5d 21 3d 27 2f 27 29 20  ' || z[i]!='/') 
17f0: 26 26 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20  && (c=z[i])!=0; 
1800: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28  i++){}.      if(
1810: 20 63 20 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20   c ) i++;.      
1820: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
1830: 43 4f 4d 4d 45 4e 54 3b 0a 20 20 20 20 20 20 72  COMMENT;.      r
1840: 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20  eturn i;.    }. 
1850: 20 20 20 63 61 73 65 20 27 25 27 3a 20 7b 0a 20     case '%': {. 
1860: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
1870: 3d 20 54 4b 5f 52 45 4d 3b 0a 20 20 20 20 20 20  = TK_REM;.      
1880: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
1890: 20 20 20 20 63 61 73 65 20 27 3d 27 3a 20 7b 0a      case '=': {.
18a0: 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65        *tokenType
18b0: 20 3d 20 54 4b 5f 45 51 3b 0a 20 20 20 20 20 20   = TK_EQ;.      
18c0: 72 65 74 75 72 6e 20 31 20 2b 20 28 7a 5b 31 5d  return 1 + (z[1]
18d0: 3d 3d 27 3d 27 29 3b 0a 20 20 20 20 7d 0a 20 20  =='=');.    }.  
18e0: 20 20 63 61 73 65 20 27 3c 27 3a 20 7b 0a 20 20    case '<': {.  
18f0: 20 20 20 20 69 66 28 20 28 63 3d 7a 5b 31 5d 29      if( (c=z[1])
1900: 3d 3d 27 3d 27 20 29 7b 0a 20 20 20 20 20 20 20  =='=' ){.       
1910: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1920: 5f 4c 45 3b 0a 20 20 20 20 20 20 20 20 72 65 74  _LE;.        ret
1930: 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c  urn 2;.      }el
1940: 73 65 20 69 66 28 20 63 3d 3d 27 3e 27 20 29 7b  se if( c=='>' ){
1950: 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54  .        *tokenT
1960: 79 70 65 20 3d 20 54 4b 5f 4e 45 3b 0a 20 20 20  ype = TK_NE;.   
1970: 20 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20       return 2;. 
1980: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
1990: 3d 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20 20  =='<' ){.       
19a0: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
19b0: 5f 4c 53 48 49 46 54 3b 0a 20 20 20 20 20 20 20  _LSHIFT;.       
19c0: 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20   return 2;.     
19d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19e0: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
19f0: 4c 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  LT;.        retu
1a00: 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 1;.      }.  
1a10: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 3e 27    }.    case '>'
1a20: 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 28 63  : {.      if( (c
1a30: 3d 7a 5b 31 5d 29 3d 3d 27 3d 27 20 29 7b 0a 20  =z[1])=='=' ){. 
1a40: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
1a50: 65 20 3d 20 54 4b 5f 47 45 3b 0a 20 20 20 20 20  e = TK_GE;.     
1a60: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20     return 2;.   
1a70: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
1a80: 27 3e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 2a  '>' ){.        *
1a90: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 52  tokenType = TK_R
1aa0: 53 48 49 46 54 3b 0a 20 20 20 20 20 20 20 20 72  SHIFT;.        r
1ab0: 65 74 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d  eturn 2;.      }
1ac0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74  else{.        *t
1ad0: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 47 54  okenType = TK_GT
1ae0: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
1af0: 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
1b00: 7d 0a 20 20 20 20 63 61 73 65 20 27 21 27 3a 20  }.    case '!': 
1b10: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d  {.      if( z[1]
1b20: 21 3d 27 3d 27 20 29 7b 0a 20 20 20 20 20 20 20  !='=' ){.       
1b30: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1b40: 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20  _ILLEGAL;.      
1b50: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20    return 2;.    
1b60: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1b70: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
1b80: 5f 4e 45 3b 0a 20 20 20 20 20 20 20 20 72 65 74  _NE;.        ret
1b90: 75 72 6e 20 32 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 2;.      }. 
1ba0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 7c     }.    case '|
1bb0: 27 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  ': {.      if( z
1bc0: 5b 31 5d 21 3d 27 7c 27 20 29 7b 0a 20 20 20 20  [1]!='|' ){.    
1bd0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
1be0: 20 54 4b 5f 42 49 54 4f 52 3b 0a 20 20 20 20 20   TK_BITOR;.     
1bf0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
1c00: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c10: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
1c20: 4b 5f 43 4f 4e 43 41 54 3b 0a 20 20 20 20 20 20  K_CONCAT;.      
1c30: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 20 20    return 2;.    
1c40: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 63 61    }.    }.    ca
1c50: 73 65 20 27 2c 27 3a 20 7b 0a 20 20 20 20 20 20  se ',': {.      
1c60: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
1c70: 43 4f 4d 4d 41 3b 0a 20 20 20 20 20 20 72 65 74  COMMA;.      ret
1c80: 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
1c90: 20 63 61 73 65 20 27 26 27 3a 20 7b 0a 20 20 20   case '&': {.   
1ca0: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
1cb0: 54 4b 5f 42 49 54 41 4e 44 3b 0a 20 20 20 20 20  TK_BITAND;.     
1cc0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
1cd0: 0a 20 20 20 20 63 61 73 65 20 27 7e 27 3a 20 7b  .    case '~': {
1ce0: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
1cf0: 65 20 3d 20 54 4b 5f 42 49 54 4e 4f 54 3b 0a 20  e = TK_BITNOT;. 
1d00: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
1d10: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 60     }.    case '`
1d20: 27 3a 0a 20 20 20 20 63 61 73 65 20 27 5c 27 27  ':.    case '\''
1d30: 3a 0a 20 20 20 20 63 61 73 65 20 27 22 27 3a 20  :.    case '"': 
1d40: 7b 0a 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69  {.      int deli
1d50: 6d 20 3d 20 7a 5b 30 5d 3b 0a 20 20 20 20 20 20  m = z[0];.      
1d60: 66 6f 72 28 69 3d 31 3b 20 28 63 3d 7a 5b 69 5d  for(i=1; (c=z[i]
1d70: 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  )!=0; i++){.    
1d80: 20 20 20 20 69 66 28 20 63 3d 3d 64 65 6c 69 6d      if( c==delim
1d90: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
1da0: 28 20 7a 5b 69 2b 31 5d 3d 3d 64 65 6c 69 6d 20  ( z[i+1]==delim 
1db0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
1dc0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  ++;.          }e
1dd0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
1de0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1df0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1e00: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1e10: 63 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f  c ){.        *to
1e20: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 53 54 52  kenType = TK_STR
1e30: 49 4e 47 3b 0a 20 20 20 20 20 20 20 20 72 65 74  ING;.        ret
1e40: 75 72 6e 20 69 2b 31 3b 0a 20 20 20 20 20 20 7d  urn i+1;.      }
1e50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74  else{.        *t
1e60: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c  okenType = TK_IL
1e70: 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20 20 20 72  LEGAL;.        r
1e80: 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 20 20 7d  eturn i;.      }
1e90: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
1ea0: 27 2e 27 3a 20 7b 0a 23 69 66 6e 64 65 66 20 53  '.': {.#ifndef S
1eb0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
1ec0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 20 20  ING_POINT.      
1ed0: 69 66 28 20 21 69 73 64 69 67 69 74 28 7a 5b 31  if( !isdigit(z[1
1ee0: 5d 29 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20  ]) ).#endif.    
1ef0: 20 20 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b    {.        *tok
1f00: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 44 4f 54 3b  enType = TK_DOT;
1f10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1f20: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
1f30: 20 2f 2a 20 49 66 20 74 68 65 20 6e 65 78 74 20   /* If the next 
1f40: 63 68 61 72 61 63 74 65 72 20 69 73 20 61 20 64  character is a d
1f50: 69 67 69 74 2c 20 74 68 69 73 20 69 73 20 61 20  igit, this is a 
1f60: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 20  floating point. 
1f70: 20 20 20 20 20 2a 2a 20 6e 75 6d 62 65 72 20 74       ** number t
1f80: 68 61 74 20 62 65 67 69 6e 73 20 77 69 74 68 20  hat begins with 
1f90: 22 2e 22 2e 20 20 46 61 6c 6c 20 74 68 72 75 20  ".".  Fall thru 
1fa0: 69 6e 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  into the next ca
1fb0: 73 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  se */.    }.    
1fc0: 63 61 73 65 20 27 30 27 3a 20 63 61 73 65 20 27  case '0': case '
1fd0: 31 27 3a 20 63 61 73 65 20 27 32 27 3a 20 63 61  1': case '2': ca
1fe0: 73 65 20 27 33 27 3a 20 63 61 73 65 20 27 34 27  se '3': case '4'
1ff0: 3a 0a 20 20 20 20 63 61 73 65 20 27 35 27 3a 20  :.    case '5': 
2000: 63 61 73 65 20 27 36 27 3a 20 63 61 73 65 20 27  case '6': case '
2010: 37 27 3a 20 63 61 73 65 20 27 38 27 3a 20 63 61  7': case '8': ca
2020: 73 65 20 27 39 27 3a 20 7b 0a 20 20 20 20 20 20  se '9': {.      
2030: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
2040: 49 4e 54 45 47 45 52 3b 0a 20 20 20 20 20 20 66  INTEGER;.      f
2050: 6f 72 28 69 3d 30 3b 20 69 73 64 69 67 69 74 28  or(i=0; isdigit(
2060: 7a 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 23 69  z[i]); i++){}.#i
2070: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2080: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
2090: 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d  .      if( z[i]=
20a0: 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='.' ){.        
20b0: 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69  i++;.        whi
20c0: 6c 65 28 20 69 73 64 69 67 69 74 28 7a 5b 69 5d  le( isdigit(z[i]
20d0: 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ i++; }.    
20e0: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
20f0: 20 54 4b 5f 46 4c 4f 41 54 3b 0a 20 20 20 20 20   TK_FLOAT;.     
2100: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 5b   }.      if( (z[
2110: 69 5d 3d 3d 27 65 27 20 7c 7c 20 7a 5b 69 5d 3d  i]=='e' || z[i]=
2120: 3d 27 45 27 29 20 26 26 0a 20 20 20 20 20 20 20  ='E') &&.       
2130: 20 20 20 20 28 20 69 73 64 69 67 69 74 28 7a 5b      ( isdigit(z[
2140: 69 2b 31 5d 29 20 0a 20 20 20 20 20 20 20 20 20  i+1]) .         
2150: 20 20 20 7c 7c 20 28 28 7a 5b 69 2b 31 5d 3d 3d     || ((z[i+1]==
2160: 27 2b 27 20 7c 7c 20 7a 5b 69 2b 31 5d 3d 3d 27  '+' || z[i+1]=='
2170: 2d 27 29 20 26 26 20 69 73 64 69 67 69 74 28 7a  -') && isdigit(z
2180: 5b 69 2b 32 5d 29 29 0a 20 20 20 20 20 20 20 20  [i+2])).        
2190: 20 20 20 29 0a 20 20 20 20 20 20 29 7b 0a 20 20     ).      ){.  
21a0: 20 20 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20        i += 2;.  
21b0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 69 73 64        while( isd
21c0: 69 67 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69 2b  igit(z[i]) ){ i+
21d0: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f  +; }.        *to
21e0: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f  kenType = TK_FLO
21f0: 41 54 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  AT;.      }.#end
2200: 69 66 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  if.      while( 
2210: 49 64 43 68 61 72 28 7a 5b 69 5d 29 20 29 7b 0a  IdChar(z[i]) ){.
2220: 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79          *tokenTy
2230: 70 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b  pe = TK_ILLEGAL;
2240: 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  .        i++;.  
2250: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
2260: 72 6e 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn i;.    }.    
2270: 63 61 73 65 20 27 5b 27 3a 20 7b 0a 20 20 20 20  case '[': {.    
2280: 20 20 66 6f 72 28 69 3d 31 2c 20 63 3d 7a 5b 30    for(i=1, c=z[0
2290: 5d 3b 20 63 21 3d 27 5d 27 20 26 26 20 28 63 3d  ]; c!=']' && (c=
22a0: 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 7d  z[i])!=0; i++){}
22b0: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
22c0: 65 20 3d 20 63 3d 3d 27 5d 27 20 3f 20 54 4b 5f  e = c==']' ? TK_
22d0: 49 44 20 3a 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b  ID : TK_ILLEGAL;
22e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
22f0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
2300: 27 3f 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f  '?': {.      *to
2310: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 56 41 52  kenType = TK_VAR
2320: 49 41 42 4c 45 3b 0a 20 20 20 20 20 20 66 6f 72  IABLE;.      for
2330: 28 69 3d 31 3b 20 69 73 64 69 67 69 74 28 7a 5b  (i=1; isdigit(z[
2340: 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  i]); i++){}.    
2350: 20 20 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20    return i;.    
2360: 7d 0a 20 20 20 20 63 61 73 65 20 27 23 27 3a 20  }.    case '#': 
2370: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  {.      for(i=1;
2380: 20 69 73 64 69 67 69 74 28 7a 5b 69 5d 29 3b 20   isdigit(z[i]); 
2390: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28  i++){}.      if(
23a0: 20 69 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20   i>1 ){.        
23b0: 2f 2a 20 50 61 72 61 6d 65 74 65 72 73 20 6f 66  /* Parameters of
23c0: 20 74 68 65 20 66 6f 72 6d 20 23 4e 4e 4e 20 28   the form #NNN (
23d0: 77 68 65 72 65 20 4e 4e 4e 20 69 73 20 61 20 6e  where NNN is a n
23e0: 75 6d 62 65 72 29 20 61 72 65 20 75 73 65 64 0a  umber) are used.
23f0: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 72          ** inter
2400: 6e 61 6c 6c 79 20 62 79 20 73 71 6c 69 74 65 33  nally by sqlite3
2410: 4e 65 73 74 65 64 50 61 72 73 65 2e 20 20 2a 2f  NestedParse.  */
2420: 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54  .        *tokenT
2430: 79 70 65 20 3d 20 54 4b 5f 52 45 47 49 53 54 45  ype = TK_REGISTE
2440: 52 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  R;.        retur
2450: 6e 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n i;.      }.   
2460: 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75     /* Fall throu
2470: 67 68 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 74  gh into the next
2480: 20 63 61 73 65 20 69 66 20 74 68 65 20 27 23 27   case if the '#'
2490: 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64   is not followed
24a0: 20 62 79 0a 20 20 20 20 20 20 2a 2a 20 61 20 64   by.      ** a d
24b0: 69 67 69 74 2e 20 54 72 79 20 74 6f 20 6d 61 74  igit. Try to mat
24c0: 63 68 20 23 41 41 41 41 20 77 68 65 72 65 20 41  ch #AAAA where A
24d0: 41 41 41 20 69 73 20 61 20 70 61 72 61 6d 65 74  AAA is a paramet
24e0: 65 72 20 6e 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  er name. */.    
24f0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
2500: 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42  _OMIT_TCL_VARIAB
2510: 4c 45 0a 20 20 20 20 63 61 73 65 20 27 24 27 3a  LE.    case '$':
2520: 0a 23 65 6e 64 69 66 0a 20 20 20 20 63 61 73 65  .#endif.    case
2530: 20 27 40 27 3a 20 20 2f 2a 20 46 6f 72 20 63 6f   '@':  /* For co
2540: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
2550: 20 4d 53 20 53 51 4c 20 53 65 72 76 65 72 20 2a   MS SQL Server *
2560: 2f 0a 20 20 20 20 63 61 73 65 20 27 3a 27 3a 20  /.    case ':': 
2570: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  {.      int n = 
2580: 30 3b 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54  0;.      *tokenT
2590: 79 70 65 20 3d 20 54 4b 5f 56 41 52 49 41 42 4c  ype = TK_VARIABL
25a0: 45 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  E;.      for(i=1
25b0: 3b 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20 69  ; (c=z[i])!=0; i
25c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
25d0: 20 49 64 43 68 61 72 28 63 29 20 29 7b 0a 20 20   IdChar(c) ){.  
25e0: 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0a 23 69 66          n++;.#if
25f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2600: 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20  _TCL_VARIABLE.  
2610: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
2620: 63 3d 3d 27 28 27 20 26 26 20 6e 3e 30 20 29 7b  c=='(' && n>0 ){
2630: 0a 20 20 20 20 20 20 20 20 20 20 64 6f 7b 0a 20  .          do{. 
2640: 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a             i++;.
2650: 20 20 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65            }while
2660: 28 20 28 63 3d 7a 5b 69 5d 29 21 3d 30 20 26 26  ( (c=z[i])!=0 &&
2670: 20 21 69 73 73 70 61 63 65 28 63 29 20 26 26 20   !isspace(c) && 
2680: 63 21 3d 27 29 27 20 29 3b 0a 20 20 20 20 20 20  c!=')' );.      
2690: 20 20 20 20 69 66 28 20 63 3d 3d 27 29 27 20 29      if( c==')' )
26a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 2b  {.            i+
26b0: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  +;.          }el
26c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
26d0: 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f  *tokenType = TK_
26e0: 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20 20  ILLEGAL;.       
26f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
2700: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65  reak;.        }e
2710: 6c 73 65 20 69 66 28 20 63 3d 3d 27 3a 27 20 26  lse if( c==':' &
2720: 26 20 7a 5b 69 2b 31 5d 3d 3d 27 3a 27 20 29 7b  & z[i+1]==':' ){
2730: 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  .          i++;.
2740: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 7d  #endif.        }
2750: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
2760: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
2770: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2780: 66 28 20 6e 3d 3d 30 20 29 20 2a 74 6f 6b 65 6e  f( n==0 ) *token
2790: 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41  Type = TK_ILLEGA
27a0: 4c 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  L;.      return 
27b0: 69 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  i;.    }.#ifndef
27c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f   SQLITE_OMIT_BLO
27d0: 42 5f 4c 49 54 45 52 41 4c 0a 20 20 20 20 63 61  B_LITERAL.    ca
27e0: 73 65 20 27 78 27 3a 20 63 61 73 65 20 27 58 27  se 'x': case 'X'
27f0: 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  : {.      if( z[
2800: 31 5d 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20  1]=='\'' ){.    
2810: 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d      *tokenType =
2820: 20 54 4b 5f 42 4c 4f 42 3b 0a 20 20 20 20 20 20   TK_BLOB;.      
2830: 20 20 66 6f 72 28 69 3d 32 3b 20 28 63 3d 7a 5b    for(i=2; (c=z[
2840: 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27  i])!=0 && c!='\'
2850: 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  '; i++){.       
2860: 20 20 20 69 66 28 20 21 69 73 78 64 69 67 69 74     if( !isxdigit
2870: 28 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  (c) ){.         
2880: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
2890: 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20  TK_ILLEGAL;.    
28a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
28b0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 25  }.        if( i%
28c0: 32 20 7c 7c 20 21 63 20 29 20 2a 74 6f 6b 65 6e  2 || !c ) *token
28d0: 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41  Type = TK_ILLEGA
28e0: 4c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  L;.        if( c
28f0: 20 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20   ) i++;.        
2900: 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 20 20  return i;.      
2910: 7d 0a 20 20 20 20 20 20 2f 2a 20 4f 74 68 65 72  }.      /* Other
2920: 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2930: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
2940: 73 65 20 2a 2f 0a 20 20 20 20 7d 0a 23 65 6e 64  se */.    }.#end
2950: 69 66 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  if.    default: 
2960: 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49 64 43  {.      if( !IdC
2970: 68 61 72 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20  har(*z) ){.     
2980: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2990: 7d 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  }.      for(i=1;
29a0: 20 49 64 43 68 61 72 28 7a 5b 69 5d 29 3b 20 69   IdChar(z[i]); i
29b0: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f 6b  ++){}.      *tok
29c0: 65 6e 54 79 70 65 20 3d 20 6b 65 79 77 6f 72 64  enType = keyword
29d0: 43 6f 64 65 28 28 63 68 61 72 2a 29 7a 2c 20 69  Code((char*)z, i
29e0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
29f0: 69 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a  i;.    }.  }.  *
2a00: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49  tokenType = TK_I
2a10: 4c 4c 45 47 41 4c 3b 0a 20 20 72 65 74 75 72 6e  LLEGAL;.  return
2a20: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e   1;.}../*.** Run
2a30: 20 74 68 65 20 70 61 72 73 65 72 20 6f 6e 20 74   the parser on t
2a40: 68 65 20 67 69 76 65 6e 20 53 51 4c 20 73 74 72  he given SQL str
2a50: 69 6e 67 2e 20 20 54 68 65 20 70 61 72 73 65 72  ing.  The parser
2a60: 20 73 74 72 75 63 74 75 72 65 20 69 73 0a 2a 2a   structure is.**
2a70: 20 70 61 73 73 65 64 20 69 6e 2e 20 20 41 6e 20   passed in.  An 
2a80: 53 51 4c 49 54 45 5f 20 73 74 61 74 75 73 20 63  SQLITE_ status c
2a90: 6f 64 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ode is returned.
2aa0: 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63    If an error oc
2ab0: 63 75 72 73 0a 2a 2a 20 74 68 65 6e 20 61 6e 20  curs.** then an 
2ac0: 61 6e 64 20 61 74 74 65 6d 70 74 20 69 73 20 6d  and attempt is m
2ad0: 61 64 65 20 74 6f 20 77 72 69 74 65 20 61 6e 20  ade to write an 
2ae0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e  error message in
2af0: 74 6f 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 6f 62  to .** memory ob
2b00: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
2b10: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64  te3_malloc() and
2b20: 20 74 6f 20 6d 61 6b 65 20 2a 70 7a 45 72 72 4d   to make *pzErrM
2b30: 73 67 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  sg point to that
2b40: 0a 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67  .** error messag
2b50: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
2b60: 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
2b70: 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2b80: 63 68 61 72 20 2a 7a 53 71 6c 2c 20 63 68 61 72  char *zSql, char
2b90: 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20   **pzErrMsg){.  
2ba0: 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b 0a 20 20  int nErr = 0;.  
2bb0: 69 6e 74 20 69 3b 0a 20 20 76 6f 69 64 20 2a 70  int i;.  void *p
2bc0: 45 6e 67 69 6e 65 3b 0a 20 20 69 6e 74 20 74 6f  Engine;.  int to
2bd0: 6b 65 6e 54 79 70 65 3b 0a 20 20 69 6e 74 20 6c  kenType;.  int l
2be0: 61 73 74 54 6f 6b 65 6e 50 61 72 73 65 64 20 3d  astTokenParsed =
2bf0: 20 2d 31 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a   -1;.  sqlite3 *
2c00: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
2c10: 0a 20 20 69 6e 74 20 6d 78 53 71 6c 4c 65 6e 20  .  int mxSqlLen 
2c20: 3d 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  = db->aLimit[SQL
2c30: 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45  ITE_LIMIT_SQL_LE
2c40: 4e 47 54 48 5d 3b 0a 0a 20 20 69 66 28 20 64 62  NGTH];..  if( db
2c50: 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3d  ->activeVdbeCnt=
2c60: 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 75 31  =0 ){.    db->u1
2c70: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d  .isInterrupted =
2c80: 20 30 3b 0a 20 20 7d 0a 20 20 70 50 61 72 73 65   0;.  }.  pParse
2c90: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
2ca0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a 54 61 69  ;.  pParse->zTai
2cb0: 6c 20 3d 20 70 50 61 72 73 65 2d 3e 7a 53 71 6c  l = pParse->zSql
2cc0: 20 3d 20 7a 53 71 6c 3b 0a 20 20 69 20 3d 20 30   = zSql;.  i = 0
2cd0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 7a 45 72  ;.  assert( pzEr
2ce0: 72 4d 73 67 21 3d 30 20 29 3b 0a 20 20 70 45 6e  rMsg!=0 );.  pEn
2cf0: 67 69 6e 65 20 3d 20 73 71 6c 69 74 65 33 50 61  gine = sqlite3Pa
2d00: 72 73 65 72 41 6c 6c 6f 63 28 28 76 6f 69 64 2a  rserAlloc((void*
2d10: 28 2a 29 28 73 69 7a 65 5f 74 29 29 73 71 6c 69  (*)(size_t))sqli
2d20: 74 65 33 4d 61 6c 6c 6f 63 29 3b 0a 20 20 69 66  te3Malloc);.  if
2d30: 28 20 70 45 6e 67 69 6e 65 3d 3d 30 20 29 7b 0a  ( pEngine==0 ){.
2d40: 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
2d50: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 65  iled = 1;.    re
2d60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
2d70: 4d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  M;.  }.  assert(
2d80: 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f   pParse->sLastTo
2d90: 6b 65 6e 2e 64 79 6e 3d 3d 30 20 29 3b 0a 20 20  ken.dyn==0 );.  
2da0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
2db0: 70 4e 65 77 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  pNewTable==0 );.
2dc0: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65    assert( pParse
2dd0: 2d 3e 70 4e 65 77 54 72 69 67 67 65 72 3d 3d 30  ->pNewTrigger==0
2de0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50   );.  assert( pP
2df0: 61 72 73 65 2d 3e 6e 56 61 72 3d 3d 30 20 29 3b  arse->nVar==0 );
2e00: 0a 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73  .  assert( pPars
2e10: 65 2d 3e 6e 56 61 72 45 78 70 72 3d 3d 30 20 29  e->nVarExpr==0 )
2e20: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 61 72  ;.  assert( pPar
2e30: 73 65 2d 3e 6e 56 61 72 45 78 70 72 41 6c 6c 6f  se->nVarExprAllo
2e40: 63 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  c==0 );.  assert
2e50: 28 20 70 50 61 72 73 65 2d 3e 61 70 56 61 72 45  ( pParse->apVarE
2e60: 78 70 72 3d 3d 30 20 29 3b 0a 20 20 77 68 69 6c  xpr==0 );.  whil
2e70: 65 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  e( !db->mallocFa
2e80: 69 6c 65 64 20 26 26 20 7a 53 71 6c 5b 69 5d 21  iled && zSql[i]!
2e90: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
2ea0: 28 20 69 3e 3d 30 20 29 3b 0a 20 20 20 20 70 50  ( i>=0 );.    pP
2eb0: 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e  arse->sLastToken
2ec0: 2e 7a 20 3d 20 28 75 38 2a 29 26 7a 53 71 6c 5b  .z = (u8*)&zSql[
2ed0: 69 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  i];.    assert( 
2ee0: 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b  pParse->sLastTok
2ef0: 65 6e 2e 64 79 6e 3d 3d 30 20 29 3b 0a 20 20 20  en.dyn==0 );.   
2f00: 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f   pParse->sLastTo
2f10: 6b 65 6e 2e 6e 20 3d 20 73 71 6c 69 74 65 33 47  ken.n = sqlite3G
2f20: 65 74 54 6f 6b 65 6e 28 28 75 6e 73 69 67 6e 65  etToken((unsigne
2f30: 64 20 63 68 61 72 2a 29 26 7a 53 71 6c 5b 69 5d  d char*)&zSql[i]
2f40: 2c 26 74 6f 6b 65 6e 54 79 70 65 29 3b 0a 20 20  ,&tokenType);.  
2f50: 20 20 69 20 2b 3d 20 70 50 61 72 73 65 2d 3e 73    i += pParse->s
2f60: 4c 61 73 74 54 6f 6b 65 6e 2e 6e 3b 0a 20 20 20  LastToken.n;.   
2f70: 20 69 66 28 20 69 3e 6d 78 53 71 6c 4c 65 6e 20   if( i>mxSqlLen 
2f80: 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  ){.      pParse-
2f90: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f  >rc = SQLITE_TOO
2fa0: 42 49 47 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  BIG;.      break
2fb0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 77 69 74  ;.    }.    swit
2fc0: 63 68 28 20 74 6f 6b 65 6e 54 79 70 65 20 29 7b  ch( tokenType ){
2fd0: 0a 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f 53  .      case TK_S
2fe0: 50 41 43 45 3a 0a 20 20 20 20 20 20 63 61 73 65  PACE:.      case
2ff0: 20 54 4b 5f 43 4f 4d 4d 45 4e 54 3a 20 7b 0a 20   TK_COMMENT: {. 
3000: 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 75         if( db->u
3010: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
3020: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 50 61  ){.          pPa
3030: 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45  rse->rc = SQLITE
3040: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
3050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
3060: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
3070: 20 64 62 2c 20 22 69 6e 74 65 72 72 75 70 74 22   db, "interrupt"
3080: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
3090: 6f 20 61 62 6f 72 74 5f 70 61 72 73 65 3b 0a 20  o abort_parse;. 
30a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
30b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
30c0: 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f 49 4c        case TK_IL
30d0: 4c 45 47 41 4c 3a 20 7b 0a 20 20 20 20 20 20 20  LEGAL: {.       
30e0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
30f0: 62 2c 20 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20  b, *pzErrMsg);. 
3100: 20 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67         *pzErrMsg
3110: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
3120: 66 28 64 62 2c 20 22 75 6e 72 65 63 6f 67 6e 69  f(db, "unrecogni
3130: 7a 65 64 20 74 6f 6b 65 6e 3a 20 5c 22 25 54 5c  zed token: \"%T\
3140: 22 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "",.            
3150: 20 20 20 20 20 20 20 20 20 20 20 20 26 70 50 61              &pPa
3160: 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 29  rse->sLastToken)
3170: 3b 0a 20 20 20 20 20 20 20 20 6e 45 72 72 2b 2b  ;.        nErr++
3180: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
3190: 62 6f 72 74 5f 70 61 72 73 65 3b 0a 20 20 20 20  bort_parse;.    
31a0: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54    }.      case T
31b0: 4b 5f 53 45 4d 49 3a 20 7b 0a 20 20 20 20 20 20  K_SEMI: {.      
31c0: 20 20 70 50 61 72 73 65 2d 3e 7a 54 61 69 6c 20    pParse->zTail 
31d0: 3d 20 26 7a 53 71 6c 5b 69 5d 3b 0a 20 20 20 20  = &zSql[i];.    
31e0: 20 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75      /* Fall thru
31f0: 20 69 6e 74 6f 20 74 68 65 20 64 65 66 61 75 6c   into the defaul
3200: 74 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  t case */.      
3210: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
3220: 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   {.        sqlit
3230: 65 33 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65  e3Parser(pEngine
3240: 2c 20 74 6f 6b 65 6e 54 79 70 65 2c 20 70 50 61  , tokenType, pPa
3250: 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c  rse->sLastToken,
3260: 20 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20   pParse);.      
3270: 20 20 6c 61 73 74 54 6f 6b 65 6e 50 61 72 73 65    lastTokenParse
3280: 64 20 3d 20 74 6f 6b 65 6e 54 79 70 65 3b 0a 20  d = tokenType;. 
3290: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73         if( pPars
32a0: 65 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  e->rc!=SQLITE_OK
32b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
32c0: 74 6f 20 61 62 6f 72 74 5f 70 61 72 73 65 3b 0a  to abort_parse;.
32d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
32e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
32f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 61 62 6f 72 74  .    }.  }.abort
3300: 5f 70 61 72 73 65 3a 0a 20 20 69 66 28 20 7a 53  _parse:.  if( zS
3310: 71 6c 5b 69 5d 3d 3d 30 20 26 26 20 6e 45 72 72  ql[i]==0 && nErr
3320: 3d 3d 30 20 26 26 20 70 50 61 72 73 65 2d 3e 72  ==0 && pParse->r
3330: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
3340: 20 20 20 20 69 66 28 20 6c 61 73 74 54 6f 6b 65      if( lastToke
3350: 6e 50 61 72 73 65 64 21 3d 54 4b 5f 53 45 4d 49  nParsed!=TK_SEMI
3360: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3370: 33 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65 2c  3Parser(pEngine,
3380: 20 54 4b 5f 53 45 4d 49 2c 20 70 50 61 72 73 65   TK_SEMI, pParse
3390: 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70 50  ->sLastToken, pP
33a0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61  arse);.      pPa
33b0: 72 73 65 2d 3e 7a 54 61 69 6c 20 3d 20 26 7a 53  rse->zTail = &zS
33c0: 71 6c 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  ql[i];.    }.   
33d0: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 70   sqlite3Parser(p
33e0: 45 6e 67 69 6e 65 2c 20 30 2c 20 70 50 61 72 73  Engine, 0, pPars
33f0: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70  e->sLastToken, p
3400: 50 61 72 73 65 29 3b 0a 20 20 7d 0a 23 69 66 64  Parse);.  }.#ifd
3410: 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
3420: 43 4b 44 45 50 54 48 0a 20 20 73 71 6c 69 74 65  CKDEPTH.  sqlite
3430: 33 53 74 61 74 75 73 53 65 74 28 53 51 4c 49 54  3StatusSet(SQLIT
3440: 45 5f 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f  E_STATUS_PARSER_
3450: 53 54 41 43 4b 2c 0a 20 20 20 20 20 20 73 71 6c  STACK,.      sql
3460: 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
3470: 65 61 6b 28 70 45 6e 67 69 6e 65 29 0a 20 20 29  eak(pEngine).  )
3480: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 59 59 44 45  ;.#endif /* YYDE
3490: 42 55 47 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  BUG */.  sqlite3
34a0: 50 61 72 73 65 72 46 72 65 65 28 70 45 6e 67 69  ParserFree(pEngi
34b0: 6e 65 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ne, sqlite3_free
34c0: 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
34d0: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
34e0: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 53 51   pParse->rc = SQ
34f0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
3500: 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 72 63    if( pParse->rc
3510: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  !=SQLITE_OK && p
3520: 50 61 72 73 65 2d 3e 72 63 21 3d 53 51 4c 49 54  Parse->rc!=SQLIT
3530: 45 5f 44 4f 4e 45 20 26 26 20 70 50 61 72 73 65  E_DONE && pParse
3540: 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 7b 0a  ->zErrMsg==0 ){.
3550: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
3560: 72 69 6e 67 28 26 70 50 61 72 73 65 2d 3e 7a 45  ring(&pParse->zE
3570: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
3580: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 70   sqlite3ErrStr(p
3590: 50 61 72 73 65 2d 3e 72 63 29 29 3b 0a 20 20 7d  Parse->rc));.  }
35a0: 0a 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 7a  .  if( pParse->z
35b0: 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 69 66  ErrMsg ){.    if
35c0: 28 20 2a 70 7a 45 72 72 4d 73 67 3d 3d 30 20 29  ( *pzErrMsg==0 )
35d0: 7b 0a 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73  {.      *pzErrMs
35e0: 67 20 3d 20 70 50 61 72 73 65 2d 3e 7a 45 72 72  g = pParse->zErr
35f0: 4d 73 67 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Msg;.    }else{.
3600: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
3610: 72 65 65 28 64 62 2c 20 70 50 61 72 73 65 2d 3e  ree(db, pParse->
3620: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a  zErrMsg);.    }.
3630: 20 20 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72      pParse->zErr
3640: 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6e 45 72  Msg = 0;.    nEr
3650: 72 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  r++;.  }.  if( p
3660: 50 61 72 73 65 2d 3e 70 56 64 62 65 20 26 26 20  Parse->pVdbe && 
3670: 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 26  pParse->nErr>0 &
3680: 26 20 70 50 61 72 73 65 2d 3e 6e 65 73 74 65 64  & pParse->nested
3690: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
36a0: 65 33 56 64 62 65 44 65 6c 65 74 65 28 70 50 61  e3VdbeDelete(pPa
36b0: 72 73 65 2d 3e 70 56 64 62 65 29 3b 0a 20 20 20  rse->pVdbe);.   
36c0: 20 70 50 61 72 73 65 2d 3e 70 56 64 62 65 20 3d   pParse->pVdbe =
36d0: 20 30 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20   0;.  }.#ifndef 
36e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
36f0: 45 44 5f 43 41 43 48 45 0a 20 20 69 66 28 20 70  ED_CACHE.  if( p
3700: 50 61 72 73 65 2d 3e 6e 65 73 74 65 64 3d 3d 30  Parse->nested==0
3710: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
3720: 62 46 72 65 65 28 64 62 2c 20 70 50 61 72 73 65  bFree(db, pParse
3730: 2d 3e 61 54 61 62 6c 65 4c 6f 63 6b 29 3b 0a 20  ->aTableLock);. 
3740: 20 20 20 70 50 61 72 73 65 2d 3e 61 54 61 62 6c     pParse->aTabl
3750: 65 4c 6f 63 6b 20 3d 20 30 3b 0a 20 20 20 20 70  eLock = 0;.    p
3760: 50 61 72 73 65 2d 3e 6e 54 61 62 6c 65 4c 6f 63  Parse->nTableLoc
3770: 6b 20 3d 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69  k = 0;.  }.#endi
3780: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
3790: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
37a0: 4c 45 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  LE.  sqlite3DbFr
37b0: 65 65 28 64 62 2c 20 70 50 61 72 73 65 2d 3e 61  ee(db, pParse->a
37c0: 70 56 74 61 62 4c 6f 63 6b 29 3b 0a 23 65 6e 64  pVtabLock);.#end
37d0: 69 66 0a 0a 20 20 69 66 28 20 21 49 4e 5f 44 45  if..  if( !IN_DE
37e0: 43 4c 41 52 45 5f 56 54 41 42 20 29 7b 0a 20 20  CLARE_VTAB ){.  
37f0: 20 20 2f 2a 20 49 66 20 74 68 65 20 70 50 61 72    /* If the pPar
3800: 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 20  se->declareVtab 
3810: 66 6c 61 67 20 69 73 20 73 65 74 2c 20 64 6f 20  flag is set, do 
3820: 6e 6f 74 20 64 65 6c 65 74 65 20 61 6e 79 20 74  not delete any t
3830: 61 62 6c 65 20 0a 20 20 20 20 2a 2a 20 73 74 72  able .    ** str
3840: 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 70 20  ucture built up 
3850: 69 6e 20 70 50 61 72 73 65 2d 3e 70 4e 65 77 54  in pParse->pNewT
3860: 61 62 6c 65 2e 20 54 68 65 20 63 61 6c 6c 69 6e  able. The callin
3870: 67 20 63 6f 64 65 20 28 73 65 65 20 76 74 61 62  g code (see vtab
3880: 2e 63 29 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20  .c).    ** will 
3890: 74 61 6b 65 20 72 65 73 70 6f 6e 73 69 62 69 6c  take responsibil
38a0: 69 74 79 20 66 6f 72 20 66 72 65 65 69 6e 67 20  ity for freeing 
38b0: 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
38c0: 75 72 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ure..    */.    
38d0: 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
38e0: 6c 65 28 70 50 61 72 73 65 2d 3e 70 4e 65 77 54  le(pParse->pNewT
38f0: 61 62 6c 65 29 3b 0a 20 20 7d 0a 0a 20 20 73 71  able);.  }..  sq
3900: 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
3910: 65 72 28 64 62 2c 20 70 50 61 72 73 65 2d 3e 70  er(db, pParse->p
3920: 4e 65 77 54 72 69 67 67 65 72 29 3b 0a 20 20 73  NewTrigger);.  s
3930: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
3940: 20 70 50 61 72 73 65 2d 3e 61 70 56 61 72 45 78   pParse->apVarEx
3950: 70 72 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3e  pr);.  if( nErr>
3960: 30 20 26 26 20 28 70 50 61 72 73 65 2d 3e 72 63  0 && (pParse->rc
3970: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
3980: 50 61 72 73 65 2d 3e 72 63 3d 3d 53 51 4c 49 54  Parse->rc==SQLIT
3990: 45 5f 44 4f 4e 45 29 20 29 7b 0a 20 20 20 20 70  E_DONE) ){.    p
39a0: 50 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49  Parse->rc = SQLI
39b0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
39c0: 72 65 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a     return nErr;.}.