/ Hex Artifact Content
Login

Artifact 0b8f3e1dc928cef15857fd59a61e76afcf7a39b4:


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 39 20  enize.c,v 1.149 
0250: 32 30 30 38 2f 30 38 2f 30 37 20 31 33 3a 30 35  2008/08/07 13:05
0260: 3a 33 36 20 64 72 68 20 45 78 70 20 24 0a 2a 2f  :36 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 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20  c=='\'' ){.     
1e20: 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20     *tokenType = 
1e30: 54 4b 5f 53 54 52 49 4e 47 3b 0a 20 20 20 20 20  TK_STRING;.     
1e40: 20 20 20 72 65 74 75 72 6e 20 69 2b 31 3b 0a 20     return i+1;. 
1e50: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
1e60: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2a  !=0 ){.        *
1e70: 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49  tokenType = TK_I
1e80: 44 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  D;.        retur
1e90: 6e 20 69 2b 31 3b 0a 20 20 20 20 20 20 7d 65 6c  n i+1;.      }el
1ea0: 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b  se{.        *tok
1eb0: 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c 45  enType = TK_ILLE
1ec0: 47 41 4c 3b 0a 20 20 20 20 20 20 20 20 72 65 74  GAL;.        ret
1ed0: 75 72 6e 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20  urn i;.      }. 
1ee0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 2e     }.    case '.
1ef0: 27 3a 20 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ': {.#ifndef SQL
1f00: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
1f10: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 20 20 69 66  G_POINT.      if
1f20: 28 20 21 69 73 64 69 67 69 74 28 7a 5b 31 5d 29  ( !isdigit(z[1])
1f30: 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   ).#endif.      
1f40: 7b 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e  {.        *token
1f50: 54 79 70 65 20 3d 20 54 4b 5f 44 4f 54 3b 0a 20  Type = TK_DOT;. 
1f60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
1f70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
1f80: 2a 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 68  * If the next ch
1f90: 61 72 61 63 74 65 72 20 69 73 20 61 20 64 69 67  aracter is a dig
1fa0: 69 74 2c 20 74 68 69 73 20 69 73 20 61 20 66 6c  it, this is a fl
1fb0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 20 20 20  oating point.   
1fc0: 20 20 20 2a 2a 20 6e 75 6d 62 65 72 20 74 68 61     ** number tha
1fd0: 74 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 2e  t begins with ".
1fe0: 22 2e 20 20 46 61 6c 6c 20 74 68 72 75 20 69 6e  ".  Fall thru in
1ff0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
2000: 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 63 61   */.    }.    ca
2010: 73 65 20 27 30 27 3a 20 63 61 73 65 20 27 31 27  se '0': case '1'
2020: 3a 20 63 61 73 65 20 27 32 27 3a 20 63 61 73 65  : case '2': case
2030: 20 27 33 27 3a 20 63 61 73 65 20 27 34 27 3a 0a   '3': case '4':.
2040: 20 20 20 20 63 61 73 65 20 27 35 27 3a 20 63 61      case '5': ca
2050: 73 65 20 27 36 27 3a 20 63 61 73 65 20 27 37 27  se '6': case '7'
2060: 3a 20 63 61 73 65 20 27 38 27 3a 20 63 61 73 65  : case '8': case
2070: 20 27 39 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74   '9': {.      *t
2080: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4e  okenType = TK_IN
2090: 54 45 47 45 52 3b 0a 20 20 20 20 20 20 66 6f 72  TEGER;.      for
20a0: 28 69 3d 30 3b 20 69 73 64 69 67 69 74 28 7a 5b  (i=0; isdigit(z[
20b0: 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 23 69 66 6e  i]); i++){}.#ifn
20c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20d0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
20e0: 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27       if( z[i]=='
20f0: 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 2b  .' ){.        i+
2100: 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  +;.        while
2110: 28 20 69 73 64 69 67 69 74 28 7a 5b 69 5d 29 20  ( isdigit(z[i]) 
2120: 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20  ){ i++; }.      
2130: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
2140: 4b 5f 46 4c 4f 41 54 3b 0a 20 20 20 20 20 20 7d  K_FLOAT;.      }
2150: 0a 20 20 20 20 20 20 69 66 28 20 28 7a 5b 69 5d  .      if( (z[i]
2160: 3d 3d 27 65 27 20 7c 7c 20 7a 5b 69 5d 3d 3d 27  =='e' || z[i]=='
2170: 45 27 29 20 26 26 0a 20 20 20 20 20 20 20 20 20  E') &&.         
2180: 20 20 28 20 69 73 64 69 67 69 74 28 7a 5b 69 2b    ( isdigit(z[i+
2190: 31 5d 29 20 0a 20 20 20 20 20 20 20 20 20 20 20  1]) .           
21a0: 20 7c 7c 20 28 28 7a 5b 69 2b 31 5d 3d 3d 27 2b   || ((z[i+1]=='+
21b0: 27 20 7c 7c 20 7a 5b 69 2b 31 5d 3d 3d 27 2d 27  ' || z[i+1]=='-'
21c0: 29 20 26 26 20 69 73 64 69 67 69 74 28 7a 5b 69  ) && isdigit(z[i
21d0: 2b 32 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20  +2])).          
21e0: 20 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20   ).      ){.    
21f0: 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20      i += 2;.    
2200: 20 20 20 20 77 68 69 6c 65 28 20 69 73 64 69 67      while( isdig
2210: 69 74 28 7a 5b 69 5d 29 20 29 7b 20 69 2b 2b 3b  it(z[i]) ){ i++;
2220: 20 7d 0a 20 20 20 20 20 20 20 20 2a 74 6f 6b 65   }.        *toke
2230: 6e 54 79 70 65 20 3d 20 54 4b 5f 46 4c 4f 41 54  nType = TK_FLOAT
2240: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
2250: 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 64  .      while( Id
2260: 43 68 61 72 28 7a 5b 69 5d 29 20 29 7b 0a 20 20  Char(z[i]) ){.  
2270: 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65        *tokenType
2280: 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20   = TK_ILLEGAL;. 
2290: 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
22a0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
22b0: 20 69 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61   i;.    }.    ca
22c0: 73 65 20 27 5b 27 3a 20 7b 0a 20 20 20 20 20 20  se '[': {.      
22d0: 66 6f 72 28 69 3d 31 2c 20 63 3d 7a 5b 30 5d 3b  for(i=1, c=z[0];
22e0: 20 63 21 3d 27 5d 27 20 26 26 20 28 63 3d 7a 5b   c!=']' && (c=z[
22f0: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20  i])!=0; i++){}. 
2300: 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20       *tokenType 
2310: 3d 20 63 3d 3d 27 5d 27 20 3f 20 54 4b 5f 49 44  = c==']' ? TK_ID
2320: 20 3a 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b 0a 20   : TK_ILLEGAL;. 
2330: 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b 0a 20       return i;. 
2340: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 27 3f     }.    case '?
2350: 27 3a 20 7b 0a 20 20 20 20 20 20 2a 74 6f 6b 65  ': {.      *toke
2360: 6e 54 79 70 65 20 3d 20 54 4b 5f 56 41 52 49 41  nType = TK_VARIA
2370: 42 4c 45 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  BLE;.      for(i
2380: 3d 31 3b 20 69 73 64 69 67 69 74 28 7a 5b 69 5d  =1; isdigit(z[i]
2390: 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  ); i++){}.      
23a0: 72 65 74 75 72 6e 20 69 3b 0a 20 20 20 20 7d 0a  return i;.    }.
23b0: 20 20 20 20 63 61 73 65 20 27 23 27 3a 20 7b 0a      case '#': {.
23c0: 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
23d0: 73 64 69 67 69 74 28 7a 5b 69 5d 29 3b 20 69 2b  sdigit(z[i]); i+
23e0: 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 69  +){}.      if( i
23f0: 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  >1 ){.        /*
2400: 20 50 61 72 61 6d 65 74 65 72 73 20 6f 66 20 74   Parameters of t
2410: 68 65 20 66 6f 72 6d 20 23 4e 4e 4e 20 28 77 68  he form #NNN (wh
2420: 65 72 65 20 4e 4e 4e 20 69 73 20 61 20 6e 75 6d  ere NNN is a num
2430: 62 65 72 29 20 61 72 65 20 75 73 65 64 0a 20 20  ber) are used.  
2440: 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 72 6e 61        ** interna
2450: 6c 6c 79 20 62 79 20 73 71 6c 69 74 65 33 4e 65  lly by sqlite3Ne
2460: 73 74 65 64 50 61 72 73 65 2e 20 20 2a 2f 0a 20  stedParse.  */. 
2470: 20 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70         *tokenTyp
2480: 65 20 3d 20 54 4b 5f 52 45 47 49 53 54 45 52 3b  e = TK_REGISTER;
2490: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
24a0: 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  i;.      }.     
24b0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
24c0: 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 74 20 63   into the next c
24d0: 61 73 65 20 69 66 20 74 68 65 20 27 23 27 20 69  ase if the '#' i
24e0: 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
24f0: 79 0a 20 20 20 20 20 20 2a 2a 20 61 20 64 69 67  y.      ** a dig
2500: 69 74 2e 20 54 72 79 20 74 6f 20 6d 61 74 63 68  it. Try to match
2510: 20 23 41 41 41 41 20 77 68 65 72 65 20 41 41 41   #AAAA where AAA
2520: 41 20 69 73 20 61 20 70 61 72 61 6d 65 74 65 72  A is a parameter
2530: 20 6e 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 7d 0a   name. */.    }.
2540: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2550: 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45  MIT_TCL_VARIABLE
2560: 0a 20 20 20 20 63 61 73 65 20 27 24 27 3a 0a 23  .    case '$':.#
2570: 65 6e 64 69 66 0a 20 20 20 20 63 61 73 65 20 27  endif.    case '
2580: 40 27 3a 20 20 2f 2a 20 46 6f 72 20 63 6f 6d 70  @':  /* For comp
2590: 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
25a0: 53 20 53 51 4c 20 53 65 72 76 65 72 20 2a 2f 0a  S SQL Server */.
25b0: 20 20 20 20 63 61 73 65 20 27 3a 27 3a 20 7b 0a      case ':': {.
25c0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b        int n = 0;
25d0: 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e 54 79 70  .      *tokenTyp
25e0: 65 20 3d 20 54 4b 5f 56 41 52 49 41 42 4c 45 3b  e = TK_VARIABLE;
25f0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  .      for(i=1; 
2600: 28 63 3d 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b  (c=z[i])!=0; i++
2610: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 49  ){.        if( I
2620: 64 43 68 61 72 28 63 29 20 29 7b 0a 20 20 20 20  dChar(c) ){.    
2630: 20 20 20 20 20 20 6e 2b 2b 3b 0a 23 69 66 6e 64        n++;.#ifnd
2640: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2650: 43 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20 20 20  CL_VARIABLE.    
2660: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
2670: 3d 27 28 27 20 26 26 20 6e 3e 30 20 29 7b 0a 20  ='(' && n>0 ){. 
2680: 20 20 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20           do{.   
2690: 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20           i++;.  
26a0: 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
26b0: 28 63 3d 7a 5b 69 5d 29 21 3d 30 20 26 26 20 21  (c=z[i])!=0 && !
26c0: 69 73 73 70 61 63 65 28 63 29 20 26 26 20 63 21  isspace(c) && c!
26d0: 3d 27 29 27 20 29 3b 0a 20 20 20 20 20 20 20 20  =')' );.        
26e0: 20 20 69 66 28 20 63 3d 3d 27 29 27 20 29 7b 0a    if( c==')' ){.
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b              i++;
2700: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
2710: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 74  {.            *t
2720: 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c  okenType = TK_IL
2730: 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20 20 20 20  LEGAL;.         
2740: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
2750: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ak;.        }els
2760: 65 20 69 66 28 20 63 3d 3d 27 3a 27 20 26 26 20  e if( c==':' && 
2770: 7a 5b 69 2b 31 5d 3d 3d 27 3a 27 20 29 7b 0a 20  z[i+1]==':' ){. 
2780: 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 23 65           i++;.#e
2790: 6e 64 69 66 0a 20 20 20 20 20 20 20 20 7d 65 6c  ndif.        }el
27a0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 72  se{.          br
27b0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
27c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
27d0: 20 6e 3d 3d 30 20 29 20 2a 74 6f 6b 65 6e 54 79   n==0 ) *tokenTy
27e0: 70 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b  pe = TK_ILLEGAL;
27f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
2800: 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20 53  .    }.#ifndef S
2810: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f  QLITE_OMIT_BLOB_
2820: 4c 49 54 45 52 41 4c 0a 20 20 20 20 63 61 73 65  LITERAL.    case
2830: 20 27 78 27 3a 20 63 61 73 65 20 27 58 27 3a 20   'x': case 'X': 
2840: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d  {.      if( z[1]
2850: 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20  =='\'' ){.      
2860: 20 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54    *tokenType = T
2870: 4b 5f 42 4c 4f 42 3b 0a 20 20 20 20 20 20 20 20  K_BLOB;.        
2880: 66 6f 72 28 69 3d 32 3b 20 28 63 3d 7a 5b 69 5d  for(i=2; (c=z[i]
2890: 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27 27 3b  )!=0 && c!='\'';
28a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
28b0: 20 69 66 28 20 21 69 73 78 64 69 67 69 74 28 63   if( !isxdigit(c
28c0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
28d0: 20 2a 74 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4b   *tokenType = TK
28e0: 5f 49 4c 4c 45 47 41 4c 3b 0a 20 20 20 20 20 20  _ILLEGAL;.      
28f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
2900: 20 20 20 20 20 20 20 20 69 66 28 20 69 25 32 20          if( i%2 
2910: 7c 7c 20 21 63 20 29 20 2a 74 6f 6b 65 6e 54 79  || !c ) *tokenTy
2920: 70 65 20 3d 20 54 4b 5f 49 4c 4c 45 47 41 4c 3b  pe = TK_ILLEGAL;
2930: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 20 29  .        if( c )
2940: 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 72 65   i++;.        re
2950: 74 75 72 6e 20 69 3b 0a 20 20 20 20 20 20 7d 0a  turn i;.      }.
2960: 20 20 20 20 20 20 2f 2a 20 4f 74 68 65 72 77 69        /* Otherwi
2970: 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2980: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
2990: 20 2a 2f 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   */.    }.#endif
29a0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a  .    default: {.
29b0: 20 20 20 20 20 20 69 66 28 20 21 49 64 43 68 61        if( !IdCha
29c0: 72 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20 20 20  r(*z) ){.       
29d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
29e0: 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 49        for(i=1; I
29f0: 64 43 68 61 72 28 7a 5b 69 5d 29 3b 20 69 2b 2b  dChar(z[i]); i++
2a00: 29 7b 7d 0a 20 20 20 20 20 20 2a 74 6f 6b 65 6e  ){}.      *token
2a10: 54 79 70 65 20 3d 20 6b 65 79 77 6f 72 64 43 6f  Type = keywordCo
2a20: 64 65 28 28 63 68 61 72 2a 29 7a 2c 20 69 29 3b  de((char*)z, i);
2a30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 3b  .      return i;
2a40: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 74 6f  .    }.  }.  *to
2a50: 6b 65 6e 54 79 70 65 20 3d 20 54 4b 5f 49 4c 4c  kenType = TK_ILL
2a60: 45 47 41 4c 3b 0a 20 20 72 65 74 75 72 6e 20 31  EGAL;.  return 1
2a70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 74  ;.}../*.** Run t
2a80: 68 65 20 70 61 72 73 65 72 20 6f 6e 20 74 68 65  he parser on the
2a90: 20 67 69 76 65 6e 20 53 51 4c 20 73 74 72 69 6e   given SQL strin
2aa0: 67 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 73  g.  The parser s
2ab0: 74 72 75 63 74 75 72 65 20 69 73 0a 2a 2a 20 70  tructure is.** p
2ac0: 61 73 73 65 64 20 69 6e 2e 20 20 41 6e 20 53 51  assed in.  An SQ
2ad0: 4c 49 54 45 5f 20 73 74 61 74 75 73 20 63 6f 64  LITE_ status cod
2ae0: 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  e is returned.  
2af0: 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  If an error occu
2b00: 72 73 0a 2a 2a 20 74 68 65 6e 20 61 6e 20 61 6e  rs.** then an an
2b10: 64 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  d attempt is mad
2b20: 65 20 74 6f 20 77 72 69 74 65 20 61 6e 20 65 72  e to write an er
2b30: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74 6f  ror message into
2b40: 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 6f 62 74 61   .** memory obta
2b50: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
2b60: 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 74  3_malloc() and t
2b70: 6f 20 6d 61 6b 65 20 2a 70 7a 45 72 72 4d 73 67  o make *pzErrMsg
2b80: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 0a 2a   point to that.*
2b90: 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  * error message.
2ba0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  .*/.int sqlite3R
2bb0: 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 20 2a  unParser(Parse *
2bc0: 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2bd0: 61 72 20 2a 7a 53 71 6c 2c 20 63 68 61 72 20 2a  ar *zSql, char *
2be0: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e  *pzErrMsg){.  in
2bf0: 74 20 6e 45 72 72 20 3d 20 30 3b 0a 20 20 69 6e  t nErr = 0;.  in
2c00: 74 20 69 3b 0a 20 20 76 6f 69 64 20 2a 70 45 6e  t i;.  void *pEn
2c10: 67 69 6e 65 3b 0a 20 20 69 6e 74 20 74 6f 6b 65  gine;.  int toke
2c20: 6e 54 79 70 65 3b 0a 20 20 69 6e 74 20 6c 61 73  nType;.  int las
2c30: 74 54 6f 6b 65 6e 50 61 72 73 65 64 20 3d 20 2d  tTokenParsed = -
2c40: 31 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  1;.  sqlite3 *db
2c50: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
2c60: 20 69 6e 74 20 6d 78 53 71 6c 4c 65 6e 20 3d 20   int mxSqlLen = 
2c70: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
2c80: 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47  E_LIMIT_SQL_LENG
2c90: 54 48 5d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e  TH];..  if( db->
2ca0: 61 63 74 69 76 65 56 64 62 65 43 6e 74 3d 3d 30  activeVdbeCnt==0
2cb0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 75 31 2e 69   ){.    db->u1.i
2cc0: 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d 20 30  sInterrupted = 0
2cd0: 3b 0a 20 20 7d 0a 20 20 70 50 61 72 73 65 2d 3e  ;.  }.  pParse->
2ce0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2cf0: 20 20 70 50 61 72 73 65 2d 3e 7a 54 61 69 6c 20    pParse->zTail 
2d00: 3d 20 70 50 61 72 73 65 2d 3e 7a 53 71 6c 20 3d  = pParse->zSql =
2d10: 20 7a 53 71 6c 3b 0a 20 20 69 20 3d 20 30 3b 0a   zSql;.  i = 0;.
2d20: 20 20 61 73 73 65 72 74 28 20 70 7a 45 72 72 4d    assert( pzErrM
2d30: 73 67 21 3d 30 20 29 3b 0a 20 20 70 45 6e 67 69  sg!=0 );.  pEngi
2d40: 6e 65 20 3d 20 73 71 6c 69 74 65 33 50 61 72 73  ne = sqlite3Pars
2d50: 65 72 41 6c 6c 6f 63 28 28 76 6f 69 64 2a 28 2a  erAlloc((void*(*
2d60: 29 28 73 69 7a 65 5f 74 29 29 73 71 6c 69 74 65  )(size_t))sqlite
2d70: 33 4d 61 6c 6c 6f 63 29 3b 0a 20 20 69 66 28 20  3Malloc);.  if( 
2d80: 70 45 6e 67 69 6e 65 3d 3d 30 20 29 7b 0a 20 20  pEngine==0 ){.  
2d90: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2da0: 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 65 74 75  ed = 1;.    retu
2db0: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
2dc0: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
2dd0: 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65  Parse->sLastToke
2de0: 6e 2e 64 79 6e 3d 3d 30 20 29 3b 0a 20 20 61 73  n.dyn==0 );.  as
2df0: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 70 4e  sert( pParse->pN
2e00: 65 77 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  ewTable==0 );.  
2e10: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
2e20: 70 4e 65 77 54 72 69 67 67 65 72 3d 3d 30 20 29  pNewTrigger==0 )
2e30: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 61 72  ;.  assert( pPar
2e40: 73 65 2d 3e 6e 56 61 72 3d 3d 30 20 29 3b 0a 20  se->nVar==0 );. 
2e50: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
2e60: 3e 6e 56 61 72 45 78 70 72 3d 3d 30 20 29 3b 0a  >nVarExpr==0 );.
2e70: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65    assert( pParse
2e80: 2d 3e 6e 56 61 72 45 78 70 72 41 6c 6c 6f 63 3d  ->nVarExprAlloc=
2e90: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2ea0: 70 50 61 72 73 65 2d 3e 61 70 56 61 72 45 78 70  pParse->apVarExp
2eb0: 72 3d 3d 30 20 29 3b 0a 20 20 77 68 69 6c 65 28  r==0 );.  while(
2ec0: 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
2ed0: 65 64 20 26 26 20 7a 53 71 6c 5b 69 5d 21 3d 30  ed && zSql[i]!=0
2ee0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2ef0: 69 3e 3d 30 20 29 3b 0a 20 20 20 20 70 50 61 72  i>=0 );.    pPar
2f00: 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2e 7a  se->sLastToken.z
2f10: 20 3d 20 28 75 38 2a 29 26 7a 53 71 6c 5b 69 5d   = (u8*)&zSql[i]
2f20: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2f30: 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e  arse->sLastToken
2f40: 2e 64 79 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 70  .dyn==0 );.    p
2f50: 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65  Parse->sLastToke
2f60: 6e 2e 6e 20 3d 20 73 71 6c 69 74 65 33 47 65 74  n.n = sqlite3Get
2f70: 54 6f 6b 65 6e 28 28 75 6e 73 69 67 6e 65 64 20  Token((unsigned 
2f80: 63 68 61 72 2a 29 26 7a 53 71 6c 5b 69 5d 2c 26  char*)&zSql[i],&
2f90: 74 6f 6b 65 6e 54 79 70 65 29 3b 0a 20 20 20 20  tokenType);.    
2fa0: 69 20 2b 3d 20 70 50 61 72 73 65 2d 3e 73 4c 61  i += pParse->sLa
2fb0: 73 74 54 6f 6b 65 6e 2e 6e 3b 0a 20 20 20 20 69  stToken.n;.    i
2fc0: 66 28 20 69 3e 6d 78 53 71 6c 4c 65 6e 20 29 7b  f( i>mxSqlLen ){
2fd0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72  .      pParse->r
2fe0: 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
2ff0: 47 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  G;.      break;.
3000: 20 20 20 20 7d 0a 20 20 20 20 73 77 69 74 63 68      }.    switch
3010: 28 20 74 6f 6b 65 6e 54 79 70 65 20 29 7b 0a 20  ( tokenType ){. 
3020: 20 20 20 20 20 63 61 73 65 20 54 4b 5f 53 50 41       case TK_SPA
3030: 43 45 3a 0a 20 20 20 20 20 20 63 61 73 65 20 54  CE:.      case T
3040: 4b 5f 43 4f 4d 4d 45 4e 54 3a 20 7b 0a 20 20 20  K_COMMENT: {.   
3050: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e       if( db->u1.
3060: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 7b  isInterrupted ){
3070: 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 72 73  .          pPars
3080: 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  e->rc = SQLITE_I
3090: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
30a0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
30b0: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 64  ring(pzErrMsg, d
30c0: 62 2c 20 22 69 6e 74 65 72 72 75 70 74 22 29 3b  b, "interrupt");
30d0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
30e0: 61 62 6f 72 74 5f 70 61 72 73 65 3b 0a 20 20 20  abort_parse;.   
30f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
3100: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
3110: 20 20 20 20 63 61 73 65 20 54 4b 5f 49 4c 4c 45      case TK_ILLE
3120: 47 41 4c 3a 20 7b 0a 20 20 20 20 20 20 20 20 73  GAL: {.        s
3130: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
3140: 20 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20   *pzErrMsg);.   
3150: 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d       *pzErrMsg =
3160: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
3170: 64 62 2c 20 22 75 6e 72 65 63 6f 67 6e 69 7a 65  db, "unrecognize
3180: 64 20 74 6f 6b 65 6e 3a 20 5c 22 25 54 5c 22 22  d token: \"%T\""
3190: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
31a0: 20 20 20 20 20 20 20 20 20 20 26 70 50 61 72 73            &pPars
31b0: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 29 3b 0a  e->sLastToken);.
31c0: 20 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a          nErr++;.
31d0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
31e0: 72 74 5f 70 61 72 73 65 3b 0a 20 20 20 20 20 20  rt_parse;.      
31f0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f  }.      case TK_
3200: 53 45 4d 49 3a 20 7b 0a 20 20 20 20 20 20 20 20  SEMI: {.        
3210: 70 50 61 72 73 65 2d 3e 7a 54 61 69 6c 20 3d 20  pParse->zTail = 
3220: 26 7a 53 71 6c 5b 69 5d 3b 0a 20 20 20 20 20 20  &zSql[i];.      
3230: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69    /* Fall thru i
3240: 6e 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20  nto the default 
3250: 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  case */.      }.
3260: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
3270: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3280: 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65 2c 20  Parser(pEngine, 
3290: 74 6f 6b 65 6e 54 79 70 65 2c 20 70 50 61 72 73  tokenType, pPars
32a0: 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70  e->sLastToken, p
32b0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20  Parse);.        
32c0: 6c 61 73 74 54 6f 6b 65 6e 50 61 72 73 65 64 20  lastTokenParsed 
32d0: 3d 20 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20 20  = tokenType;.   
32e0: 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65 2d       if( pParse-
32f0: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc!=SQLITE_OK )
3300: 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
3310: 20 61 62 6f 72 74 5f 70 61 72 73 65 3b 0a 20 20   abort_parse;.  
3320: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3330: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
3340: 20 20 20 7d 0a 20 20 7d 0a 61 62 6f 72 74 5f 70     }.  }.abort_p
3350: 61 72 73 65 3a 0a 20 20 69 66 28 20 7a 53 71 6c  arse:.  if( zSql
3360: 5b 69 5d 3d 3d 30 20 26 26 20 6e 45 72 72 3d 3d  [i]==0 && nErr==
3370: 30 20 26 26 20 70 50 61 72 73 65 2d 3e 72 63 3d  0 && pParse->rc=
3380: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
3390: 20 20 69 66 28 20 6c 61 73 74 54 6f 6b 65 6e 50    if( lastTokenP
33a0: 61 72 73 65 64 21 3d 54 4b 5f 53 45 4d 49 20 29  arsed!=TK_SEMI )
33b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 50  {.      sqlite3P
33c0: 61 72 73 65 72 28 70 45 6e 67 69 6e 65 2c 20 54  arser(pEngine, T
33d0: 4b 5f 53 45 4d 49 2c 20 70 50 61 72 73 65 2d 3e  K_SEMI, pParse->
33e0: 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70 50 61 72  sLastToken, pPar
33f0: 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73  se);.      pPars
3400: 65 2d 3e 7a 54 61 69 6c 20 3d 20 26 7a 53 71 6c  e->zTail = &zSql
3410: 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  [i];.    }.    s
3420: 71 6c 69 74 65 33 50 61 72 73 65 72 28 70 45 6e  qlite3Parser(pEn
3430: 67 69 6e 65 2c 20 30 2c 20 70 50 61 72 73 65 2d  gine, 0, pParse-
3440: 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70 50 61  >sLastToken, pPa
3450: 72 73 65 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66  rse);.  }.#ifdef
3460: 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
3470: 44 45 50 54 48 0a 20 20 73 71 6c 69 74 65 33 53  DEPTH.  sqlite3S
3480: 74 61 74 75 73 53 65 74 28 53 51 4c 49 54 45 5f  tatusSet(SQLITE_
3490: 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53 54  STATUS_PARSER_ST
34a0: 41 43 4b 2c 0a 20 20 20 20 20 20 73 71 6c 69 74  ACK,.      sqlit
34b0: 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
34c0: 6b 28 70 45 6e 67 69 6e 65 29 0a 20 20 29 3b 0a  k(pEngine).  );.
34d0: 23 65 6e 64 69 66 20 2f 2a 20 59 59 44 45 42 55  #endif /* YYDEBU
34e0: 47 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 50 61  G */.  sqlite3Pa
34f0: 72 73 65 72 46 72 65 65 28 70 45 6e 67 69 6e 65  rserFree(pEngine
3500: 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
3510: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
3520: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 70  cFailed ){.    p
3530: 50 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49  Parse->rc = SQLI
3540: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20  TE_NOMEM;.  }.  
3550: 69 66 28 20 70 50 61 72 73 65 2d 3e 72 63 21 3d  if( pParse->rc!=
3560: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 50 61  SQLITE_OK && pPa
3570: 72 73 65 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f  rse->rc!=SQLITE_
3580: 44 4f 4e 45 20 26 26 20 70 50 61 72 73 65 2d 3e  DONE && pParse->
3590: 7a 45 72 72 4d 73 67 3d 3d 30 20 29 7b 0a 20 20  zErrMsg==0 ){.  
35a0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
35b0: 6e 67 28 26 70 50 61 72 73 65 2d 3e 7a 45 72 72  ng(&pParse->zErr
35c0: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
35d0: 71 6c 69 74 65 33 45 72 72 53 74 72 28 70 50 61  qlite3ErrStr(pPa
35e0: 72 73 65 2d 3e 72 63 29 29 3b 0a 20 20 7d 0a 20  rse->rc));.  }. 
35f0: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 7a 45 72   if( pParse->zEr
3600: 72 4d 73 67 20 29 7b 0a 20 20 20 20 69 66 28 20  rMsg ){.    if( 
3610: 2a 70 7a 45 72 72 4d 73 67 3d 3d 30 20 29 7b 0a  *pzErrMsg==0 ){.
3620: 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20        *pzErrMsg 
3630: 3d 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73  = pParse->zErrMs
3640: 67 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  g;.    }else{.  
3650: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
3660: 65 28 64 62 2c 20 70 50 61 72 73 65 2d 3e 7a 45  e(db, pParse->zE
3670: 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20  rrMsg);.    }.  
3680: 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73    pParse->zErrMs
3690: 67 20 3d 20 30 3b 0a 20 20 20 20 6e 45 72 72 2b  g = 0;.    nErr+
36a0: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 50 61  +;.  }.  if( pPa
36b0: 72 73 65 2d 3e 70 56 64 62 65 20 26 26 20 70 50  rse->pVdbe && pP
36c0: 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 26 26 20  arse->nErr>0 && 
36d0: 70 50 61 72 73 65 2d 3e 6e 65 73 74 65 64 3d 3d  pParse->nested==
36e0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
36f0: 56 64 62 65 44 65 6c 65 74 65 28 70 50 61 72 73  VdbeDelete(pPars
3700: 65 2d 3e 70 56 64 62 65 29 3b 0a 20 20 20 20 70  e->pVdbe);.    p
3710: 50 61 72 73 65 2d 3e 70 56 64 62 65 20 3d 20 30  Parse->pVdbe = 0
3720: 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51  ;.  }.#ifndef SQ
3730: 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
3740: 5f 43 41 43 48 45 0a 20 20 69 66 28 20 70 50 61  _CACHE.  if( pPa
3750: 72 73 65 2d 3e 6e 65 73 74 65 64 3d 3d 30 20 29  rse->nested==0 )
3760: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
3770: 72 65 65 28 64 62 2c 20 70 50 61 72 73 65 2d 3e  ree(db, pParse->
3780: 61 54 61 62 6c 65 4c 6f 63 6b 29 3b 0a 20 20 20  aTableLock);.   
3790: 20 70 50 61 72 73 65 2d 3e 61 54 61 62 6c 65 4c   pParse->aTableL
37a0: 6f 63 6b 20 3d 20 30 3b 0a 20 20 20 20 70 50 61  ock = 0;.    pPa
37b0: 72 73 65 2d 3e 6e 54 61 62 6c 65 4c 6f 63 6b 20  rse->nTableLock 
37c0: 3d 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  = 0;.  }.#endif.
37d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
37e0: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
37f0: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
3800: 28 64 62 2c 20 70 50 61 72 73 65 2d 3e 61 70 56  (db, pParse->apV
3810: 74 61 62 4c 6f 63 6b 29 3b 0a 23 65 6e 64 69 66  tabLock);.#endif
3820: 0a 0a 20 20 69 66 28 20 21 49 4e 5f 44 45 43 4c  ..  if( !IN_DECL
3830: 41 52 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  ARE_VTAB ){.    
3840: 2f 2a 20 49 66 20 74 68 65 20 70 50 61 72 73 65  /* If the pParse
3850: 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 20 66 6c  ->declareVtab fl
3860: 61 67 20 69 73 20 73 65 74 2c 20 64 6f 20 6e 6f  ag is set, do no
3870: 74 20 64 65 6c 65 74 65 20 61 6e 79 20 74 61 62  t delete any tab
3880: 6c 65 20 0a 20 20 20 20 2a 2a 20 73 74 72 75 63  le .    ** struc
3890: 74 75 72 65 20 62 75 69 6c 74 20 75 70 20 69 6e  ture built up in
38a0: 20 70 50 61 72 73 65 2d 3e 70 4e 65 77 54 61 62   pParse->pNewTab
38b0: 6c 65 2e 20 54 68 65 20 63 61 6c 6c 69 6e 67 20  le. The calling 
38c0: 63 6f 64 65 20 28 73 65 65 20 76 74 61 62 2e 63  code (see vtab.c
38d0: 29 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 74 61  ).    ** will ta
38e0: 6b 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74  ke responsibilit
38f0: 79 20 66 6f 72 20 66 72 65 65 69 6e 67 20 74 68  y for freeing th
3900: 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
3910: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  e..    */.    sq
3920: 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
3930: 28 70 50 61 72 73 65 2d 3e 70 4e 65 77 54 61 62  (pParse->pNewTab
3940: 6c 65 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69  le);.  }..  sqli
3950: 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
3960: 28 64 62 2c 20 70 50 61 72 73 65 2d 3e 70 4e 65  (db, pParse->pNe
3970: 77 54 72 69 67 67 65 72 29 3b 0a 20 20 73 71 6c  wTrigger);.  sql
3980: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
3990: 50 61 72 73 65 2d 3e 61 70 56 61 72 45 78 70 72  Parse->apVarExpr
39a0: 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3e 30 20  );.  if( nErr>0 
39b0: 26 26 20 28 70 50 61 72 73 65 2d 3e 72 63 3d 3d  && (pParse->rc==
39c0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 50 61  SQLITE_OK || pPa
39d0: 72 73 65 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  rse->rc==SQLITE_
39e0: 44 4f 4e 45 29 20 29 7b 0a 20 20 20 20 70 50 61  DONE) ){.    pPa
39f0: 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45  rse->rc = SQLITE
3a00: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
3a10: 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a           turn nErr;.}.