/ Hex Artifact Content
Login

Artifact c4b79fd48ddb709b2b8522b7d93a5a3d98168ca4:


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 33 38 20  enize.c,v 1.138 
0250: 32 30 30 38 2f 30 31 2f 32 32 20 32 33 3a 33 37  2008/01/22 23:37
0260: 3a 31 30 20 64 72 68 20 45 78 70 20 24 0a 2a 2f  :10 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: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 54 6f  static int getTo
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 69 6e 74 20 73 71 6c 69 74 65   1;.}.int sqlite
2a30: 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2a40: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
2a50: 2c 20 69 6e 74 20 2a 74 6f 6b 65 6e 54 79 70 65  , int *tokenType
2a60: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 54  ){.  return getT
2a70: 6f 6b 65 6e 28 7a 2c 20 74 6f 6b 65 6e 54 79 70  oken(z, tokenTyp
2a80: 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e  e);.}../*.** Run
2a90: 20 74 68 65 20 70 61 72 73 65 72 20 6f 6e 20 74   the parser on t
2aa0: 68 65 20 67 69 76 65 6e 20 53 51 4c 20 73 74 72  he given SQL str
2ab0: 69 6e 67 2e 20 20 54 68 65 20 70 61 72 73 65 72  ing.  The parser
2ac0: 20 73 74 72 75 63 74 75 72 65 20 69 73 0a 2a 2a   structure is.**
2ad0: 20 70 61 73 73 65 64 20 69 6e 2e 20 20 41 6e 20   passed in.  An 
2ae0: 53 51 4c 49 54 45 5f 20 73 74 61 74 75 73 20 63  SQLITE_ status c
2af0: 6f 64 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ode is returned.
2b00: 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63    If an error oc
2b10: 63 75 72 73 0a 2a 2a 20 61 6e 64 20 70 7a 45 72  curs.** and pzEr
2b20: 72 4d 73 67 21 3d 4e 55 4c 4c 20 74 68 65 6e 20  rMsg!=NULL then 
2b30: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
2b40: 20 6d 69 67 68 74 20 62 65 20 77 72 69 74 74 65   might be writte
2b50: 6e 20 69 6e 74 6f 20 0a 2a 2a 20 6d 65 6d 6f 72  n into .** memor
2b60: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
2b70: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
2b80: 20 61 6e 64 20 2a 70 7a 45 72 72 4d 73 67 20 6d   and *pzErrMsg m
2b90: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
2ba0: 74 68 61 74 0a 2a 2a 20 65 72 72 6f 72 20 6d 65  that.** error me
2bb0: 73 73 61 67 65 2e 20 20 4f 72 20 6d 61 79 62 65  ssage.  Or maybe
2bc0: 20 6e 6f 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c   not..*/.int sql
2bd0: 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
2be0: 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
2bf0: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 63  st char *zSql, c
2c00: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
2c10: 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b  .  int nErr = 0;
2c20: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 76 6f 69 64  .  int i;.  void
2c30: 20 2a 70 45 6e 67 69 6e 65 3b 0a 20 20 69 6e 74   *pEngine;.  int
2c40: 20 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20 69 6e   tokenType;.  in
2c50: 74 20 6c 61 73 74 54 6f 6b 65 6e 50 61 72 73 65  t lastTokenParse
2c60: 64 20 3d 20 2d 31 3b 0a 20 20 73 71 6c 69 74 65  d = -1;.  sqlite
2c70: 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e  3 *db = pParse->
2c80: 64 62 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 61  db;..  if( db->a
2c90: 63 74 69 76 65 56 64 62 65 43 6e 74 3d 3d 30 20  ctiveVdbeCnt==0 
2ca0: 29 7b 0a 20 20 20 20 64 62 2d 3e 75 31 2e 69 73  ){.    db->u1.is
2cb0: 49 6e 74 65 72 72 75 70 74 65 64 20 3d 20 30 3b  Interrupted = 0;
2cc0: 0a 20 20 7d 0a 20 20 70 50 61 72 73 65 2d 3e 72  .  }.  pParse->r
2cd0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2ce0: 20 69 20 3d 20 30 3b 0a 20 20 70 45 6e 67 69 6e   i = 0;.  pEngin
2cf0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 72 73 65  e = sqlite3Parse
2d00: 72 41 6c 6c 6f 63 28 28 76 6f 69 64 2a 28 2a 29  rAlloc((void*(*)
2d10: 28 73 69 7a 65 5f 74 29 29 73 71 6c 69 74 65 33  (size_t))sqlite3
2d20: 5f 6d 61 6c 6c 6f 63 29 3b 0a 20 20 69 66 28 20  _malloc);.  if( 
2d30: 70 45 6e 67 69 6e 65 3d 3d 30 20 29 7b 0a 20 20  pEngine==0 ){.  
2d40: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2d50: 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 65 74 75  ed = 1;.    retu
2d60: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
2d70: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
2d80: 50 61 72 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65  Parse->sLastToke
2d90: 6e 2e 64 79 6e 3d 3d 30 20 29 3b 0a 20 20 61 73  n.dyn==0 );.  as
2da0: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 70 4e  sert( pParse->pN
2db0: 65 77 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  ewTable==0 );.  
2dc0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
2dd0: 70 4e 65 77 54 72 69 67 67 65 72 3d 3d 30 20 29  pNewTrigger==0 )
2de0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 61 72  ;.  assert( pPar
2df0: 73 65 2d 3e 6e 56 61 72 3d 3d 30 20 29 3b 0a 20  se->nVar==0 );. 
2e00: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
2e10: 3e 6e 56 61 72 45 78 70 72 3d 3d 30 20 29 3b 0a  >nVarExpr==0 );.
2e20: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65    assert( pParse
2e30: 2d 3e 6e 56 61 72 45 78 70 72 41 6c 6c 6f 63 3d  ->nVarExprAlloc=
2e40: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2e50: 70 50 61 72 73 65 2d 3e 61 70 56 61 72 45 78 70  pParse->apVarExp
2e60: 72 3d 3d 30 20 29 3b 0a 20 20 70 50 61 72 73 65  r==0 );.  pParse
2e70: 2d 3e 7a 54 61 69 6c 20 3d 20 70 50 61 72 73 65  ->zTail = pParse
2e80: 2d 3e 7a 53 71 6c 20 3d 20 7a 53 71 6c 3b 0a 20  ->zSql = zSql;. 
2e90: 20 77 68 69 6c 65 28 20 21 64 62 2d 3e 6d 61 6c   while( !db->mal
2ea0: 6c 6f 63 46 61 69 6c 65 64 20 26 26 20 7a 53 71  locFailed && zSq
2eb0: 6c 5b 69 5d 21 3d 30 20 29 7b 0a 20 20 20 20 61  l[i]!=0 ){.    a
2ec0: 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20  ssert( i>=0 );. 
2ed0: 20 20 20 70 50 61 72 73 65 2d 3e 73 4c 61 73 74     pParse->sLast
2ee0: 54 6f 6b 65 6e 2e 7a 20 3d 20 28 75 38 2a 29 26  Token.z = (u8*)&
2ef0: 7a 53 71 6c 5b 69 5d 3b 0a 20 20 20 20 61 73 73  zSql[i];.    ass
2f00: 65 72 74 28 20 70 50 61 72 73 65 2d 3e 73 4c 61  ert( pParse->sLa
2f10: 73 74 54 6f 6b 65 6e 2e 64 79 6e 3d 3d 30 20 29  stToken.dyn==0 )
2f20: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 73 4c  ;.    pParse->sL
2f30: 61 73 74 54 6f 6b 65 6e 2e 6e 20 3d 20 67 65 74  astToken.n = get
2f40: 54 6f 6b 65 6e 28 28 75 6e 73 69 67 6e 65 64 20  Token((unsigned 
2f50: 63 68 61 72 2a 29 26 7a 53 71 6c 5b 69 5d 2c 26  char*)&zSql[i],&
2f60: 74 6f 6b 65 6e 54 79 70 65 29 3b 0a 20 20 20 20  tokenType);.    
2f70: 69 20 2b 3d 20 70 50 61 72 73 65 2d 3e 73 4c 61  i += pParse->sLa
2f80: 73 74 54 6f 6b 65 6e 2e 6e 3b 0a 20 20 20 20 69  stToken.n;.    i
2f90: 66 28 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51  f( SQLITE_MAX_SQ
2fa0: 4c 5f 4c 45 4e 47 54 48 3e 30 20 26 26 20 69 3e  L_LENGTH>0 && i>
2fb0: 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c  SQLITE_MAX_SQL_L
2fc0: 45 4e 47 54 48 20 29 7b 0a 20 20 20 20 20 20 70  ENGTH ){.      p
2fd0: 50 61 72 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49  Parse->rc = SQLI
2fe0: 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 20 20 20  TE_TOOBIG;.     
2ff0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
3000: 20 20 73 77 69 74 63 68 28 20 74 6f 6b 65 6e 54    switch( tokenT
3010: 79 70 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ype ){.      cas
3020: 65 20 54 4b 5f 53 50 41 43 45 3a 0a 20 20 20 20  e TK_SPACE:.    
3030: 20 20 63 61 73 65 20 54 4b 5f 43 4f 4d 4d 45 4e    case TK_COMMEN
3040: 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  T: {.        if(
3050: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
3060: 75 70 74 65 64 20 29 7b 0a 20 20 20 20 20 20 20  upted ){.       
3070: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
3080: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
3090: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
30a0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45  te3SetString(pzE
30b0: 72 72 4d 73 67 2c 20 22 69 6e 74 65 72 72 75 70  rrMsg, "interrup
30c0: 74 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  t", (char*)0);. 
30d0: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
30e0: 6f 72 74 5f 70 61 72 73 65 3b 0a 20 20 20 20 20  ort_parse;.     
30f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65     }.        bre
3100: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
3110: 20 20 63 61 73 65 20 54 4b 5f 49 4c 4c 45 47 41    case TK_ILLEGA
3120: 4c 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  L: {.        if(
3130: 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
3140: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
3150: 72 65 65 28 2a 70 7a 45 72 72 4d 73 67 29 3b 0a  ree(*pzErrMsg);.
3160: 20 20 20 20 20 20 20 20 20 20 2a 70 7a 45 72 72            *pzErr
3170: 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Msg = sqlite3MPr
3180: 69 6e 74 66 28 64 62 2c 20 22 75 6e 72 65 63 6f  intf(db, "unreco
3190: 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 3a 20 5c 22  gnized token: \"
31a0: 25 54 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 20  %T\"",.         
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c0: 20 26 70 50 61 72 73 65 2d 3e 73 4c 61 73 74 54   &pParse->sLastT
31d0: 6f 6b 65 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d  oken);.        }
31e0: 0a 20 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b  .        nErr++;
31f0: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
3200: 6f 72 74 5f 70 61 72 73 65 3b 0a 20 20 20 20 20  ort_parse;.     
3210: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54 4b   }.      case TK
3220: 5f 53 45 4d 49 3a 20 7b 0a 20 20 20 20 20 20 20  _SEMI: {.       
3230: 20 70 50 61 72 73 65 2d 3e 7a 54 61 69 6c 20 3d   pParse->zTail =
3240: 20 26 7a 53 71 6c 5b 69 5d 3b 0a 20 20 20 20 20   &zSql[i];.     
3250: 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20     /* Fall thru 
3260: 69 6e 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  into the default
3270: 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 7d   case */.      }
3280: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
3290: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
32a0: 33 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65 2c  3Parser(pEngine,
32b0: 20 74 6f 6b 65 6e 54 79 70 65 2c 20 70 50 61 72   tokenType, pPar
32c0: 73 65 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20  se->sLastToken, 
32d0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20  pParse);.       
32e0: 20 6c 61 73 74 54 6f 6b 65 6e 50 61 72 73 65 64   lastTokenParsed
32f0: 20 3d 20 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20   = tokenType;.  
3300: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65        if( pParse
3310: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc!=SQLITE_OK 
3320: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
3330: 6f 20 61 62 6f 72 74 5f 70 61 72 73 65 3b 0a 20  o abort_parse;. 
3340: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3350: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
3360: 20 20 20 20 7d 0a 20 20 7d 0a 61 62 6f 72 74 5f      }.  }.abort_
3370: 70 61 72 73 65 3a 0a 20 20 69 66 28 20 7a 53 71  parse:.  if( zSq
3380: 6c 5b 69 5d 3d 3d 30 20 26 26 20 6e 45 72 72 3d  l[i]==0 && nErr=
3390: 3d 30 20 26 26 20 70 50 61 72 73 65 2d 3e 72 63  =0 && pParse->rc
33a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
33b0: 20 20 20 69 66 28 20 6c 61 73 74 54 6f 6b 65 6e     if( lastToken
33c0: 50 61 72 73 65 64 21 3d 54 4b 5f 53 45 4d 49 20  Parsed!=TK_SEMI 
33d0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
33e0: 50 61 72 73 65 72 28 70 45 6e 67 69 6e 65 2c 20  Parser(pEngine, 
33f0: 54 4b 5f 53 45 4d 49 2c 20 70 50 61 72 73 65 2d  TK_SEMI, pParse-
3400: 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70 50 61  >sLastToken, pPa
3410: 72 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61 72  rse);.      pPar
3420: 73 65 2d 3e 7a 54 61 69 6c 20 3d 20 26 7a 53 71  se->zTail = &zSq
3430: 6c 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  l[i];.    }.    
3440: 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 70 45  sqlite3Parser(pE
3450: 6e 67 69 6e 65 2c 20 30 2c 20 70 50 61 72 73 65  ngine, 0, pParse
3460: 2d 3e 73 4c 61 73 74 54 6f 6b 65 6e 2c 20 70 50  ->sLastToken, pP
3470: 61 72 73 65 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  arse);.  }.  sql
3480: 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 70  ite3ParserFree(p
3490: 45 6e 67 69 6e 65 2c 20 73 71 6c 69 74 65 33 5f  Engine, sqlite3_
34a0: 66 72 65 65 29 3b 0a 20 20 69 66 28 20 64 62 2d  free);.  if( db-
34b0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
34c0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20  .    pParse->rc 
34d0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
34e0: 20 20 7d 0a 20 20 69 66 28 20 70 50 61 72 73 65    }.  if( pParse
34f0: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc!=SQLITE_OK 
3500: 26 26 20 70 50 61 72 73 65 2d 3e 72 63 21 3d 53  && pParse->rc!=S
3510: 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20 70 50  QLITE_DONE && pP
3520: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  arse->zErrMsg==0
3530: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
3540: 65 74 53 74 72 69 6e 67 28 26 70 50 61 72 73 65  etString(&pParse
3550: 2d 3e 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74  ->zErrMsg, sqlit
3560: 65 33 45 72 72 53 74 72 28 70 50 61 72 73 65 2d  e3ErrStr(pParse-
3570: 3e 72 63 29 2c 20 28 63 68 61 72 2a 29 30 29 3b  >rc), (char*)0);
3580: 0a 20 20 7d 0a 20 20 69 66 28 20 70 50 61 72 73  .  }.  if( pPars
3590: 65 2d 3e 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  e->zErrMsg ){.  
35a0: 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 26    if( pzErrMsg &
35b0: 26 20 2a 70 7a 45 72 72 4d 73 67 3d 3d 30 20 29  & *pzErrMsg==0 )
35c0: 7b 0a 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73  {.      *pzErrMs
35d0: 67 20 3d 20 70 50 61 72 73 65 2d 3e 7a 45 72 72  g = pParse->zErr
35e0: 4d 73 67 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Msg;.    }else{.
35f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
3600: 65 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d  ee(pParse->zErrM
3610: 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  sg);.    }.    p
3620: 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20 3d  Parse->zErrMsg =
3630: 20 30 3b 0a 20 20 20 20 6e 45 72 72 2b 2b 3b 0a   0;.    nErr++;.
3640: 20 20 7d 0a 20 20 69 66 28 20 70 50 61 72 73 65    }.  if( pParse
3650: 2d 3e 70 56 64 62 65 20 26 26 20 70 50 61 72 73  ->pVdbe && pPars
3660: 65 2d 3e 6e 45 72 72 3e 30 20 26 26 20 70 50 61  e->nErr>0 && pPa
3670: 72 73 65 2d 3e 6e 65 73 74 65 64 3d 3d 30 20 29  rse->nested==0 )
3680: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
3690: 65 44 65 6c 65 74 65 28 70 50 61 72 73 65 2d 3e  eDelete(pParse->
36a0: 70 56 64 62 65 29 3b 0a 20 20 20 20 70 50 61 72  pVdbe);.    pPar
36b0: 73 65 2d 3e 70 56 64 62 65 20 3d 20 30 3b 0a 20  se->pVdbe = 0;. 
36c0: 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
36d0: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
36e0: 43 48 45 0a 20 20 69 66 28 20 70 50 61 72 73 65  CHE.  if( pParse
36f0: 2d 3e 6e 65 73 74 65 64 3d 3d 30 20 29 7b 0a 20  ->nested==0 ){. 
3700: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
3710: 70 50 61 72 73 65 2d 3e 61 54 61 62 6c 65 4c 6f  pParse->aTableLo
3720: 63 6b 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  ck);.    pParse-
3730: 3e 61 54 61 62 6c 65 4c 6f 63 6b 20 3d 20 30 3b  >aTableLock = 0;
3740: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 54 61  .    pParse->nTa
3750: 62 6c 65 4c 6f 63 6b 20 3d 20 30 3b 0a 20 20 7d  bleLock = 0;.  }
3760: 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 21  .#endif..  if( !
3770: 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
3780: 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
3790: 20 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65   pParse->declare
37a0: 56 74 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  Vtab flag is set
37b0: 2c 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20  , do not delete 
37c0: 61 6e 79 20 74 61 62 6c 65 20 0a 20 20 20 20 2a  any table .    *
37d0: 2a 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c  * structure buil
37e0: 74 20 75 70 20 69 6e 20 70 50 61 72 73 65 2d 3e  t up in pParse->
37f0: 70 4e 65 77 54 61 62 6c 65 2e 20 54 68 65 20 63  pNewTable. The c
3800: 61 6c 6c 69 6e 67 20 63 6f 64 65 20 28 73 65 65  alling code (see
3810: 20 76 74 61 62 2e 63 29 0a 20 20 20 20 2a 2a 20   vtab.c).    ** 
3820: 77 69 6c 6c 20 74 61 6b 65 20 72 65 73 70 6f 6e  will take respon
3830: 73 69 62 69 6c 69 74 79 20 66 6f 72 20 66 72 65  sibility for fre
3840: 65 69 6e 67 20 74 68 65 20 54 61 62 6c 65 20 73  eing the Table s
3850: 74 72 75 63 74 75 72 65 2e 0a 20 20 20 20 2a 2f  tructure..    */
3860: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 6c 65  .    sqlite3Dele
3870: 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2d 3e  teTable(pParse->
3880: 70 4e 65 77 54 61 62 6c 65 29 3b 0a 20 20 7d 0a  pNewTable);.  }.
3890: 0a 20 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  .  sqlite3Delete
38a0: 54 72 69 67 67 65 72 28 70 50 61 72 73 65 2d 3e  Trigger(pParse->
38b0: 70 4e 65 77 54 72 69 67 67 65 72 29 3b 0a 20 20  pNewTrigger);.  
38c0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 50 61  sqlite3_free(pPa
38d0: 72 73 65 2d 3e 61 70 56 61 72 45 78 70 72 29 3b  rse->apVarExpr);
38e0: 0a 20 20 69 66 28 20 6e 45 72 72 3e 30 20 26 26  .  if( nErr>0 &&
38f0: 20 28 70 50 61 72 73 65 2d 3e 72 63 3d 3d 53 51   (pParse->rc==SQ
3900: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 50 61 72 73  LITE_OK || pPars
3910: 65 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  e->rc==SQLITE_DO
3920: 4e 45 29 20 29 7b 0a 20 20 20 20 70 50 61 72 73  NE) ){.    pPars
3930: 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  e->rc = SQLITE_E
3940: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RROR;.  }.  retu
3950: 72 6e 20 6e 45 72 72 3b 0a 7d 0a                 rn nErr;.}.