/ Hex Artifact Content
Login

Artifact 9ec486608b7b4daaccf4ad9f05eef1a26a008fb8:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 31 39 39 39 2c 20 32 30 30 30 20 44  (c) 1999, 2000 D
0020: 2e 20 52 69 63 68 61 72 64 20 48 69 70 70 0a 2a  . Richard Hipp.*
0030: 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61  *.** This progra
0040: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
0050: 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69  re; you can redi
0060: 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f  stribute it and/
0070: 6f 72 0a 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20  or.** modify it 
0080: 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20  under the terms 
0090: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72  of the GNU Gener
00a0: 61 6c 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63  al Public.** Lic
00b0: 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  ense as publishe
00c0: 64 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f  d by the Free So
00d0: 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f  ftware Foundatio
00e0: 6e 3b 20 65 69 74 68 65 72 0a 2a 2a 20 76 65 72  n; either.** ver
00f0: 73 69 6f 6e 20 32 20 6f 66 20 74 68 65 20 4c 69  sion 2 of the Li
0100: 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 20 79 6f  cense, or (at yo
0110: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0120: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 2a 2a  ater version..**
0130: 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  .** This program
0140: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
0150: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
0160: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
0170: 75 6c 2c 0a 2a 2a 20 62 75 74 20 57 49 54 48 4f  ul,.** but WITHO
0180: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
0190: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
01a0: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
01b0: 74 79 20 6f 66 0a 2a 2a 20 4d 45 52 43 48 41 4e  ty of.** MERCHAN
01c0: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
01d0: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
01e0: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
01f0: 65 65 20 74 68 65 20 47 4e 55 0a 2a 2a 20 47 65  ee the GNU.** Ge
0200: 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  neral Public Lic
0210: 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65  ense for more de
0220: 74 61 69 6c 73 2e 0a 2a 2a 20 0a 2a 2a 20 59 6f  tails..** .** Yo
0230: 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65  u should have re
0240: 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66  ceived a copy of
0250: 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c   the GNU General
0260: 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e   Public.** Licen
0270: 73 65 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  se along with th
0280: 69 73 20 6c 69 62 72 61 72 79 3b 20 69 66 20 6e  is library; if n
0290: 6f 74 2c 20 77 72 69 74 65 20 74 6f 20 74 68 65  ot, write to the
02a0: 0a 2a 2a 20 46 72 65 65 20 53 6f 66 74 77 61 72  .** Free Softwar
02b0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e  e Foundation, In
02c0: 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50 6c  c., 59 Temple Pl
02d0: 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30 2c  ace - Suite 330,
02e0: 0a 2a 2a 20 42 6f 73 74 6f 6e 2c 20 4d 41 20 20  .** Boston, MA  
02f0: 30 32 31 31 31 2d 31 33 30 37 2c 20 55 53 41 2e  02111-1307, USA.
0300: 0a 2a 2a 0a 2a 2a 20 41 75 74 68 6f 72 20 63 6f  .**.** Author co
0310: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
0320: 6e 3a 0a 2a 2a 20 20 20 64 72 68 40 68 77 61 63  n:.**   drh@hwac
0330: 69 2e 63 6f 6d 0a 2a 2a 20 20 20 68 74 74 70 3a  i.com.**   http:
0340: 2f 2f 77 77 77 2e 68 77 61 63 69 2e 63 6f 6d 2f  //www.hwaci.com/
0350: 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  drh/.**.********
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03a0: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
03b0: 6f 6e 74 61 69 6e 73 20 53 51 4c 69 74 65 27 73  ontains SQLite's
03c0: 20 67 72 61 6d 6d 61 72 20 66 6f 72 20 53 51 4c   grammar for SQL
03d0: 2e 20 20 50 72 6f 63 65 73 73 20 74 68 69 73 20  .  Process this 
03e0: 66 69 6c 65 0a 2a 2a 20 75 73 69 6e 67 20 74 68  file.** using th
03f0: 65 20 6c 65 6d 6f 6e 20 70 61 72 73 65 72 20 67  e lemon parser g
0400: 65 6e 65 72 61 74 6f 72 20 74 6f 20 67 65 6e 65  enerator to gene
0410: 72 61 74 65 20 43 20 63 6f 64 65 20 74 68 61 74  rate C code that
0420: 20 72 75 6e 73 0a 2a 2a 20 74 68 65 20 70 61 72   runs.** the par
0430: 73 65 72 2e 20 20 4c 65 6d 6f 6e 20 77 69 6c 6c  ser.  Lemon will
0440: 20 61 6c 73 6f 20 67 65 6e 65 72 61 74 65 20 61   also generate a
0450: 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f 6e   header file con
0460: 74 61 69 6e 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  taining.** numer
0470: 69 63 20 63 6f 64 65 73 20 66 6f 72 20 61 6c 6c  ic codes for all
0480: 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 73 2e 0a   of the tokens..
0490: 2a 2a 0a 2a 2a 20 40 28 23 29 20 24 49 64 3a 20  **.** @(#) $Id: 
04a0: 70 61 72 73 65 2e 79 2c 76 20 31 2e 38 20 32 30  parse.y,v 1.8 20
04b0: 30 30 2f 30 36 2f 30 33 20 31 39 3a 31 39 3a 34  00/06/03 19:19:4
04c0: 31 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 25  1 drh Exp $.*/.%
04d0: 74 6f 6b 65 6e 5f 70 72 65 66 69 78 20 54 4b 5f  token_prefix TK_
04e0: 0a 25 74 6f 6b 65 6e 5f 74 79 70 65 20 7b 54 6f  .%token_type {To
04f0: 6b 65 6e 7d 0a 25 65 78 74 72 61 5f 61 72 67 75  ken}.%extra_argu
0500: 6d 65 6e 74 20 7b 50 61 72 73 65 20 2a 70 50 61  ment {Parse *pPa
0510: 72 73 65 7d 0a 25 73 79 6e 74 61 78 5f 65 72 72  rse}.%syntax_err
0520: 6f 72 20 7b 0a 20 20 73 71 6c 69 74 65 53 65 74  or {.  sqliteSet
0530: 4e 53 74 72 69 6e 67 28 26 70 50 61 72 73 65 2d  NString(&pParse-
0540: 3e 7a 45 72 72 4d 73 67 2c 22 73 79 6e 74 61 78  >zErrMsg,"syntax
0550: 20 65 72 72 6f 72 20 6e 65 61 72 20 5c 22 22 2c   error near \"",
0560: 30 2c 54 4f 4b 45 4e 2e 7a 2c 54 4f 4b 45 4e 2e  0,TOKEN.z,TOKEN.
0570: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
0580: 20 20 20 20 20 20 22 5c 22 22 2c 20 31 2c 20 30        "\"", 1, 0
0590: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 73 45 72  );.  pParse->sEr
05a0: 72 54 6f 6b 65 6e 20 3d 20 54 4f 4b 45 4e 3b 0a  rToken = TOKEN;.
05b0: 7d 0a 25 6e 61 6d 65 20 73 71 6c 69 74 65 50 61  }.%name sqlitePa
05c0: 72 73 65 72 0a 25 69 6e 63 6c 75 64 65 20 7b 0a  rser.%include {.
05d0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
05e0: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
05f0: 22 70 61 72 73 65 2e 68 22 0a 7d 0a 0a 0a 2f 2f  "parse.h".}...//
0600: 20 49 6e 70 75 74 20 69 73 20 7a 65 72 6f 20 6f   Input is zero o
0610: 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 6e 64 73 2e  r more commands.
0620: 0a 69 6e 70 75 74 20 3a 3a 3d 20 63 6d 64 6c 69  .input ::= cmdli
0630: 73 74 2e 0a 0a 2f 2f 20 54 68 65 73 65 20 61 72  st...// These ar
0640: 65 20 65 78 74 72 61 20 74 6f 6b 65 6e 73 20 75  e extra tokens u
0650: 73 65 64 20 62 79 20 74 68 65 20 6c 65 78 65 72  sed by the lexer
0660: 20 62 75 74 20 6e 65 76 65 72 20 73 65 65 6e 20   but never seen 
0670: 62 79 20 74 68 65 0a 2f 2f 20 70 61 72 73 65 72  by the.// parser
0680: 2e 20 20 57 65 20 70 75 74 20 74 68 65 6d 20 69  .  We put them i
0690: 6e 20 61 20 72 75 6c 65 20 73 6f 20 74 68 61 74  n a rule so that
06a0: 20 74 68 65 20 70 61 72 73 65 72 20 67 65 6e 65   the parser gene
06b0: 72 61 74 6f 72 20 77 69 6c 6c 0a 2f 2f 20 61 64  rator will.// ad
06c0: 64 20 74 68 65 6d 20 74 6f 20 74 68 65 20 73 71  d them to the sq
06d0: 6c 69 74 65 54 6f 6b 65 6e 73 2e 68 20 6f 75 74  liteTokens.h out
06e0: 70 75 74 20 66 69 6c 65 2e 0a 2f 2f 0a 69 6e 70  put file..//.inp
06f0: 75 74 20 3a 3a 3d 20 45 4e 44 5f 4f 46 5f 46 49  ut ::= END_OF_FI
0700: 4c 45 20 49 4c 4c 45 47 41 4c 20 53 50 41 43 45  LE ILLEGAL SPACE
0710: 20 55 4e 43 4c 4f 53 45 44 5f 53 54 52 49 4e 47   UNCLOSED_STRING
0720: 20 43 4f 4d 4d 45 4e 54 20 46 55 4e 43 54 49 4f   COMMENT FUNCTIO
0730: 4e 0a 20 20 20 20 20 20 20 20 20 20 55 4d 49 4e  N.          UMIN
0740: 55 53 20 46 49 45 4c 44 2e 0a 0a 2f 2f 20 41 20  US FIELD...// A 
0750: 6c 69 73 74 20 6f 66 20 63 6f 6d 6d 61 6e 64 73  list of commands
0760: 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
0770: 20 63 6f 6d 6d 61 6e 64 73 0a 2f 2f 0a 63 6d 64   commands.//.cmd
0780: 6c 69 73 74 20 3a 3a 3d 20 65 63 6d 64 2e 0a 63  list ::= ecmd..c
0790: 6d 64 6c 69 73 74 20 3a 3a 3d 20 63 6d 64 6c 69  mdlist ::= cmdli
07a0: 73 74 20 53 45 4d 49 20 65 63 6d 64 2e 0a 65 63  st SEMI ecmd..ec
07b0: 6d 64 20 3a 3a 3d 20 65 78 70 6c 61 69 6e 20 63  md ::= explain c
07c0: 6d 64 2e 20 20 7b 73 71 6c 69 74 65 45 78 65 63  md.  {sqliteExec
07d0: 28 70 50 61 72 73 65 29 3b 7d 0a 65 63 6d 64 20  (pParse);}.ecmd 
07e0: 3a 3a 3d 20 63 6d 64 2e 20 20 20 20 20 20 20 20  ::= cmd.        
07f0: 20 20 7b 73 71 6c 69 74 65 45 78 65 63 28 70 50    {sqliteExec(pP
0800: 61 72 73 65 29 3b 7d 0a 65 63 6d 64 20 3a 3a 3d  arse);}.ecmd ::=
0810: 20 2e 0a 65 78 70 6c 61 69 6e 20 3a 3a 3d 20 45   ..explain ::= E
0820: 58 50 4c 41 49 4e 2e 20 20 20 20 7b 70 50 61 72  XPLAIN.    {pPar
0830: 73 65 2d 3e 65 78 70 6c 61 69 6e 20 3d 20 31 3b  se->explain = 1;
0840: 7d 0a 0a 2f 2f 20 54 68 65 20 66 69 72 73 74 20  }..// The first 
0850: 66 6f 72 6d 20 6f 66 20 61 20 63 6f 6d 6d 61 6e  form of a comman
0860: 64 20 69 73 20 61 20 43 52 45 41 54 45 20 54 41  d is a CREATE TA
0870: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2f  BLE statement../
0880: 2f 0a 63 6d 64 20 3a 3a 3d 20 63 72 65 61 74 65  /.cmd ::= create
0890: 5f 74 61 62 6c 65 20 63 72 65 61 74 65 5f 74 61  _table create_ta
08a0: 62 6c 65 5f 61 72 67 73 2e 0a 63 72 65 61 74 65  ble_args..create
08b0: 5f 74 61 62 6c 65 20 3a 3a 3d 20 43 52 45 41 54  _table ::= CREAT
08c0: 45 28 58 29 20 54 41 42 4c 45 20 69 64 28 59 29  E(X) TABLE id(Y)
08d0: 2e 20 20 20 20 7b 73 71 6c 69 74 65 53 74 61 72  .    {sqliteStar
08e0: 74 54 61 62 6c 65 28 70 50 61 72 73 65 2c 26 58  tTable(pParse,&X
08f0: 2c 26 59 29 3b 7d 0a 63 72 65 61 74 65 5f 74 61  ,&Y);}.create_ta
0900: 62 6c 65 5f 61 72 67 73 20 3a 3a 3d 20 4c 50 20  ble_args ::= LP 
0910: 63 6f 6c 75 6d 6e 6c 69 73 74 20 63 6f 6e 73 6c  columnlist consl
0920: 69 73 74 5f 6f 70 74 20 52 50 28 58 29 2e 0a 20  ist_opt RP(X).. 
0930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0950: 20 20 20 20 20 20 20 20 20 20 7b 73 71 6c 69 74            {sqlit
0960: 65 45 6e 64 54 61 62 6c 65 28 70 50 61 72 73 65  eEndTable(pParse
0970: 2c 26 58 29 3b 7d 0a 63 6f 6c 75 6d 6e 6c 69 73  ,&X);}.columnlis
0980: 74 20 3a 3a 3d 20 63 6f 6c 75 6d 6e 6c 69 73 74  t ::= columnlist
0990: 20 43 4f 4d 4d 41 20 63 6f 6c 75 6d 6e 2e 0a 63   COMMA column..c
09a0: 6f 6c 75 6d 6e 6c 69 73 74 20 3a 3a 3d 20 63 6f  olumnlist ::= co
09b0: 6c 75 6d 6e 2e 0a 0a 2f 2f 20 41 62 6f 75 74 20  lumn...// About 
09c0: 74 68 65 20 6f 6e 6c 79 20 69 6e 66 6f 72 6d 61  the only informa
09d0: 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 61 20  tion used for a 
09e0: 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 6e 61  column is the na
09f0: 6d 65 20 6f 66 20 74 68 65 0a 2f 2f 20 63 6f 6c  me of the.// col
0a00: 75 6d 6e 2e 20 20 54 68 65 20 74 79 70 65 20 69  umn.  The type i
0a10: 73 20 61 6c 77 61 79 73 20 6a 75 73 74 20 22 74  s always just "t
0a20: 65 78 74 22 2e 20 20 42 75 74 20 74 68 65 20 63  ext".  But the c
0a30: 6f 64 65 20 77 69 6c 6c 20 61 63 63 65 70 74 0a  ode will accept.
0a40: 2f 2f 20 61 6e 20 65 6c 61 62 6f 72 61 74 65 20  // an elaborate 
0a50: 74 79 70 65 6e 61 6d 65 2e 20 20 50 65 72 68 61  typename.  Perha
0a60: 70 73 20 73 6f 6d 65 64 61 79 20 77 65 27 6c 6c  ps someday we'll
0a70: 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69   do something wi
0a80: 74 68 20 69 74 2e 0a 2f 2f 0a 63 6f 6c 75 6d 6e  th it..//.column
0a90: 20 3a 3a 3d 20 63 6f 6c 75 6d 6e 69 64 20 74 79   ::= columnid ty
0aa0: 70 65 20 63 61 72 67 6c 69 73 74 2e 20 0a 63 6f  pe carglist. .co
0ab0: 6c 75 6d 6e 69 64 20 3a 3a 3d 20 69 64 28 58 29  lumnid ::= id(X)
0ac0: 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ad0: 20 7b 73 71 6c 69 74 65 41 64 64 43 6f 6c 75 6d   {sqliteAddColum
0ae0: 6e 28 70 50 61 72 73 65 2c 26 58 29 3b 7d 0a 25  n(pParse,&X);}.%
0af0: 74 79 70 65 20 69 64 20 7b 54 6f 6b 65 6e 7d 0a  type id {Token}.
0b00: 69 64 28 41 29 20 3a 3a 3d 20 49 44 28 58 29 2e  id(A) ::= ID(X).
0b10: 20 20 20 20 20 7b 41 20 3d 20 58 3b 7d 0a 69 64       {A = X;}.id
0b20: 28 41 29 20 3a 3a 3d 20 53 54 52 49 4e 47 28 58  (A) ::= STRING(X
0b30: 29 2e 20 7b 41 20 3d 20 58 3b 7d 0a 74 79 70 65  ). {A = X;}.type
0b40: 20 3a 3a 3d 20 74 79 70 65 6e 61 6d 65 2e 0a 74   ::= typename..t
0b50: 79 70 65 20 3a 3a 3d 20 74 79 70 65 6e 61 6d 65  ype ::= typename
0b60: 20 4c 50 20 73 69 67 6e 65 64 20 52 50 2e 0a 74   LP signed RP..t
0b70: 79 70 65 20 3a 3a 3d 20 74 79 70 65 6e 61 6d 65  ype ::= typename
0b80: 20 4c 50 20 73 69 67 6e 65 64 20 43 4f 4d 4d 41   LP signed COMMA
0b90: 20 73 69 67 6e 65 64 20 52 50 2e 0a 74 79 70 65   signed RP..type
0ba0: 6e 61 6d 65 20 3a 3a 3d 20 49 44 2e 0a 74 79 70  name ::= ID..typ
0bb0: 65 6e 61 6d 65 20 3a 3a 3d 20 74 79 70 65 6e 61  ename ::= typena
0bc0: 6d 65 20 49 44 2e 0a 73 69 67 6e 65 64 20 3a 3a  me ID..signed ::
0bd0: 3d 20 49 4e 54 45 47 45 52 2e 0a 73 69 67 6e 65  = INTEGER..signe
0be0: 64 20 3a 3a 3d 20 50 4c 55 53 20 49 4e 54 45 47  d ::= PLUS INTEG
0bf0: 45 52 2e 0a 73 69 67 6e 65 64 20 3a 3a 3d 20 4d  ER..signed ::= M
0c00: 49 4e 55 53 20 49 4e 54 45 47 45 52 2e 0a 63 61  INUS INTEGER..ca
0c10: 72 67 6c 69 73 74 20 3a 3a 3d 20 63 61 72 67 6c  rglist ::= cargl
0c20: 69 73 74 20 63 61 72 67 2e 0a 63 61 72 67 6c 69  ist carg..cargli
0c30: 73 74 20 3a 3a 3d 20 2e 0a 63 61 72 67 20 3a 3a  st ::= ..carg ::
0c40: 3d 20 43 4f 4e 53 54 52 41 49 4e 54 20 49 44 20  = CONSTRAINT ID 
0c50: 63 63 6f 6e 73 2e 0a 63 61 72 67 20 3a 3a 3d 20  ccons..carg ::= 
0c60: 63 63 6f 6e 73 2e 0a 63 61 72 67 20 3a 3a 3d 20  ccons..carg ::= 
0c70: 44 45 46 41 55 4c 54 20 53 54 52 49 4e 47 28 58  DEFAULT STRING(X
0c80: 29 2e 20 20 20 20 20 20 20 20 20 20 7b 73 71 6c  ).          {sql
0c90: 69 74 65 41 64 64 44 65 66 61 75 6c 74 56 61 6c  iteAddDefaultVal
0ca0: 75 65 28 70 50 61 72 73 65 2c 26 58 2c 30 29 3b  ue(pParse,&X,0);
0cb0: 7d 0a 63 61 72 67 20 3a 3a 3d 20 44 45 46 41 55  }.carg ::= DEFAU
0cc0: 4c 54 20 49 44 28 58 29 2e 20 20 20 20 20 20 20  LT ID(X).       
0cd0: 20 20 20 20 20 20 20 7b 73 71 6c 69 74 65 41 64         {sqliteAd
0ce0: 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 70 50  dDefaultValue(pP
0cf0: 61 72 73 65 2c 26 58 2c 30 29 3b 7d 0a 63 61 72  arse,&X,0);}.car
0d00: 67 20 3a 3a 3d 20 44 45 46 41 55 4c 54 20 49 4e  g ::= DEFAULT IN
0d10: 54 45 47 45 52 28 58 29 2e 20 20 20 20 20 20 20  TEGER(X).       
0d20: 20 20 7b 73 71 6c 69 74 65 41 64 64 44 65 66 61    {sqliteAddDefa
0d30: 75 6c 74 56 61 6c 75 65 28 70 50 61 72 73 65 2c  ultValue(pParse,
0d40: 26 58 2c 30 29 3b 7d 0a 63 61 72 67 20 3a 3a 3d  &X,0);}.carg ::=
0d50: 20 44 45 46 41 55 4c 54 20 50 4c 55 53 20 49 4e   DEFAULT PLUS IN
0d60: 54 45 47 45 52 28 58 29 2e 20 20 20 20 7b 73 71  TEGER(X).    {sq
0d70: 6c 69 74 65 41 64 64 44 65 66 61 75 6c 74 56 61  liteAddDefaultVa
0d80: 6c 75 65 28 70 50 61 72 73 65 2c 26 58 2c 30 29  lue(pParse,&X,0)
0d90: 3b 7d 0a 63 61 72 67 20 3a 3a 3d 20 44 45 46 41  ;}.carg ::= DEFA
0da0: 55 4c 54 20 4d 49 4e 55 53 20 49 4e 54 45 47 45  ULT MINUS INTEGE
0db0: 52 28 58 29 2e 20 20 20 7b 73 71 6c 69 74 65 41  R(X).   {sqliteA
0dc0: 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 70  ddDefaultValue(p
0dd0: 50 61 72 73 65 2c 26 58 2c 31 29 3b 7d 0a 63 61  Parse,&X,1);}.ca
0de0: 72 67 20 3a 3a 3d 20 44 45 46 41 55 4c 54 20 46  rg ::= DEFAULT F
0df0: 4c 4f 41 54 28 58 29 2e 20 20 20 20 20 20 20 20  LOAT(X).        
0e00: 20 20 20 7b 73 71 6c 69 74 65 41 64 64 44 65 66     {sqliteAddDef
0e10: 61 75 6c 74 56 61 6c 75 65 28 70 50 61 72 73 65  aultValue(pParse
0e20: 2c 26 58 2c 30 29 3b 7d 0a 63 61 72 67 20 3a 3a  ,&X,0);}.carg ::
0e30: 3d 20 44 45 46 41 55 4c 54 20 50 4c 55 53 20 46  = DEFAULT PLUS F
0e40: 4c 4f 41 54 28 58 29 2e 20 20 20 20 20 20 7b 73  LOAT(X).      {s
0e50: 71 6c 69 74 65 41 64 64 44 65 66 61 75 6c 74 56  qliteAddDefaultV
0e60: 61 6c 75 65 28 70 50 61 72 73 65 2c 26 58 2c 30  alue(pParse,&X,0
0e70: 29 3b 7d 0a 63 61 72 67 20 3a 3a 3d 20 44 45 46  );}.carg ::= DEF
0e80: 41 55 4c 54 20 4d 49 4e 55 53 20 46 4c 4f 41 54  AULT MINUS FLOAT
0e90: 28 58 29 2e 20 20 20 20 20 7b 73 71 6c 69 74 65  (X).     {sqlite
0ea0: 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
0eb0: 70 50 61 72 73 65 2c 26 58 2c 31 29 3b 7d 0a 63  pParse,&X,1);}.c
0ec0: 61 72 67 20 3a 3a 3d 20 44 45 46 41 55 4c 54 20  arg ::= DEFAULT 
0ed0: 4e 55 4c 4c 2e 20 0a 0a 2f 2f 20 49 6e 20 61 64  NULL. ..// In ad
0ee0: 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 79  dition to the ty
0ef0: 70 65 20 6e 61 6d 65 2c 20 77 65 20 61 6c 73 6f  pe name, we also
0f00: 20 63 61 72 65 20 61 62 6f 75 74 20 74 68 65 20   care about the 
0f10: 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 2f 2f 0a  primary key..//.
0f20: 63 63 6f 6e 73 20 3a 3a 3d 20 4e 4f 54 20 4e 55  ccons ::= NOT NU
0f30: 4c 4c 2e 0a 63 63 6f 6e 73 20 3a 3a 3d 20 50 52  LL..ccons ::= PR
0f40: 49 4d 41 52 59 20 4b 45 59 20 73 6f 72 74 6f 72  IMARY KEY sortor
0f50: 64 65 72 2e 20 20 0a 20 20 20 7b 73 71 6c 69 74  der.  .   {sqlit
0f60: 65 43 72 65 61 74 65 49 6e 64 65 78 28 70 50 61  eCreateIndex(pPa
0f70: 72 73 65 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 7d  rse,0,0,0,0,0);}
0f80: 0a 63 63 6f 6e 73 20 3a 3a 3d 20 55 4e 49 51 55  .ccons ::= UNIQU
0f90: 45 2e 0a 63 63 6f 6e 73 20 3a 3a 3d 20 43 48 45  E..ccons ::= CHE
0fa0: 43 4b 20 65 78 70 72 2e 0a 0a 2f 2f 20 46 6f 72  CK expr...// For
0fb0: 20 74 68 65 20 74 69 6d 65 20 62 65 69 6e 67 2c   the time being,
0fc0: 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e 73 74 72   the only constr
0fd0: 61 69 6e 74 20 77 65 20 63 61 72 65 20 61 62 6f  aint we care abo
0fe0: 75 74 20 69 73 20 74 68 65 20 70 72 69 6d 61 72  ut is the primar
0ff0: 79 0a 2f 2f 20 6b 65 79 2e 0a 2f 2f 0a 63 6f 6e  y.// key..//.con
1000: 73 6c 69 73 74 5f 6f 70 74 20 3a 3a 3d 20 2e 0a  slist_opt ::= ..
1010: 63 6f 6e 73 6c 69 73 74 5f 6f 70 74 20 3a 3a 3d  conslist_opt ::=
1020: 20 43 4f 4d 4d 41 20 63 6f 6e 73 6c 69 73 74 2e   COMMA conslist.
1030: 0a 63 6f 6e 73 6c 69 73 74 20 3a 3a 3d 20 63 6f  .conslist ::= co
1040: 6e 73 6c 69 73 74 20 43 4f 4d 4d 41 20 74 63 6f  nslist COMMA tco
1050: 6e 73 2e 0a 63 6f 6e 73 6c 69 73 74 20 3a 3a 3d  ns..conslist ::=
1060: 20 74 63 6f 6e 73 2e 0a 74 63 6f 6e 73 20 3a 3a   tcons..tcons ::
1070: 3d 20 43 4f 4e 53 54 52 41 49 4e 54 20 49 44 20  = CONSTRAINT ID 
1080: 74 63 6f 6e 73 32 2e 0a 74 63 6f 6e 73 20 3a 3a  tcons2..tcons ::
1090: 3d 20 74 63 6f 6e 73 32 2e 0a 74 63 6f 6e 73 32  = tcons2..tcons2
10a0: 20 3a 3a 3d 20 50 52 49 4d 41 52 59 20 4b 45 59   ::= PRIMARY KEY
10b0: 20 4c 50 20 69 64 78 6c 69 73 74 28 58 29 20 52   LP idxlist(X) R
10c0: 50 2e 20 20 0a 20 20 20 20 20 20 7b 73 71 6c 69  P.  .      {sqli
10d0: 74 65 43 72 65 61 74 65 49 6e 64 65 78 28 70 50  teCreateIndex(pP
10e0: 61 72 73 65 2c 30 2c 30 2c 58 2c 30 2c 30 29 3b  arse,0,0,X,0,0);
10f0: 7d 0a 74 63 6f 6e 73 32 20 3a 3a 3d 20 55 4e 49  }.tcons2 ::= UNI
1100: 51 55 45 20 4c 50 20 69 64 6c 69 73 74 20 52 50  QUE LP idlist RP
1110: 2e 0a 74 63 6f 6e 73 32 20 3a 3a 3d 20 43 48 45  ..tcons2 ::= CHE
1120: 43 4b 20 65 78 70 72 2e 0a 69 64 6c 69 73 74 20  CK expr..idlist 
1130: 3a 3a 3d 20 69 64 6c 69 73 74 20 43 4f 4d 4d 41  ::= idlist COMMA
1140: 20 69 64 2e 0a 69 64 6c 69 73 74 20 3a 3a 3d 20   id..idlist ::= 
1150: 69 64 2e 0a 0a 2f 2f 20 54 68 65 20 6e 65 78 74  id...// The next
1160: 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 6d 61 74 20   command format 
1170: 69 73 20 64 72 6f 70 70 69 6e 67 20 74 61 62 6c  is dropping tabl
1180: 65 73 2e 0a 2f 2f 0a 63 6d 64 20 3a 3a 3d 20 44  es..//.cmd ::= D
1190: 52 4f 50 20 54 41 42 4c 45 20 69 64 28 58 29 2e  ROP TABLE id(X).
11a0: 20 20 20 20 20 20 20 20 20 20 7b 73 71 6c 69 74            {sqlit
11b0: 65 44 72 6f 70 54 61 62 6c 65 28 70 50 61 72 73  eDropTable(pPars
11c0: 65 2c 26 58 29 3b 7d 0a 0a 2f 2f 20 54 68 65 20  e,&X);}..// The 
11d0: 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
11e0: 0a 2f 2f 0a 63 6d 64 20 3a 3a 3d 20 73 65 6c 65  .//.cmd ::= sele
11f0: 63 74 2e 0a 73 65 6c 65 63 74 20 3a 3a 3d 20 53  ct..select ::= S
1200: 45 4c 45 43 54 20 64 69 73 74 69 6e 63 74 28 44  ELECT distinct(D
1210: 29 20 73 65 6c 63 6f 6c 6c 69 73 74 28 57 29 20  ) selcollist(W) 
1220: 66 72 6f 6d 28 58 29 20 77 68 65 72 65 5f 6f 70  from(X) where_op
1230: 74 28 59 29 20 6f 72 64 65 72 62 79 5f 6f 70 74  t(Y) orderby_opt
1240: 28 5a 29 2e 0a 20 20 20 20 20 7b 73 71 6c 69 74  (Z)..     {sqlit
1250: 65 53 65 6c 65 63 74 28 70 50 61 72 73 65 2c 20  eSelect(pParse, 
1260: 57 2c 20 58 2c 20 59 2c 20 5a 2c 20 44 29 3b 7d  W, X, Y, Z, D);}
1270: 0a 73 65 6c 65 63 74 20 3a 3a 3d 20 53 45 4c 45  .select ::= SELE
1280: 43 54 20 64 69 73 74 69 6e 63 74 28 44 29 20 53  CT distinct(D) S
1290: 54 41 52 20 66 72 6f 6d 28 58 29 20 77 68 65 72  TAR from(X) wher
12a0: 65 5f 6f 70 74 28 59 29 20 6f 72 64 65 72 62 79  e_opt(Y) orderby
12b0: 5f 6f 70 74 28 5a 29 2e 0a 20 20 20 20 20 7b 73  _opt(Z)..     {s
12c0: 71 6c 69 74 65 53 65 6c 65 63 74 28 70 50 61 72  qliteSelect(pPar
12d0: 73 65 2c 20 30 2c 20 58 2c 20 59 2c 20 5a 2c 20  se, 0, X, Y, Z, 
12e0: 44 29 3b 7d 0a 0a 25 74 79 70 65 20 64 69 73 74  D);}..%type dist
12f0: 69 6e 63 74 20 7b 69 6e 74 7d 0a 0a 64 69 73 74  inct {int}..dist
1300: 69 6e 63 74 28 41 29 20 3a 3a 3d 20 44 49 53 54  inct(A) ::= DIST
1310: 49 4e 43 54 2e 20 20 20 7b 41 20 3d 20 31 3b 7d  INCT.   {A = 1;}
1320: 0a 64 69 73 74 69 6e 63 74 28 41 29 20 3a 3a 3d  .distinct(A) ::=
1330: 20 2e 20 20 20 20 20 20 20 20 20 20 20 7b 41 20   .           {A 
1340: 3d 20 30 3b 7d 0a 0a 25 74 79 70 65 20 73 65 6c  = 0;}..%type sel
1350: 63 6f 6c 6c 69 73 74 20 7b 45 78 70 72 4c 69 73  collist {ExprLis
1360: 74 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72 20  t*}.%destructor 
1370: 73 65 6c 63 6f 6c 6c 69 73 74 20 7b 73 71 6c 69  selcollist {sqli
1380: 74 65 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  teExprListDelete
1390: 28 24 24 29 3b 7d 0a 25 74 79 70 65 20 73 63 6c  ($$);}.%type scl
13a0: 70 20 7b 45 78 70 72 4c 69 73 74 2a 7d 0a 25 64  p {ExprList*}.%d
13b0: 65 73 74 72 75 63 74 6f 72 20 73 63 6c 70 20 7b  estructor sclp {
13c0: 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 44 65  sqliteExprListDe
13d0: 6c 65 74 65 28 24 24 29 3b 7d 0a 0a 73 63 6c 70  lete($$);}..sclp
13e0: 28 41 29 20 3a 3a 3d 20 73 65 6c 63 6f 6c 6c 69  (A) ::= selcolli
13f0: 73 74 28 58 29 20 43 4f 4d 4d 41 2e 20 20 20 20  st(X) COMMA.    
1400: 20 20 20 20 20 20 20 20 20 7b 41 20 3d 20 58 3b           {A = X;
1410: 7d 0a 73 63 6c 70 28 41 29 20 3a 3a 3d 20 2e 20  }.sclp(A) ::= . 
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1440: 41 20 3d 20 30 3b 7d 0a 73 65 6c 63 6f 6c 6c 69  A = 0;}.selcolli
1450: 73 74 28 41 29 20 3a 3a 3d 20 73 63 6c 70 28 50  st(A) ::= sclp(P
1460: 29 20 65 78 70 72 28 58 29 2e 20 20 20 20 20 20  ) expr(X).      
1470: 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65       {A = sqlite
1480: 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
1490: 2c 58 2c 30 29 3b 7d 0a 73 65 6c 63 6f 6c 6c 69  ,X,0);}.selcolli
14a0: 73 74 28 41 29 20 3a 3a 3d 20 73 63 6c 70 28 50  st(A) ::= sclp(P
14b0: 29 20 65 78 70 72 28 58 29 20 41 53 20 49 44 28  ) expr(X) AS ID(
14c0: 59 29 2e 20 20 7b 41 20 3d 20 73 71 6c 69 74 65  Y).  {A = sqlite
14d0: 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
14e0: 2c 58 2c 26 59 29 3b 7d 0a 73 65 6c 63 6f 6c 6c  ,X,&Y);}.selcoll
14f0: 69 73 74 28 41 29 20 3a 3a 3d 20 73 63 6c 70 28  ist(A) ::= sclp(
1500: 50 29 20 65 78 70 72 28 58 29 20 41 53 20 53 54  P) expr(X) AS ST
1510: 52 49 4e 47 28 59 29 2e 0a 20 20 7b 41 20 3d 20  RING(Y)..  {A = 
1520: 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 41 70  sqliteExprListAp
1530: 70 65 6e 64 28 50 2c 58 2c 26 59 29 3b 7d 0a 0a  pend(P,X,&Y);}..
1540: 25 74 79 70 65 20 73 65 6c 74 61 62 6c 69 73 74  %type seltablist
1550: 20 7b 49 64 4c 69 73 74 2a 7d 0a 25 64 65 73 74   {IdList*}.%dest
1560: 72 75 63 74 6f 72 20 73 65 6c 74 61 62 6c 69 73  ructor seltablis
1570: 74 20 7b 73 71 6c 69 74 65 49 64 4c 69 73 74 44  t {sqliteIdListD
1580: 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25 74 79 70  elete($$);}.%typ
1590: 65 20 73 74 6c 5f 70 72 65 66 69 78 20 7b 49 64  e stl_prefix {Id
15a0: 4c 69 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74  List*}.%destruct
15b0: 6f 72 20 73 74 6c 5f 70 72 65 66 69 78 20 7b 73  or stl_prefix {s
15c0: 71 6c 69 74 65 49 64 4c 69 73 74 44 65 6c 65 74  qliteIdListDelet
15d0: 65 28 24 24 29 3b 7d 0a 25 74 79 70 65 20 66 72  e($$);}.%type fr
15e0: 6f 6d 20 7b 49 64 4c 69 73 74 2a 7d 0a 25 64 65  om {IdList*}.%de
15f0: 73 74 72 75 63 74 6f 72 20 66 72 6f 6d 20 7b 73  structor from {s
1600: 71 6c 69 74 65 49 64 4c 69 73 74 44 65 6c 65 74  qliteIdListDelet
1610: 65 28 24 24 29 3b 7d 0a 0a 66 72 6f 6d 28 41 29  e($$);}..from(A)
1620: 20 3a 3a 3d 20 46 52 4f 4d 20 73 65 6c 74 61 62   ::= FROM seltab
1630: 6c 69 73 74 28 58 29 2e 20 20 20 20 20 20 20 20  list(X).        
1640: 20 20 20 20 20 20 20 7b 41 20 3d 20 58 3b 7d 0a         {A = X;}.
1650: 73 74 6c 5f 70 72 65 66 69 78 28 41 29 20 3a 3a  stl_prefix(A) ::
1660: 3d 20 73 65 6c 74 61 62 6c 69 73 74 28 58 29 20  = seltablist(X) 
1670: 43 4f 4d 4d 41 2e 20 20 20 20 20 20 20 20 7b 41  COMMA.        {A
1680: 20 3d 20 58 3b 7d 0a 73 74 6c 5f 70 72 65 66 69   = X;}.stl_prefi
1690: 78 28 41 29 20 3a 3a 3d 20 2e 20 20 20 20 20 20  x(A) ::= .      
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 20 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 73 65       {A = 0;}.se
16c0: 6c 74 61 62 6c 69 73 74 28 41 29 20 3a 3a 3d 20  ltablist(A) ::= 
16d0: 73 74 6c 5f 70 72 65 66 69 78 28 58 29 20 69 64  stl_prefix(X) id
16e0: 28 59 29 2e 20 20 20 20 20 20 20 20 7b 41 20 3d  (Y).        {A =
16f0: 20 73 71 6c 69 74 65 49 64 4c 69 73 74 41 70 70   sqliteIdListApp
1700: 65 6e 64 28 58 2c 26 59 29 3b 7d 0a 73 65 6c 74  end(X,&Y);}.selt
1710: 61 62 6c 69 73 74 28 41 29 20 3a 3a 3d 20 73 74  ablist(A) ::= st
1720: 6c 5f 70 72 65 66 69 78 28 58 29 20 69 64 28 59  l_prefix(X) id(Y
1730: 29 20 41 53 20 69 64 28 5a 29 2e 0a 20 20 20 7b  ) AS id(Z)..   {
1740: 41 20 3d 20 73 71 6c 69 74 65 49 64 4c 69 73 74  A = sqliteIdList
1750: 41 70 70 65 6e 64 28 58 2c 26 59 29 3b 0a 20 20  Append(X,&Y);.  
1760: 20 20 73 71 6c 69 74 65 49 64 4c 69 73 74 41 64    sqliteIdListAd
1770: 64 41 6c 69 61 73 28 41 2c 26 5a 29 3b 7d 0a 0a  dAlias(A,&Z);}..
1780: 25 74 79 70 65 20 6f 72 64 65 72 62 79 5f 6f 70  %type orderby_op
1790: 74 20 7b 45 78 70 72 4c 69 73 74 2a 7d 0a 25 64  t {ExprList*}.%d
17a0: 65 73 74 72 75 63 74 6f 72 20 6f 72 64 65 72 62  estructor orderb
17b0: 79 5f 6f 70 74 20 7b 73 71 6c 69 74 65 45 78 70  y_opt {sqliteExp
17c0: 72 4c 69 73 74 44 65 6c 65 74 65 28 24 24 29 3b  rListDelete($$);
17d0: 7d 0a 25 74 79 70 65 20 73 6f 72 74 6c 69 73 74  }.%type sortlist
17e0: 20 7b 45 78 70 72 4c 69 73 74 2a 7d 0a 25 64 65   {ExprList*}.%de
17f0: 73 74 72 75 63 74 6f 72 20 73 6f 72 74 6c 69 73  structor sortlis
1800: 74 20 7b 73 71 6c 69 74 65 45 78 70 72 4c 69 73  t {sqliteExprLis
1810: 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25 74  tDelete($$);}.%t
1820: 79 70 65 20 73 6f 72 74 69 74 65 6d 20 7b 45 78  ype sortitem {Ex
1830: 70 72 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72  pr*}.%destructor
1840: 20 73 6f 72 74 69 74 65 6d 20 7b 73 71 6c 69 74   sortitem {sqlit
1850: 65 45 78 70 72 44 65 6c 65 74 65 28 24 24 29 3b  eExprDelete($$);
1860: 7d 0a 0a 6f 72 64 65 72 62 79 5f 6f 70 74 28 41  }..orderby_opt(A
1870: 29 20 3a 3a 3d 20 2e 20 20 20 20 20 20 20 20 20  ) ::= .         
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1890: 20 7b 41 20 3d 20 30 3b 7d 0a 6f 72 64 65 72 62   {A = 0;}.orderb
18a0: 79 5f 6f 70 74 28 41 29 20 3a 3a 3d 20 4f 52 44  y_opt(A) ::= ORD
18b0: 45 52 20 42 59 20 73 6f 72 74 6c 69 73 74 28 58  ER BY sortlist(X
18c0: 29 2e 20 20 20 20 20 20 7b 41 20 3d 20 58 3b 7d  ).      {A = X;}
18d0: 0a 73 6f 72 74 6c 69 73 74 28 41 29 20 3a 3a 3d  .sortlist(A) ::=
18e0: 20 73 6f 72 74 6c 69 73 74 28 58 29 20 43 4f 4d   sortlist(X) COM
18f0: 4d 41 20 73 6f 72 74 69 74 65 6d 28 59 29 20 73  MA sortitem(Y) s
1900: 6f 72 74 6f 72 64 65 72 28 5a 29 2e 20 20 0a 20  ortorder(Z).  . 
1910: 20 7b 0a 20 20 20 20 41 20 3d 20 73 71 6c 69 74   {.    A = sqlit
1920: 65 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  eExprListAppend(
1930: 58 2c 59 2c 30 29 3b 0a 20 20 20 20 41 2d 3e 61  X,Y,0);.    A->a
1940: 5b 41 2d 3e 6e 45 78 70 72 2d 31 5d 2e 69 64 78  [A->nExpr-1].idx
1950: 20 3d 20 5a 3b 0a 20 20 7d 0a 73 6f 72 74 6c 69   = Z;.  }.sortli
1960: 73 74 28 41 29 20 3a 3a 3d 20 73 6f 72 74 69 74  st(A) ::= sortit
1970: 65 6d 28 59 29 20 73 6f 72 74 6f 72 64 65 72 28  em(Y) sortorder(
1980: 5a 29 2e 0a 20 20 7b 0a 20 20 20 20 41 20 3d 20  Z)..  {.    A = 
1990: 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 41 70  sqliteExprListAp
19a0: 70 65 6e 64 28 30 2c 59 2c 30 29 3b 0a 20 20 20  pend(0,Y,0);.   
19b0: 20 41 2d 3e 61 5b 30 5d 2e 69 64 78 20 3d 20 5a   A->a[0].idx = Z
19c0: 3b 0a 20 20 7d 0a 73 6f 72 74 69 74 65 6d 28 41  ;.  }.sortitem(A
19d0: 29 20 3a 3a 3d 20 65 78 70 72 28 58 29 2e 20 20  ) ::= expr(X).  
19e0: 20 7b 41 20 3d 20 58 3b 7d 0a 0a 25 74 79 70 65   {A = X;}..%type
19f0: 20 73 6f 72 74 6f 72 64 65 72 20 7b 69 6e 74 7d   sortorder {int}
1a00: 0a 0a 73 6f 72 74 6f 72 64 65 72 28 41 29 20 3a  ..sortorder(A) :
1a10: 3a 3d 20 41 53 43 2e 20 20 20 20 20 20 7b 41 20  := ASC.      {A 
1a20: 3d 20 30 3b 7d 0a 73 6f 72 74 6f 72 64 65 72 28  = 0;}.sortorder(
1a30: 41 29 20 3a 3a 3d 20 44 45 53 43 2e 20 20 20 20  A) ::= DESC.    
1a40: 20 7b 41 20 3d 20 31 3b 7d 0a 73 6f 72 74 6f 72   {A = 1;}.sortor
1a50: 64 65 72 28 41 29 20 3a 3a 3d 20 2e 20 20 20 20  der(A) ::= .    
1a60: 20 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 0a 63       {A = 0;}..c
1a70: 6d 64 20 3a 3a 3d 20 44 45 4c 45 54 45 20 46 52  md ::= DELETE FR
1a80: 4f 4d 20 49 44 28 58 29 20 77 68 65 72 65 5f 6f  OM ID(X) where_o
1a90: 70 74 28 59 29 2e 0a 20 20 20 20 7b 73 71 6c 69  pt(Y)..    {sqli
1aa0: 74 65 44 65 6c 65 74 65 46 72 6f 6d 28 70 50 61  teDeleteFrom(pPa
1ab0: 72 73 65 2c 20 26 58 2c 20 59 29 3b 7d 0a 0a 25  rse, &X, Y);}..%
1ac0: 74 79 70 65 20 77 68 65 72 65 5f 6f 70 74 20 7b  type where_opt {
1ad0: 45 78 70 72 2a 7d 0a 25 64 65 73 74 72 75 63 74  Expr*}.%destruct
1ae0: 6f 72 20 77 68 65 72 65 5f 6f 70 74 20 7b 73 71  or where_opt {sq
1af0: 6c 69 74 65 45 78 70 72 44 65 6c 65 74 65 28 24  liteExprDelete($
1b00: 24 29 3b 7d 0a 0a 77 68 65 72 65 5f 6f 70 74 28  $);}..where_opt(
1b10: 41 29 20 3a 3a 3d 20 2e 20 20 20 20 20 20 20 20  A) ::= .        
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 41 20 3d              {A =
1b30: 20 30 3b 7d 0a 77 68 65 72 65 5f 6f 70 74 28 41   0;}.where_opt(A
1b40: 29 20 3a 3a 3d 20 57 48 45 52 45 20 65 78 70 72  ) ::= WHERE expr
1b50: 28 58 29 2e 20 20 20 20 20 20 20 7b 41 20 3d 20  (X).       {A = 
1b60: 58 3b 7d 0a 0a 25 74 79 70 65 20 73 65 74 6c 69  X;}..%type setli
1b70: 73 74 20 7b 45 78 70 72 4c 69 73 74 2a 7d 0a 25  st {ExprList*}.%
1b80: 64 65 73 74 72 75 63 74 6f 72 20 73 65 74 6c 69  destructor setli
1b90: 73 74 20 7b 73 71 6c 69 74 65 45 78 70 72 4c 69  st {sqliteExprLi
1ba0: 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 0a  stDelete($$);}..
1bb0: 63 6d 64 20 3a 3a 3d 20 55 50 44 41 54 45 20 49  cmd ::= UPDATE I
1bc0: 44 28 58 29 20 53 45 54 20 73 65 74 6c 69 73 74  D(X) SET setlist
1bd0: 28 59 29 20 77 68 65 72 65 5f 6f 70 74 28 5a 29  (Y) where_opt(Z)
1be0: 2e 0a 20 20 20 20 7b 73 71 6c 69 74 65 55 70 64  ..    {sqliteUpd
1bf0: 61 74 65 28 70 50 61 72 73 65 2c 26 58 2c 59 2c  ate(pParse,&X,Y,
1c00: 5a 29 3b 7d 0a 0a 73 65 74 6c 69 73 74 28 41 29  Z);}..setlist(A)
1c10: 20 3a 3a 3d 20 49 44 28 58 29 20 45 51 20 65 78   ::= ID(X) EQ ex
1c20: 70 72 28 59 29 20 43 4f 4d 4d 41 20 73 65 74 6c  pr(Y) COMMA setl
1c30: 69 73 74 28 5a 29 2e 0a 20 20 20 20 7b 41 20 3d  ist(Z)..    {A =
1c40: 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 41   sqliteExprListA
1c50: 70 70 65 6e 64 28 5a 2c 59 2c 26 58 29 3b 7d 0a  ppend(Z,Y,&X);}.
1c60: 73 65 74 6c 69 73 74 28 41 29 20 3a 3a 3d 20 49  setlist(A) ::= I
1c70: 44 28 58 29 20 45 51 20 65 78 70 72 28 59 29 2e  D(X) EQ expr(Y).
1c80: 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78     {A = sqliteEx
1c90: 70 72 4c 69 73 74 41 70 70 65 6e 64 28 30 2c 59  prListAppend(0,Y
1ca0: 2c 26 58 29 3b 7d 0a 0a 63 6d 64 20 3a 3a 3d 20  ,&X);}..cmd ::= 
1cb0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 49 44 28 58  INSERT INTO ID(X
1cc0: 29 20 66 69 65 6c 64 6c 69 73 74 5f 6f 70 74 28  ) fieldlist_opt(
1cd0: 46 29 20 56 41 4c 55 45 53 20 4c 50 20 69 74 65  F) VALUES LP ite
1ce0: 6d 6c 69 73 74 28 59 29 20 52 50 2e 0a 20 20 20  mlist(Y) RP..   
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 73 71 6c              {sql
1d00: 69 74 65 49 6e 73 65 72 74 28 70 50 61 72 73 65  iteInsert(pParse
1d10: 2c 20 26 58 2c 20 59 2c 20 46 29 3b 7d 0a 0a 0a  , &X, Y, F);}...
1d20: 25 74 79 70 65 20 69 74 65 6d 6c 69 73 74 20 7b  %type itemlist {
1d30: 45 78 70 72 4c 69 73 74 2a 7d 0a 25 64 65 73 74  ExprList*}.%dest
1d40: 72 75 63 74 6f 72 20 69 74 65 6d 6c 69 73 74 20  ructor itemlist 
1d50: 7b 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 44  {sqliteExprListD
1d60: 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25 74 79 70  elete($$);}.%typ
1d70: 65 20 69 74 65 6d 20 7b 45 78 70 72 2a 7d 0a 25  e item {Expr*}.%
1d80: 64 65 73 74 72 75 63 74 6f 72 20 69 74 65 6d 20  destructor item 
1d90: 7b 73 71 6c 69 74 65 45 78 70 72 44 65 6c 65 74  {sqliteExprDelet
1da0: 65 28 24 24 29 3b 7d 0a 0a 69 74 65 6d 6c 69 73  e($$);}..itemlis
1db0: 74 28 41 29 20 3a 3a 3d 20 69 74 65 6d 6c 69 73  t(A) ::= itemlis
1dc0: 74 28 58 29 20 43 4f 4d 4d 41 20 69 74 65 6d 28  t(X) COMMA item(
1dd0: 59 29 2e 20 20 7b 41 20 3d 20 73 71 6c 69 74 65  Y).  {A = sqlite
1de0: 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 58  ExprListAppend(X
1df0: 2c 59 2c 30 29 3b 7d 0a 69 74 65 6d 6c 69 73 74  ,Y,0);}.itemlist
1e00: 28 41 29 20 3a 3a 3d 20 69 74 65 6d 28 58 29 2e  (A) ::= item(X).
1e10: 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65       {A = sqlite
1e20: 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 30  ExprListAppend(0
1e30: 2c 58 2c 30 29 3b 7d 0a 69 74 65 6d 28 41 29 20  ,X,0);}.item(A) 
1e40: 3a 3a 3d 20 49 4e 54 45 47 45 52 28 58 29 2e 20  ::= INTEGER(X). 
1e50: 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65       {A = sqlite
1e60: 45 78 70 72 28 54 4b 5f 49 4e 54 45 47 45 52 2c  Expr(TK_INTEGER,
1e70: 20 30 2c 20 30 2c 20 26 58 29 3b 7d 0a 69 74 65   0, 0, &X);}.ite
1e80: 6d 28 41 29 20 3a 3a 3d 20 50 4c 55 53 20 49 4e  m(A) ::= PLUS IN
1e90: 54 45 47 45 52 28 58 29 2e 20 7b 41 20 3d 20 73  TEGER(X). {A = s
1ea0: 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 49 4e 54  qliteExpr(TK_INT
1eb0: 45 47 45 52 2c 20 30 2c 20 30 2c 20 26 58 29 3b  EGER, 0, 0, &X);
1ec0: 7d 0a 69 74 65 6d 28 41 29 20 3a 3a 3d 20 4d 49  }.item(A) ::= MI
1ed0: 4e 55 53 20 49 4e 54 45 47 45 52 28 58 29 2e 20  NUS INTEGER(X). 
1ee0: 7b 0a 20 20 41 20 3d 20 73 71 6c 69 74 65 45 78  {.  A = sqliteEx
1ef0: 70 72 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 30  pr(TK_INTEGER, 0
1f00: 2c 20 30 2c 20 30 29 3b 0a 20 20 41 2d 3e 74 6f  , 0, 0);.  A->to
1f10: 6b 65 6e 2e 7a 20 3d 20 30 3b 0a 20 20 73 71 6c  ken.z = 0;.  sql
1f20: 69 74 65 53 65 74 4e 53 74 72 69 6e 67 28 26 41  iteSetNString(&A
1f30: 2d 3e 74 6f 6b 65 6e 2e 7a 2c 20 22 2d 22 2c 20  ->token.z, "-", 
1f40: 31 2c 20 58 2e 7a 2c 20 58 2e 6e 2c 20 30 29 3b  1, X.z, X.n, 0);
1f50: 0a 7d 0a 69 74 65 6d 28 41 29 20 3a 3a 3d 20 46  .}.item(A) ::= F
1f60: 4c 4f 41 54 28 58 29 2e 20 20 20 20 20 20 20 20  LOAT(X).        
1f70: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
1f80: 54 4b 5f 46 4c 4f 41 54 2c 20 30 2c 20 30 2c 20  TK_FLOAT, 0, 0, 
1f90: 26 58 29 3b 7d 0a 69 74 65 6d 28 41 29 20 3a 3a  &X);}.item(A) ::
1fa0: 3d 20 50 4c 55 53 20 46 4c 4f 41 54 28 58 29 2e  = PLUS FLOAT(X).
1fb0: 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78     {A = sqliteEx
1fc0: 70 72 28 54 4b 5f 46 4c 4f 41 54 2c 20 30 2c 20  pr(TK_FLOAT, 0, 
1fd0: 30 2c 20 26 58 29 3b 7d 0a 69 74 65 6d 28 41 29  0, &X);}.item(A)
1fe0: 20 3a 3a 3d 20 4d 49 4e 55 53 20 46 4c 4f 41 54   ::= MINUS FLOAT
1ff0: 28 58 29 2e 20 20 7b 0a 20 20 41 20 3d 20 73 71  (X).  {.  A = sq
2000: 6c 69 74 65 45 78 70 72 28 54 4b 5f 46 4c 4f 41  liteExpr(TK_FLOA
2010: 54 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 41  T, 0, 0, 0);.  A
2020: 2d 3e 74 6f 6b 65 6e 2e 7a 20 3d 20 30 3b 0a 20  ->token.z = 0;. 
2030: 20 73 71 6c 69 74 65 53 65 74 4e 53 74 72 69 6e   sqliteSetNStrin
2040: 67 28 26 41 2d 3e 74 6f 6b 65 6e 2e 7a 2c 20 22  g(&A->token.z, "
2050: 2d 22 2c 20 31 2c 20 58 2e 7a 2c 20 58 2e 6e 2c  -", 1, X.z, X.n,
2060: 20 30 29 3b 0a 7d 0a 69 74 65 6d 28 41 29 20 3a   0);.}.item(A) :
2070: 3a 3d 20 53 54 52 49 4e 47 28 58 29 2e 20 20 20  := STRING(X).   
2080: 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45      {A = sqliteE
2090: 78 70 72 28 54 4b 5f 53 54 52 49 4e 47 2c 20 30  xpr(TK_STRING, 0
20a0: 2c 20 30 2c 20 26 58 29 3b 7d 0a 69 74 65 6d 28  , 0, &X);}.item(
20b0: 41 29 20 3a 3a 3d 20 4e 55 4c 4c 2e 20 20 20 20  A) ::= NULL.    
20c0: 20 20 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c          {A = sql
20d0: 69 74 65 45 78 70 72 28 54 4b 5f 4e 55 4c 4c 2c  iteExpr(TK_NULL,
20e0: 20 30 2c 20 30 2c 20 30 29 3b 7d 0a 0a 25 74 79   0, 0, 0);}..%ty
20f0: 70 65 20 66 69 65 6c 64 6c 69 73 74 5f 6f 70 74  pe fieldlist_opt
2100: 20 7b 49 64 4c 69 73 74 2a 7d 0a 25 64 65 73 74   {IdList*}.%dest
2110: 72 75 63 74 6f 72 20 66 69 65 6c 64 6c 69 73 74  ructor fieldlist
2120: 5f 6f 70 74 20 7b 73 71 6c 69 74 65 49 64 4c 69  _opt {sqliteIdLi
2130: 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25  stDelete($$);}.%
2140: 74 79 70 65 20 66 69 65 6c 64 6c 69 73 74 20 7b  type fieldlist {
2150: 49 64 4c 69 73 74 2a 7d 0a 25 64 65 73 74 72 75  IdList*}.%destru
2160: 63 74 6f 72 20 66 69 65 6c 64 6c 69 73 74 20 7b  ctor fieldlist {
2170: 73 71 6c 69 74 65 49 64 4c 69 73 74 44 65 6c 65  sqliteIdListDele
2180: 74 65 28 24 24 29 3b 7d 0a 0a 66 69 65 6c 64 6c  te($$);}..fieldl
2190: 69 73 74 5f 6f 70 74 28 41 29 20 3a 3a 3d 20 2e  ist_opt(A) ::= .
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b0: 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 66 69 65      {A = 0;}.fie
21c0: 6c 64 6c 69 73 74 5f 6f 70 74 28 41 29 20 3a 3a  ldlist_opt(A) ::
21d0: 3d 20 4c 50 20 66 69 65 6c 64 6c 69 73 74 28 58  = LP fieldlist(X
21e0: 29 20 52 50 2e 20 20 7b 41 20 3d 20 58 3b 7d 0a  ) RP.  {A = X;}.
21f0: 66 69 65 6c 64 6c 69 73 74 28 41 29 20 3a 3a 3d  fieldlist(A) ::=
2200: 20 66 69 65 6c 64 6c 69 73 74 28 58 29 20 43 4f   fieldlist(X) CO
2210: 4d 4d 41 20 49 44 28 59 29 2e 20 7b 41 20 3d 20  MMA ID(Y). {A = 
2220: 73 71 6c 69 74 65 49 64 4c 69 73 74 41 70 70 65  sqliteIdListAppe
2230: 6e 64 28 58 2c 26 59 29 3b 7d 0a 66 69 65 6c 64  nd(X,&Y);}.field
2240: 6c 69 73 74 28 41 29 20 3a 3a 3d 20 49 44 28 59  list(A) ::= ID(Y
2250: 29 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2260: 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74        {A = sqlit
2270: 65 49 64 4c 69 73 74 41 70 70 65 6e 64 28 30 2c  eIdListAppend(0,
2280: 26 59 29 3b 7d 0a 0a 25 6c 65 66 74 20 4f 52 2e  &Y);}..%left OR.
2290: 0a 25 6c 65 66 74 20 41 4e 44 2e 0a 25 72 69 67  .%left AND..%rig
22a0: 68 74 20 4e 4f 54 2e 0a 25 6c 65 66 74 20 45 51  ht NOT..%left EQ
22b0: 20 4e 45 20 49 53 4e 55 4c 4c 20 4e 4f 54 4e 55   NE ISNULL NOTNU
22c0: 4c 4c 20 49 53 20 4c 49 4b 45 20 47 4c 4f 42 2e  LL IS LIKE GLOB.
22d0: 0a 25 6c 65 66 74 20 47 54 20 47 45 20 4c 54 20  .%left GT GE LT 
22e0: 4c 45 2e 0a 25 6c 65 66 74 20 50 4c 55 53 20 4d  LE..%left PLUS M
22f0: 49 4e 55 53 2e 0a 25 6c 65 66 74 20 53 54 41 52  INUS..%left STAR
2300: 20 53 4c 41 53 48 20 50 45 52 43 45 4e 54 2e 0a   SLASH PERCENT..
2310: 25 72 69 67 68 74 20 55 4d 49 4e 55 53 2e 0a 0a  %right UMINUS...
2320: 25 74 79 70 65 20 65 78 70 72 20 7b 45 78 70 72  %type expr {Expr
2330: 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72 20 65  *}.%destructor e
2340: 78 70 72 20 7b 73 71 6c 69 74 65 45 78 70 72 44  xpr {sqliteExprD
2350: 65 6c 65 74 65 28 24 24 29 3b 7d 0a 0a 65 78 70  elete($$);}..exp
2360: 72 28 41 29 20 3a 3a 3d 20 4c 50 20 65 78 70 72  r(A) ::= LP expr
2370: 28 58 29 20 52 50 2e 20 20 20 7b 41 20 3d 20 58  (X) RP.   {A = X
2380: 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 49  ;}.expr(A) ::= I
2390: 44 28 58 29 2e 20 20 20 20 20 20 20 20 20 20 20  D(X).           
23a0: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
23b0: 54 4b 5f 49 44 2c 20 30 2c 20 30 2c 20 26 58 29  TK_ID, 0, 0, &X)
23c0: 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 4e  ;}.expr(A) ::= N
23d0: 55 4c 4c 2e 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
23e0: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
23f0: 54 4b 5f 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20 30  TK_NULL, 0, 0, 0
2400: 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  );}.expr(A) ::= 
2410: 49 44 28 58 29 20 44 4f 54 20 49 44 28 59 29 2e  ID(X) DOT ID(Y).
2420: 20 7b 45 78 70 72 20 2a 74 65 6d 70 31 20 3d 20   {Expr *temp1 = 
2430: 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 49 44  sqliteExpr(TK_ID
2440: 2c 20 30 2c 20 30 2c 20 26 58 29 3b 0a 20 20 20  , 0, 0, &X);.   
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 20             Expr 
2470: 2a 74 65 6d 70 32 20 3d 20 73 71 6c 69 74 65 45  *temp2 = sqliteE
2480: 78 70 72 28 54 4b 5f 49 44 2c 20 30 2c 20 30 2c  xpr(TK_ID, 0, 0,
2490: 20 26 59 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &Y);.          
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b0: 20 20 20 20 41 20 3d 20 73 71 6c 69 74 65 45 78      A = sqliteEx
24c0: 70 72 28 54 4b 5f 44 4f 54 2c 20 74 65 6d 70 31  pr(TK_DOT, temp1
24d0: 2c 20 74 65 6d 70 32 2c 20 30 29 3b 7d 0a 65 78  , temp2, 0);}.ex
24e0: 70 72 28 41 29 20 3a 3a 3d 20 49 4e 54 45 47 45  pr(A) ::= INTEGE
24f0: 52 28 58 29 2e 20 20 20 20 20 20 7b 41 20 3d 20  R(X).      {A = 
2500: 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 49 4e  sqliteExpr(TK_IN
2510: 54 45 47 45 52 2c 20 30 2c 20 30 2c 20 26 58 29  TEGER, 0, 0, &X)
2520: 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 46  ;}.expr(A) ::= F
2530: 4c 4f 41 54 28 58 29 2e 20 20 20 20 20 20 20 20  LOAT(X).        
2540: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
2550: 54 4b 5f 46 4c 4f 41 54 2c 20 30 2c 20 30 2c 20  TK_FLOAT, 0, 0, 
2560: 26 58 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a  &X);}.expr(A) ::
2570: 3d 20 53 54 52 49 4e 47 28 58 29 2e 20 20 20 20  = STRING(X).    
2580: 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78     {A = sqliteEx
2590: 70 72 28 54 4b 5f 53 54 52 49 4e 47 2c 20 30 2c  pr(TK_STRING, 0,
25a0: 20 30 2c 20 26 58 29 3b 7d 0a 65 78 70 72 28 41   0, &X);}.expr(A
25b0: 29 20 3a 3a 3d 20 49 44 28 58 29 20 4c 50 20 65  ) ::= ID(X) LP e
25c0: 78 70 72 6c 69 73 74 28 59 29 20 52 50 2e 20 20  xprlist(Y) RP.  
25d0: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 46  {A = sqliteExprF
25e0: 75 6e 63 74 69 6f 6e 28 59 2c 20 26 58 29 3b 7d  unction(Y, &X);}
25f0: 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 49 44 28  .expr(A) ::= ID(
2600: 58 29 20 4c 50 20 53 54 41 52 20 52 50 2e 20 20  X) LP STAR RP.  
2610: 20 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69         {A = sqli
2620: 74 65 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 30  teExprFunction(0
2630: 2c 20 26 58 29 3b 7d 0a 65 78 70 72 28 41 29 20  , &X);}.expr(A) 
2640: 3a 3a 3d 20 65 78 70 72 28 58 29 20 41 4e 44 20  ::= expr(X) AND 
2650: 65 78 70 72 28 59 29 2e 20 20 20 7b 41 20 3d 20  expr(Y).   {A = 
2660: 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 41 4e  sqliteExpr(TK_AN
2670: 44 2c 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78  D, X, Y, 0);}.ex
2680: 70 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58  pr(A) ::= expr(X
2690: 29 20 4f 52 20 65 78 70 72 28 59 29 2e 20 20 20  ) OR expr(Y).   
26a0: 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72   {A = sqliteExpr
26b0: 28 54 4b 5f 4f 52 2c 20 58 2c 20 59 2c 20 30 29  (TK_OR, X, Y, 0)
26c0: 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 65  ;}.expr(A) ::= e
26d0: 78 70 72 28 58 29 20 4c 54 20 65 78 70 72 28 59  xpr(X) LT expr(Y
26e0: 29 2e 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74  ).    {A = sqlit
26f0: 65 45 78 70 72 28 54 4b 5f 4c 54 2c 20 58 2c 20  eExpr(TK_LT, X, 
2700: 59 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20  Y, 0);}.expr(A) 
2710: 3a 3a 3d 20 65 78 70 72 28 58 29 20 47 54 20 65  ::= expr(X) GT e
2720: 78 70 72 28 59 29 2e 20 20 20 20 7b 41 20 3d 20  xpr(Y).    {A = 
2730: 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 47 54  sqliteExpr(TK_GT
2740: 2c 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70  , X, Y, 0);}.exp
2750: 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29  r(A) ::= expr(X)
2760: 20 4c 45 20 65 78 70 72 28 59 29 2e 20 20 20 20   LE expr(Y).    
2770: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
2780: 54 4b 5f 4c 45 2c 20 58 2c 20 59 2c 20 30 29 3b  TK_LE, X, Y, 0);
2790: 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 65 78  }.expr(A) ::= ex
27a0: 70 72 28 58 29 20 47 45 20 65 78 70 72 28 59 29  pr(X) GE expr(Y)
27b0: 2e 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65  .    {A = sqlite
27c0: 45 78 70 72 28 54 4b 5f 47 45 2c 20 58 2c 20 59  Expr(TK_GE, X, Y
27d0: 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a  , 0);}.expr(A) :
27e0: 3a 3d 20 65 78 70 72 28 58 29 20 4e 45 20 65 78  := expr(X) NE ex
27f0: 70 72 28 59 29 2e 20 20 20 20 7b 41 20 3d 20 73  pr(Y).    {A = s
2800: 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 4e 45 2c  qliteExpr(TK_NE,
2810: 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70 72   X, Y, 0);}.expr
2820: 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29 20  (A) ::= expr(X) 
2830: 45 51 20 65 78 70 72 28 59 29 2e 20 20 20 20 7b  EQ expr(Y).    {
2840: 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54  A = sqliteExpr(T
2850: 4b 5f 45 51 2c 20 58 2c 20 59 2c 20 30 29 3b 7d  K_EQ, X, Y, 0);}
2860: 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 65 78 70  .expr(A) ::= exp
2870: 72 28 58 29 20 4c 49 4b 45 20 65 78 70 72 28 59  r(X) LIKE expr(Y
2880: 29 2e 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45  ).  {A = sqliteE
2890: 78 70 72 28 54 4b 5f 4c 49 4b 45 2c 20 58 2c 20  xpr(TK_LIKE, X, 
28a0: 59 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20  Y, 0);}.expr(A) 
28b0: 3a 3a 3d 20 65 78 70 72 28 58 29 20 47 4c 4f 42  ::= expr(X) GLOB
28c0: 20 65 78 70 72 28 59 29 2e 20 20 20 7b 41 20 3d   expr(Y).   {A =
28d0: 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 47   sqliteExpr(TK_G
28e0: 4c 4f 42 2c 58 2c 59 2c 30 29 3b 7d 0a 2f 2f 20  LOB,X,Y,0);}.// 
28f0: 65 78 70 72 28 41 29 20 3a 3a 3d 20 65 78 70 72  expr(A) ::= expr
2900: 28 58 29 20 49 53 20 65 78 70 72 28 59 29 2e 20  (X) IS expr(Y). 
2910: 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78     {A = sqliteEx
2920: 70 72 28 54 4b 5f 45 51 2c 20 58 2c 20 59 2c 20  pr(TK_EQ, X, Y, 
2930: 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d  0);}.expr(A) ::=
2940: 20 65 78 70 72 28 58 29 20 50 4c 55 53 20 65 78   expr(X) PLUS ex
2950: 70 72 28 59 29 2e 20 20 7b 41 20 3d 20 73 71 6c  pr(Y).  {A = sql
2960: 69 74 65 45 78 70 72 28 54 4b 5f 50 4c 55 53 2c  iteExpr(TK_PLUS,
2970: 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70 72   X, Y, 0);}.expr
2980: 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29 20  (A) ::= expr(X) 
2990: 4d 49 4e 55 53 20 65 78 70 72 28 59 29 2e 20 7b  MINUS expr(Y). {
29a0: 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54  A = sqliteExpr(T
29b0: 4b 5f 4d 49 4e 55 53 2c 20 58 2c 20 59 2c 20 30  K_MINUS, X, Y, 0
29c0: 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  );}.expr(A) ::= 
29d0: 65 78 70 72 28 58 29 20 53 54 41 52 20 65 78 70  expr(X) STAR exp
29e0: 72 28 59 29 2e 20 20 7b 41 20 3d 20 73 71 6c 69  r(Y).  {A = sqli
29f0: 74 65 45 78 70 72 28 54 4b 5f 53 54 41 52 2c 20  teExpr(TK_STAR, 
2a00: 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70 72 28  X, Y, 0);}.expr(
2a10: 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29 20 53  A) ::= expr(X) S
2a20: 4c 41 53 48 20 65 78 70 72 28 59 29 2e 20 7b 41  LASH expr(Y). {A
2a30: 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b   = sqliteExpr(TK
2a40: 5f 53 4c 41 53 48 2c 20 58 2c 20 59 2c 20 30 29  _SLASH, X, Y, 0)
2a50: 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 65  ;}.expr(A) ::= e
2a60: 78 70 72 28 58 29 20 49 53 4e 55 4c 4c 2e 20 20  xpr(X) ISNULL.  
2a70: 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74        {A = sqlit
2a80: 65 45 78 70 72 28 54 4b 5f 49 53 4e 55 4c 4c 2c  eExpr(TK_ISNULL,
2a90: 20 58 2c 20 30 2c 20 30 29 3b 7d 0a 65 78 70 72   X, 0, 0);}.expr
2aa0: 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29 20  (A) ::= expr(X) 
2ab0: 4e 4f 54 4e 55 4c 4c 2e 20 20 20 20 20 20 20 7b  NOTNULL.       {
2ac0: 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54  A = sqliteExpr(T
2ad0: 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 58 2c 20 30 2c  K_NOTNULL, X, 0,
2ae0: 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a   0);}.expr(A) ::
2af0: 3d 20 4e 4f 54 20 65 78 70 72 28 58 29 2e 20 20  = NOT expr(X).  
2b00: 20 20 20 20 20 20 20 20 20 7b 41 20 3d 20 73 71           {A = sq
2b10: 6c 69 74 65 45 78 70 72 28 54 4b 5f 4e 4f 54 2c  liteExpr(TK_NOT,
2b20: 20 58 2c 20 30 2c 20 30 29 3b 7d 0a 65 78 70 72   X, 0, 0);}.expr
2b30: 28 41 29 20 3a 3a 3d 20 4d 49 4e 55 53 20 65 78  (A) ::= MINUS ex
2b40: 70 72 28 58 29 2e 20 5b 55 4d 49 4e 55 53 5d 20  pr(X). [UMINUS] 
2b50: 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70    {A = sqliteExp
2b60: 72 28 54 4b 5f 55 4d 49 4e 55 53 2c 20 58 2c 20  r(TK_UMINUS, X, 
2b70: 30 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20  0, 0);}.expr(A) 
2b80: 3a 3a 3d 20 50 4c 55 53 20 65 78 70 72 28 58 29  ::= PLUS expr(X)
2b90: 2e 20 5b 55 4d 49 4e 55 53 5d 20 20 20 20 7b 41  . [UMINUS]    {A
2ba0: 20 3d 20 58 3b 7d 0a 0a 25 74 79 70 65 20 65 78   = X;}..%type ex
2bb0: 70 72 6c 69 73 74 20 7b 45 78 70 72 4c 69 73 74  prlist {ExprList
2bc0: 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72 20 65  *}.%destructor e
2bd0: 78 70 72 6c 69 73 74 20 7b 73 71 6c 69 74 65 45  xprlist {sqliteE
2be0: 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 24 24  xprListDelete($$
2bf0: 29 3b 7d 0a 25 74 79 70 65 20 65 78 70 72 69 74  );}.%type exprit
2c00: 65 6d 20 7b 45 78 70 72 2a 7d 0a 25 64 65 73 74  em {Expr*}.%dest
2c10: 72 75 63 74 6f 72 20 65 78 70 72 69 74 65 6d 20  ructor expritem 
2c20: 7b 73 71 6c 69 74 65 45 78 70 72 44 65 6c 65 74  {sqliteExprDelet
2c30: 65 28 24 24 29 3b 7d 0a 0a 65 78 70 72 6c 69 73  e($$);}..exprlis
2c40: 74 28 41 29 20 3a 3a 3d 20 65 78 70 72 6c 69 73  t(A) ::= exprlis
2c50: 74 28 58 29 20 43 4f 4d 4d 41 20 65 78 70 72 69  t(X) COMMA expri
2c60: 74 65 6d 28 59 29 2e 20 0a 20 20 20 7b 41 20 3d  tem(Y). .   {A =
2c70: 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 41   sqliteExprListA
2c80: 70 70 65 6e 64 28 58 2c 59 2c 30 29 3b 7d 0a 65  ppend(X,Y,0);}.e
2c90: 78 70 72 6c 69 73 74 28 41 29 20 3a 3a 3d 20 65  xprlist(A) ::= e
2ca0: 78 70 72 69 74 65 6d 28 58 29 2e 20 20 20 20 20  xpritem(X).     
2cb0: 20 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69         {A = sqli
2cc0: 74 65 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  teExprListAppend
2cd0: 28 30 2c 58 2c 30 29 3b 7d 0a 65 78 70 72 69 74  (0,X,0);}.exprit
2ce0: 65 6d 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58  em(A) ::= expr(X
2cf0: 29 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2d00: 20 20 7b 41 20 3d 20 58 3b 7d 0a 65 78 70 72 69    {A = X;}.expri
2d10: 74 65 6d 28 41 29 20 3a 3a 3d 20 2e 20 20 20 20  tem(A) ::= .    
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d30: 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 0a 0a 63 6d     {A = 0;}...cm
2d40: 64 20 3a 3a 3d 20 43 52 45 41 54 45 28 53 29 20  d ::= CREATE(S) 
2d50: 75 6e 69 71 75 65 66 6c 61 67 20 49 4e 44 45 58  uniqueflag INDEX
2d60: 20 49 44 28 58 29 20 4f 4e 20 49 44 28 59 29 20   ID(X) ON ID(Y) 
2d70: 4c 50 20 69 64 78 6c 69 73 74 28 5a 29 20 52 50  LP idxlist(Z) RP
2d80: 28 45 29 2e 0a 20 20 20 20 7b 73 71 6c 69 74 65  (E)..    {sqlite
2d90: 43 72 65 61 74 65 49 6e 64 65 78 28 70 50 61 72  CreateIndex(pPar
2da0: 73 65 2c 20 26 58 2c 20 26 59 2c 20 5a 2c 20 26  se, &X, &Y, Z, &
2db0: 53 2c 20 26 45 29 3b 7d 0a 75 6e 69 71 75 65 66  S, &E);}.uniquef
2dc0: 6c 61 67 20 3a 3a 3d 20 55 4e 49 51 55 45 2e 0a  lag ::= UNIQUE..
2dd0: 75 6e 69 71 75 65 66 6c 61 67 20 3a 3a 3d 20 2e  uniqueflag ::= .
2de0: 0a 0a 25 74 79 70 65 20 69 64 78 6c 69 73 74 20  ..%type idxlist 
2df0: 7b 49 64 4c 69 73 74 2a 7d 0a 25 64 65 73 74 72  {IdList*}.%destr
2e00: 75 63 74 6f 72 20 69 64 78 6c 69 73 74 20 7b 73  uctor idxlist {s
2e10: 71 6c 69 74 65 49 64 4c 69 73 74 44 65 6c 65 74  qliteIdListDelet
2e20: 65 28 24 24 29 3b 7d 0a 25 74 79 70 65 20 69 64  e($$);}.%type id
2e30: 78 69 74 65 6d 20 7b 54 6f 6b 65 6e 7d 0a 0a 69  xitem {Token}..i
2e40: 64 78 6c 69 73 74 28 41 29 20 3a 3a 3d 20 69 64  dxlist(A) ::= id
2e50: 78 6c 69 73 74 28 58 29 20 43 4f 4d 4d 41 20 69  xlist(X) COMMA i
2e60: 64 78 69 74 65 6d 28 59 29 2e 20 20 0a 20 20 20  dxitem(Y).  .   
2e70: 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 49 64 4c    {A = sqliteIdL
2e80: 69 73 74 41 70 70 65 6e 64 28 58 2c 26 59 29 3b  istAppend(X,&Y);
2e90: 7d 0a 69 64 78 6c 69 73 74 28 41 29 20 3a 3a 3d  }.idxlist(A) ::=
2ea0: 20 69 64 78 69 74 65 6d 28 59 29 2e 0a 20 20 20   idxitem(Y)..   
2eb0: 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 49 64 4c    {A = sqliteIdL
2ec0: 69 73 74 41 70 70 65 6e 64 28 30 2c 26 59 29 3b  istAppend(0,&Y);
2ed0: 7d 0a 69 64 78 69 74 65 6d 28 41 29 20 3a 3a 3d  }.idxitem(A) ::=
2ee0: 20 49 44 28 58 29 2e 20 20 20 20 20 20 20 20 20   ID(X).         
2ef0: 20 20 7b 41 20 3d 20 58 3b 7d 0a 0a 63 6d 64 20    {A = X;}..cmd 
2f00: 3a 3a 3d 20 44 52 4f 50 20 49 4e 44 45 58 20 69  ::= DROP INDEX i
2f10: 64 28 58 29 2e 20 20 20 20 20 20 20 7b 73 71 6c  d(X).       {sql
2f20: 69 74 65 44 72 6f 70 49 6e 64 65 78 28 70 50 61  iteDropIndex(pPa
2f30: 72 73 65 2c 20 26 58 29 3b 7d 0a 0a 63 6d 64 20  rse, &X);}..cmd 
2f40: 3a 3a 3d 20 43 4f 50 59 20 69 64 28 58 29 20 46  ::= COPY id(X) F
2f50: 52 4f 4d 20 69 64 28 59 29 20 55 53 49 4e 47 20  ROM id(Y) USING 
2f60: 44 45 4c 49 4d 49 54 45 52 53 20 53 54 52 49 4e  DELIMITERS STRIN
2f70: 47 28 5a 29 2e 0a 20 20 20 20 7b 73 71 6c 69 74  G(Z)..    {sqlit
2f80: 65 43 6f 70 79 28 70 50 61 72 73 65 2c 26 58 2c  eCopy(pParse,&X,
2f90: 26 59 2c 26 5a 29 3b 7d 0a 63 6d 64 20 3a 3a 3d  &Y,&Z);}.cmd ::=
2fa0: 20 43 4f 50 59 20 69 64 28 58 29 20 46 52 4f 4d   COPY id(X) FROM
2fb0: 20 69 64 28 59 29 2e 0a 20 20 20 20 7b 73 71 6c   id(Y)..    {sql
2fc0: 69 74 65 43 6f 70 79 28 70 50 61 72 73 65 2c 26  iteCopy(pParse,&
2fd0: 58 2c 26 59 2c 30 29 3b 7d 0a 0a 63 6d 64 20 3a  X,&Y,0);}..cmd :
2fe0: 3a 3d 20 56 41 43 55 55 4d 2e 20 20 20 20 20 20  := VACUUM.      
2ff0: 20 20 20 20 20 20 20 20 20 20 7b 73 71 6c 69 74            {sqlit
3000: 65 56 61 63 75 75 6d 28 70 50 61 72 73 65 2c 30  eVacuum(pParse,0
3010: 29 3b 7d 0a 63 6d 64 20 3a 3a 3d 20 56 41 43 55  );}.cmd ::= VACU
3020: 55 4d 20 69 64 28 58 29 2e 20 20 20 20 20 20 20  UM id(X).       
3030: 20 20 20 7b 73 71 6c 69 74 65 56 61 63 75 75 6d     {sqliteVacuum
3040: 28 70 50 61 72 73 65 2c 26 58 29 3b 7d 0a        (pParse,&X);}.