/ Hex Artifact Content
Login

Artifact c525282442111b3f61eb176784567cd6654db5dc:


0000: 2f 2a 0a 2a 2a 20 32 30 31 35 2d 30 36 2d 30 38  /*.** 2015-06-08
0010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68 6f  .**.** The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65 67  lace of.** a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 2a  is a blessing:.*
0080: 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75 20  *.**    May you 
0090: 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20  do good and not 
00a0: 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  evil..**    May 
00b0: 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65  you find forgive
00c0: 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c  ness for yoursel
00d0: 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74  f and forgive ot
00e0: 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  hers..**    May 
00f0: 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c 79  you share freely
0100: 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d  , never taking m
0110: 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76  ore than you giv
0120: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
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 0a  ***************.
0170: 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20  **.** This file 
0180: 63 6f 6e 74 61 69 6e 73 20 43 20 63 6f 64 65 20  contains C code 
0190: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
01a0: 20 54 72 65 65 56 69 65 77 20 64 65 62 75 67 67   TreeView debugg
01b0: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2a  ing routines..**
01c0: 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
01d0: 70 72 69 6e 74 20 61 20 70 61 72 73 65 20 74 72  print a parse tr
01e0: 65 65 20 74 6f 20 73 74 61 6e 64 61 72 64 20 6f  ee to standard o
01f0: 75 74 70 75 74 20 66 6f 72 20 64 65 62 75 67 67  utput for debugg
0200: 69 6e 67 20 61 6e 64 0a 2a 2a 20 61 6e 61 6c 79  ing and.** analy
0210: 73 69 73 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sis. .**.** The 
0220: 69 6e 74 65 72 66 61 63 65 73 20 69 6e 20 74 68  interfaces in th
0230: 69 73 20 66 69 6c 65 20 69 73 20 6f 6e 6c 79 20  is file is only 
0240: 61 76 61 69 6c 61 62 6c 65 20 77 68 65 6e 20 63  available when c
0250: 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 77 69 74 68  ompiling.** with
0260: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 2e 0a 2a   SQLITE_DEBUG..*
0270: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0280: 74 65 49 6e 74 2e 68 22 0a 23 69 66 64 65 66 20  teInt.h".#ifdef 
0290: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 0a 2f 2a  SQLITE_DEBUG../*
02a0: 0a 2a 2a 20 41 64 64 20 61 20 6e 65 77 20 73 75  .** Add a new su
02b0: 62 69 74 65 6d 20 74 6f 20 74 68 65 20 74 72 65  bitem to the tre
02c0: 65 2e 20 20 54 68 65 20 6d 6f 72 65 54 6f 46 6f  e.  The moreToFo
02d0: 6c 6c 6f 77 20 66 6c 61 67 20 69 6e 64 69 63 61  llow flag indica
02e0: 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  tes that this.**
02f0: 20 69 73 20 6e 6f 74 20 74 68 65 20 6c 61 73 74   is not the last
0300: 20 69 74 65 6d 20 69 6e 20 74 68 65 20 74 72 65   item in the tre
0310: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 54 72 65  e..*/.static Tre
0320: 65 56 69 65 77 20 2a 73 71 6c 69 74 65 33 54 72  eView *sqlite3Tr
0330: 65 65 56 69 65 77 50 75 73 68 28 54 72 65 65 56  eeViewPush(TreeV
0340: 69 65 77 20 2a 70 2c 20 75 38 20 6d 6f 72 65 54  iew *p, u8 moreT
0350: 6f 46 6f 6c 6c 6f 77 29 7b 0a 20 20 69 66 28 20  oFollow){.  if( 
0360: 70 3d 3d 30 20 29 7b 0a 20 20 20 20 70 20 3d 20  p==0 ){.    p = 
0370: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34  sqlite3_malloc64
0380: 28 20 73 69 7a 65 6f 66 28 2a 70 29 20 29 3b 0a  ( sizeof(*p) );.
0390: 20 20 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72      if( p==0 ) r
03a0: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 6d 65 6d  eturn 0;.    mem
03b0: 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66  set(p, 0, sizeof
03c0: 28 2a 70 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  (*p));.  }else{.
03d0: 20 20 20 20 70 2d 3e 69 4c 65 76 65 6c 2b 2b 3b      p->iLevel++;
03e0: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d  .  }.  assert( m
03f0: 6f 72 65 54 6f 46 6f 6c 6c 6f 77 3d 3d 30 20 7c  oreToFollow==0 |
0400: 7c 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 3d 3d  | moreToFollow==
0410: 31 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 69 4c  1 );.  if( p->iL
0420: 65 76 65 6c 3c 73 69 7a 65 6f 66 28 70 2d 3e 62  evel<sizeof(p->b
0430: 4c 69 6e 65 29 20 29 20 70 2d 3e 62 4c 69 6e 65  Line) ) p->bLine
0440: 5b 70 2d 3e 69 4c 65 76 65 6c 5d 20 3d 20 6d 6f  [p->iLevel] = mo
0450: 72 65 54 6f 46 6f 6c 6c 6f 77 3b 0a 20 20 72 65  reToFollow;.  re
0460: 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn p;.}../*.**
0470: 20 46 69 6e 69 73 68 65 64 20 77 69 74 68 20 6f   Finished with o
0480: 6e 65 20 6c 61 79 65 72 20 6f 66 20 74 68 65 20  ne layer of the 
0490: 74 72 65 65 0a 2a 2f 0a 73 74 61 74 69 63 20 76  tree.*/.static v
04a0: 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
04b0: 69 65 77 50 6f 70 28 54 72 65 65 56 69 65 77 20  iewPop(TreeView 
04c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30 20  *p){.  if( p==0 
04d0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 2d 3e 69  ) return;.  p->i
04e0: 4c 65 76 65 6c 2d 2d 3b 0a 20 20 69 66 28 20 70  Level--;.  if( p
04f0: 2d 3e 69 4c 65 76 65 6c 3c 30 20 29 20 73 71 6c  ->iLevel<0 ) sql
0500: 69 74 65 33 5f 66 72 65 65 28 70 29 3b 0a 7d 0a  ite3_free(p);.}.
0510: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  ./*.** Generate 
0520: 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66  a single line of
0530: 20 6f 75 74 70 75 74 20 66 6f 72 20 74 68 65 20   output for the 
0540: 74 72 65 65 2c 20 77 69 74 68 20 61 20 70 72 65  tree, with a pre
0550: 66 69 78 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  fix that contain
0560: 73 0a 2a 2a 20 61 6c 6c 20 74 68 65 20 61 70 70  s.** all the app
0570: 72 6f 70 72 69 61 74 65 20 74 72 65 65 20 6c 69  ropriate tree li
0580: 6e 65 73 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  nes.*/.static vo
0590: 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
05a0: 65 77 4c 69 6e 65 28 54 72 65 65 56 69 65 77 20  ewLine(TreeView 
05b0: 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
05c0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
05d0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69   va_list ap;.  i
05e0: 6e 74 20 69 3b 0a 20 20 53 74 72 41 63 63 75 6d  nt i;.  StrAccum
05f0: 20 61 63 63 3b 0a 20 20 63 68 61 72 20 7a 42 75   acc;.  char zBu
0600: 66 5b 35 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65  f[500];.  sqlite
0610: 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61  3StrAccumInit(&a
0620: 63 63 2c 20 30 2c 20 7a 42 75 66 2c 20 73 69 7a  cc, 0, zBuf, siz
0630: 65 6f 66 28 7a 42 75 66 29 2c 20 30 29 3b 0a 20  eof(zBuf), 0);. 
0640: 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 66 6f   if( p ){.    fo
0650: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 69 4c 65 76  r(i=0; i<p->iLev
0660: 65 6c 20 26 26 20 69 3c 73 69 7a 65 6f 66 28 70  el && i<sizeof(p
0670: 2d 3e 62 4c 69 6e 65 29 2d 31 3b 20 69 2b 2b 29  ->bLine)-1; i++)
0680: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
0690: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26 61  trAccumAppend(&a
06a0: 63 63 2c 20 70 2d 3e 62 4c 69 6e 65 5b 69 5d 20  cc, p->bLine[i] 
06b0: 3f 20 22 7c 20 20 20 22 20 3a 20 22 20 20 20 20  ? "|   " : "    
06c0: 22 2c 20 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ", 4);.    }.   
06d0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
06e0: 41 70 70 65 6e 64 28 26 61 63 63 2c 20 70 2d 3e  Append(&acc, p->
06f0: 62 4c 69 6e 65 5b 69 5d 20 3f 20 22 7c 2d 2d 20  bLine[i] ? "|-- 
0700: 22 20 3a 20 22 27 2d 2d 20 22 2c 20 34 29 3b 0a  " : "'-- ", 4);.
0710: 20 20 7d 0a 20 20 76 61 5f 73 74 61 72 74 28 61    }.  va_start(a
0720: 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73  p, zFormat);.  s
0730: 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26  qlite3VXPrintf(&
0740: 61 63 63 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  acc, zFormat, ap
0750: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
0760: 0a 20 20 69 66 28 20 7a 42 75 66 5b 61 63 63 2e  .  if( zBuf[acc.
0770: 6e 43 68 61 72 2d 31 5d 21 3d 27 5c 6e 27 20 29  nChar-1]!='\n' )
0780: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
0790: 41 70 70 65 6e 64 28 26 61 63 63 2c 20 22 5c 6e  Append(&acc, "\n
07a0: 22 2c 20 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  ", 1);.  sqlite3
07b0: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
07c0: 61 63 63 29 3b 0a 20 20 66 70 72 69 6e 74 66 28  acc);.  fprintf(
07d0: 73 74 64 6f 75 74 2c 22 25 73 22 2c 20 7a 42 75  stdout,"%s", zBu
07e0: 66 29 3b 0a 20 20 66 66 6c 75 73 68 28 73 74 64  f);.  fflush(std
07f0: 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  out);.}../*.** S
0800: 68 6f 72 74 68 61 6e 64 20 66 6f 72 20 73 74 61  horthand for sta
0810: 72 74 69 6e 67 20 61 20 6e 65 77 20 74 72 65 65  rting a new tree
0820: 20 69 74 65 6d 20 74 68 61 74 20 63 6f 6e 73 69   item that consi
0830: 73 74 73 20 6f 66 20 61 20 73 69 6e 67 6c 65 20  sts of a single 
0840: 6c 61 62 65 6c 0a 2a 2f 0a 73 74 61 74 69 63 20  label.*/.static 
0850: 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
0860: 56 69 65 77 49 74 65 6d 28 54 72 65 65 56 69 65  ViewItem(TreeVie
0870: 77 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  w *p, const char
0880: 20 2a 7a 4c 61 62 65 6c 2c 75 38 20 6d 6f 72 65   *zLabel,u8 more
0890: 46 6f 6c 6c 6f 77 73 29 7b 0a 20 20 70 20 3d 20  Follows){.  p = 
08a0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50  sqlite3TreeViewP
08b0: 75 73 68 28 70 2c 20 6d 6f 72 65 46 6f 6c 6c 6f  ush(p, moreFollo
08c0: 77 73 29 3b 0a 20 20 73 71 6c 69 74 65 33 54 72  ws);.  sqlite3Tr
08d0: 65 65 56 69 65 77 4c 69 6e 65 28 70 2c 20 22 25  eeViewLine(p, "%
08e0: 73 22 2c 20 7a 4c 61 62 65 6c 29 3b 0a 7d 0a 0a  s", zLabel);.}..
08f0: 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61  /*.** Generate a
0900: 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
0910: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61  description of a
0920: 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
0930: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65  .void sqlite3Tre
0940: 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
0950: 65 77 20 2a 70 56 69 65 77 2c 20 63 6f 6e 73 74  ew *pView, const
0960: 20 57 69 74 68 20 2a 70 57 69 74 68 2c 20 75 38   With *pWith, u8
0970: 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29 7b 0a   moreToFollow){.
0980: 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 70    int i;.  if( p
0990: 57 69 74 68 3d 3d 30 20 29 20 72 65 74 75 72 6e  With==0 ) return
09a0: 3b 0a 20 20 69 66 28 20 70 57 69 74 68 2d 3e 6e  ;.  if( pWith->n
09b0: 43 74 65 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  Cte==0 ) return;
09c0: 0a 20 20 69 66 28 20 70 57 69 74 68 2d 3e 70 4f  .  if( pWith->pO
09d0: 75 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  uter ){.    sqli
09e0: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
09f0: 70 56 69 65 77 2c 20 22 57 49 54 48 20 28 30 78  pView, "WITH (0x
0a00: 25 70 2c 20 70 4f 75 74 65 72 3d 30 78 25 70 29  %p, pOuter=0x%p)
0a10: 22 2c 70 57 69 74 68 2c 70 57 69 74 68 2d 3e 70  ",pWith,pWith->p
0a20: 4f 75 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b  Outer);.  }else{
0a30: 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65  .    sqlite3Tree
0a40: 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20  ViewLine(pView, 
0a50: 22 57 49 54 48 20 28 30 78 25 70 29 22 2c 20 70  "WITH (0x%p)", p
0a60: 57 69 74 68 29 3b 0a 20 20 7d 0a 20 20 69 66 28  With);.  }.  if(
0a70: 20 70 57 69 74 68 2d 3e 6e 43 74 65 3e 30 20 29   pWith->nCte>0 )
0a80: 7b 0a 20 20 20 20 70 56 69 65 77 20 3d 20 73 71  {.    pView = sq
0a90: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73  lite3TreeViewPus
0aa0: 68 28 70 56 69 65 77 2c 20 31 29 3b 0a 20 20 20  h(pView, 1);.   
0ab0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 57 69 74   for(i=0; i<pWit
0ac0: 68 2d 3e 6e 43 74 65 3b 20 69 2b 2b 29 7b 0a 20  h->nCte; i++){. 
0ad0: 20 20 20 20 20 53 74 72 41 63 63 75 6d 20 78 3b       StrAccum x;
0ae0: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c 69 6e  .      char zLin
0af0: 65 5b 31 30 30 30 5d 3b 0a 20 20 20 20 20 20 63  e[1000];.      c
0b00: 6f 6e 73 74 20 73 74 72 75 63 74 20 43 74 65 20  onst struct Cte 
0b10: 2a 70 43 74 65 20 3d 20 26 70 57 69 74 68 2d 3e  *pCte = &pWith->
0b20: 61 5b 69 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  a[i];.      sqli
0b30: 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
0b40: 26 78 2c 20 30 2c 20 7a 4c 69 6e 65 2c 20 73 69  &x, 0, zLine, si
0b50: 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 30 29 3b  zeof(zLine), 0);
0b60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 58 50  .      sqlite3XP
0b70: 72 69 6e 74 66 28 26 78 2c 20 22 25 73 22 2c 20  rintf(&x, "%s", 
0b80: 70 43 74 65 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  pCte->zName);.  
0b90: 20 20 20 20 69 66 28 20 70 43 74 65 2d 3e 70 43      if( pCte->pC
0ba0: 6f 6c 73 20 26 26 20 70 43 74 65 2d 3e 70 43 6f  ols && pCte->pCo
0bb0: 6c 73 2d 3e 6e 45 78 70 72 3e 30 20 29 7b 0a 20  ls->nExpr>0 ){. 
0bc0: 20 20 20 20 20 20 20 63 68 61 72 20 63 53 65 70         char cSep
0bd0: 20 3d 20 27 28 27 3b 0a 20 20 20 20 20 20 20 20   = '(';.        
0be0: 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 66  int j;.        f
0bf0: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 43 74 65 2d 3e  or(j=0; j<pCte->
0c00: 70 43 6f 6c 73 2d 3e 6e 45 78 70 72 3b 20 6a 2b  pCols->nExpr; j+
0c10: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  +){.          sq
0c20: 6c 69 74 65 33 58 50 72 69 6e 74 66 28 26 78 2c  lite3XPrintf(&x,
0c30: 20 22 25 63 25 73 22 2c 20 63 53 65 70 2c 20 70   "%c%s", cSep, p
0c40: 43 74 65 2d 3e 70 43 6f 6c 73 2d 3e 61 5b 6a 5d  Cte->pCols->a[j]
0c50: 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  .zName);.       
0c60: 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20     cSep = ',';. 
0c70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0c80: 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
0c90: 26 78 2c 20 22 29 22 29 3b 0a 20 20 20 20 20 20  &x, ")");.      
0ca0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 58  }.      sqlite3X
0cb0: 50 72 69 6e 74 66 28 26 78 2c 20 22 20 41 53 22  Printf(&x, " AS"
0cc0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
0cd0: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
0ce0: 78 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  x);.      sqlite
0cf0: 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 70 56  3TreeViewItem(pV
0d00: 69 65 77 2c 20 7a 4c 69 6e 65 2c 20 69 3c 70 57  iew, zLine, i<pW
0d10: 69 74 68 2d 3e 6e 43 74 65 2d 31 29 3b 0a 20 20  ith->nCte-1);.  
0d20: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
0d30: 69 65 77 53 65 6c 65 63 74 28 70 56 69 65 77 2c  iewSelect(pView,
0d40: 20 70 43 74 65 2d 3e 70 53 65 6c 65 63 74 2c 20   pCte->pSelect, 
0d50: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
0d60: 33 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69  3TreeViewPop(pVi
0d70: 65 77 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ew);.    }.    s
0d80: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f  qlite3TreeViewPo
0d90: 70 28 70 56 69 65 77 29 3b 0a 20 20 7d 0a 7d 0a  p(pView);.  }.}.
0da0: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
0db0: 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
0dc0: 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
0dd0: 20 61 20 74 68 65 20 53 65 6c 65 63 74 20 6f 62   a the Select ob
0de0: 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ject..*/.void sq
0df0: 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
0e00: 65 63 74 28 54 72 65 65 56 69 65 77 20 2a 70 56  ect(TreeView *pV
0e10: 69 65 77 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  iew, const Selec
0e20: 74 20 2a 70 2c 20 75 38 20 6d 6f 72 65 54 6f 46  t *p, u8 moreToF
0e30: 6f 6c 6c 6f 77 29 7b 0a 20 20 69 6e 74 20 6e 20  ollow){.  int n 
0e40: 3d 20 30 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d  = 0;.  int cnt =
0e50: 20 30 3b 0a 20 20 70 56 69 65 77 20 3d 20 73 71   0;.  pView = sq
0e60: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73  lite3TreeViewPus
0e70: 68 28 70 56 69 65 77 2c 20 6d 6f 72 65 54 6f 46  h(pView, moreToF
0e80: 6f 6c 6c 6f 77 29 3b 0a 20 20 69 66 28 20 70 2d  ollow);.  if( p-
0e90: 3e 70 57 69 74 68 20 29 7b 0a 20 20 20 20 73 71  >pWith ){.    sq
0ea0: 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
0eb0: 68 28 70 56 69 65 77 2c 20 70 2d 3e 70 57 69 74  h(pView, p->pWit
0ec0: 68 2c 20 31 29 3b 0a 20 20 20 20 63 6e 74 20 3d  h, 1);.    cnt =
0ed0: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54   1;.    sqlite3T
0ee0: 72 65 65 56 69 65 77 50 75 73 68 28 70 56 69 65  reeViewPush(pVie
0ef0: 77 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 64 6f 7b  w, 1);.  }.  do{
0f00: 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65  .    sqlite3Tree
0f10: 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20  ViewLine(pView, 
0f20: 22 53 45 4c 45 43 54 25 73 25 73 20 28 30 78 25  "SELECT%s%s (0x%
0f30: 70 29 20 73 65 6c 46 6c 61 67 73 3d 30 78 25 78  p) selFlags=0x%x
0f40: 20 6e 53 65 6c 65 63 74 52 6f 77 3d 25 64 22 2c   nSelectRow=%d",
0f50: 0a 20 20 20 20 20 20 28 28 70 2d 3e 73 65 6c 46  .      ((p->selF
0f60: 6c 61 67 73 20 26 20 53 46 5f 44 69 73 74 69 6e  lags & SF_Distin
0f70: 63 74 29 20 3f 20 22 20 44 49 53 54 49 4e 43 54  ct) ? " DISTINCT
0f80: 22 20 3a 20 22 22 29 2c 0a 20 20 20 20 20 20 28  " : ""),.      (
0f90: 28 70 2d 3e 73 65 6c 46 6c 61 67 73 20 26 20 53  (p->selFlags & S
0fa0: 46 5f 41 67 67 72 65 67 61 74 65 29 20 3f 20 22  F_Aggregate) ? "
0fb0: 20 61 67 67 5f 66 6c 61 67 22 20 3a 20 22 22 29   agg_flag" : "")
0fc0: 2c 20 70 2c 20 70 2d 3e 73 65 6c 46 6c 61 67 73  , p, p->selFlags
0fd0: 2c 0a 20 20 20 20 20 20 28 69 6e 74 29 70 2d 3e  ,.      (int)p->
0fe0: 6e 53 65 6c 65 63 74 52 6f 77 0a 20 20 20 20 29  nSelectRow.    )
0ff0: 3b 0a 20 20 20 20 69 66 28 20 63 6e 74 2b 2b 20  ;.    if( cnt++ 
1000: 29 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  ) sqlite3TreeVie
1010: 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20 20 20  wPop(pView);.   
1020: 20 69 66 28 20 70 2d 3e 70 50 72 69 6f 72 20 29   if( p->pPrior )
1030: 7b 0a 20 20 20 20 20 20 6e 20 3d 20 31 30 30 30  {.      n = 1000
1040: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1050: 20 20 20 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20     n = 0;.      
1060: 69 66 28 20 70 2d 3e 70 53 72 63 20 26 26 20 70  if( p->pSrc && p
1070: 2d 3e 70 53 72 63 2d 3e 6e 53 72 63 20 29 20 6e  ->pSrc->nSrc ) n
1080: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ++;.      if( p-
1090: 3e 70 57 68 65 72 65 20 29 20 6e 2b 2b 3b 0a 20  >pWhere ) n++;. 
10a0: 20 20 20 20 20 69 66 28 20 70 2d 3e 70 47 72 6f       if( p->pGro
10b0: 75 70 42 79 20 29 20 6e 2b 2b 3b 0a 20 20 20 20  upBy ) n++;.    
10c0: 20 20 69 66 28 20 70 2d 3e 70 48 61 76 69 6e 67    if( p->pHaving
10d0: 20 29 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66   ) n++;.      if
10e0: 28 20 70 2d 3e 70 4f 72 64 65 72 42 79 20 29 20  ( p->pOrderBy ) 
10f0: 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  n++;.      if( p
1100: 2d 3e 70 4c 69 6d 69 74 20 29 20 6e 2b 2b 3b 0a  ->pLimit ) n++;.
1110: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 4f 66        if( p->pOf
1120: 66 73 65 74 20 29 20 6e 2b 2b 3b 0a 20 20 20 20  fset ) n++;.    
1130: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72 65  }.    sqlite3Tre
1140: 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 70 56  eViewExprList(pV
1150: 69 65 77 2c 20 70 2d 3e 70 45 4c 69 73 74 2c 20  iew, p->pEList, 
1160: 28 6e 2d 2d 29 3e 30 2c 20 22 72 65 73 75 6c 74  (n--)>0, "result
1170: 2d 73 65 74 22 29 3b 0a 20 20 20 20 69 66 28 20  -set");.    if( 
1180: 70 2d 3e 70 53 72 63 20 26 26 20 70 2d 3e 70 53  p->pSrc && p->pS
1190: 72 63 2d 3e 6e 53 72 63 20 29 7b 0a 20 20 20 20  rc->nSrc ){.    
11a0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70    int i;.      p
11b0: 56 69 65 77 20 3d 20 73 71 6c 69 74 65 33 54 72  View = sqlite3Tr
11c0: 65 65 56 69 65 77 50 75 73 68 28 70 56 69 65 77  eeViewPush(pView
11d0: 2c 20 28 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20  , (n--)>0);.    
11e0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
11f0: 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 46 52  wLine(pView, "FR
1200: 4f 4d 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  OM");.      for(
1210: 69 3d 30 3b 20 69 3c 70 2d 3e 70 53 72 63 2d 3e  i=0; i<p->pSrc->
1220: 6e 53 72 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nSrc; i++){.    
1230: 20 20 20 20 73 74 72 75 63 74 20 53 72 63 4c 69      struct SrcLi
1240: 73 74 5f 69 74 65 6d 20 2a 70 49 74 65 6d 20 3d  st_item *pItem =
1250: 20 26 70 2d 3e 70 53 72 63 2d 3e 61 5b 69 5d 3b   &p->pSrc->a[i];
1260: 0a 20 20 20 20 20 20 20 20 53 74 72 41 63 63 75  .        StrAccu
1270: 6d 20 78 3b 0a 20 20 20 20 20 20 20 20 63 68 61  m x;.        cha
1280: 72 20 7a 4c 69 6e 65 5b 31 30 30 5d 3b 0a 20 20  r zLine[100];.  
1290: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
12a0: 41 63 63 75 6d 49 6e 69 74 28 26 78 2c 20 30 2c  AccumInit(&x, 0,
12b0: 20 7a 4c 69 6e 65 2c 20 73 69 7a 65 6f 66 28 7a   zLine, sizeof(z
12c0: 4c 69 6e 65 29 2c 20 30 29 3b 0a 20 20 20 20 20  Line), 0);.     
12d0: 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74     sqlite3XPrint
12e0: 66 28 26 78 2c 20 22 7b 25 64 2c 2a 7d 22 2c 20  f(&x, "{%d,*}", 
12f0: 70 49 74 65 6d 2d 3e 69 43 75 72 73 6f 72 29 3b  pItem->iCursor);
1300: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49 74  .        if( pIt
1310: 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 20 29 7b  em->zDatabase ){
1320: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1330: 65 33 58 50 72 69 6e 74 66 28 26 78 2c 20 22 20  e3XPrintf(&x, " 
1340: 25 73 2e 25 73 22 2c 20 70 49 74 65 6d 2d 3e 7a  %s.%s", pItem->z
1350: 44 61 74 61 62 61 73 65 2c 20 70 49 74 65 6d 2d  Database, pItem-
1360: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
1370: 20 7d 65 6c 73 65 20 69 66 28 20 70 49 74 65 6d   }else if( pItem
1380: 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  ->zName ){.     
1390: 20 20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69       sqlite3XPri
13a0: 6e 74 66 28 26 78 2c 20 22 20 25 73 22 2c 20 70  ntf(&x, " %s", p
13b0: 49 74 65 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  Item->zName);.  
13c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
13d0: 69 66 28 20 70 49 74 65 6d 2d 3e 70 54 61 62 20  if( pItem->pTab 
13e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
13f0: 69 74 65 33 58 50 72 69 6e 74 66 28 26 78 2c 20  ite3XPrintf(&x, 
1400: 22 20 74 61 62 6e 61 6d 65 3d 25 51 22 2c 20 70  " tabname=%Q", p
1410: 49 74 65 6d 2d 3e 70 54 61 62 2d 3e 7a 4e 61 6d  Item->pTab->zNam
1420: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
1430: 20 20 20 20 20 20 69 66 28 20 70 49 74 65 6d 2d        if( pItem-
1440: 3e 7a 41 6c 69 61 73 20 29 7b 0a 20 20 20 20 20  >zAlias ){.     
1450: 20 20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69       sqlite3XPri
1460: 6e 74 66 28 26 78 2c 20 22 20 28 41 53 20 25 73  ntf(&x, " (AS %s
1470: 29 22 2c 20 70 49 74 65 6d 2d 3e 7a 41 6c 69 61  )", pItem->zAlia
1480: 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  s);.        }.  
1490: 20 20 20 20 20 20 69 66 28 20 70 49 74 65 6d 2d        if( pItem-
14a0: 3e 66 67 2e 6a 6f 69 6e 74 79 70 65 20 26 20 4a  >fg.jointype & J
14b0: 54 5f 4c 45 46 54 20 29 7b 0a 20 20 20 20 20 20  T_LEFT ){.      
14c0: 20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e      sqlite3XPrin
14d0: 74 66 28 26 78 2c 20 22 20 4c 45 46 54 2d 4a 4f  tf(&x, " LEFT-JO
14e0: 49 4e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  IN");.        }.
14f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
1500: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 78  trAccumFinish(&x
1510: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
1520: 65 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 70  e3TreeViewItem(p
1530: 56 69 65 77 2c 20 7a 4c 69 6e 65 2c 20 69 3c 70  View, zLine, i<p
1540: 2d 3e 70 53 72 63 2d 3e 6e 53 72 63 2d 31 29 3b  ->pSrc->nSrc-1);
1550: 20 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49   .        if( pI
1560: 74 65 6d 2d 3e 70 53 65 6c 65 63 74 20 29 7b 0a  tem->pSelect ){.
1570: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1580: 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
1590: 70 56 69 65 77 2c 20 70 49 74 65 6d 2d 3e 70 53  pView, pItem->pS
15a0: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 20  elect, 0);.     
15b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
15c0: 20 70 49 74 65 6d 2d 3e 66 67 2e 69 73 54 61 62   pItem->fg.isTab
15d0: 46 75 6e 63 20 29 7b 0a 20 20 20 20 20 20 20 20  Func ){.        
15e0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
15f0: 77 45 78 70 72 4c 69 73 74 28 70 56 69 65 77 2c  wExprList(pView,
1600: 20 70 49 74 65 6d 2d 3e 75 31 2e 70 46 75 6e 63   pItem->u1.pFunc
1610: 41 72 67 2c 20 30 2c 20 22 66 75 6e 63 2d 61 72  Arg, 0, "func-ar
1620: 67 73 3a 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  gs:");.        }
1630: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1640: 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69 65  TreeViewPop(pVie
1650: 77 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  w);.      }.    
1660: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
1670: 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20 20 20  wPop(pView);.   
1680: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 57   }.    if( p->pW
1690: 68 65 72 65 20 29 7b 0a 20 20 20 20 20 20 73 71  here ){.      sq
16a0: 6c 69 74 65 33 54 72 65 65 56 69 65 77 49 74 65  lite3TreeViewIte
16b0: 6d 28 70 56 69 65 77 2c 20 22 57 48 45 52 45 22  m(pView, "WHERE"
16c0: 2c 20 28 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20  , (n--)>0);.    
16d0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
16e0: 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 2d 3e  wExpr(pView, p->
16f0: 70 57 68 65 72 65 2c 20 30 29 3b 0a 20 20 20 20  pWhere, 0);.    
1700: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
1710: 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20 20 20  wPop(pView);.   
1720: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 47   }.    if( p->pG
1730: 72 6f 75 70 42 79 20 29 7b 0a 20 20 20 20 20 20  roupBy ){.      
1740: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
1750: 78 70 72 4c 69 73 74 28 70 56 69 65 77 2c 20 70  xprList(pView, p
1760: 2d 3e 70 47 72 6f 75 70 42 79 2c 20 28 6e 2d 2d  ->pGroupBy, (n--
1770: 29 3e 30 2c 20 22 47 52 4f 55 50 42 59 22 29 3b  )>0, "GROUPBY");
1780: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
1790: 2d 3e 70 48 61 76 69 6e 67 20 29 7b 0a 20 20 20  ->pHaving ){.   
17a0: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
17b0: 65 77 49 74 65 6d 28 70 56 69 65 77 2c 20 22 48  ewItem(pView, "H
17c0: 41 56 49 4e 47 22 2c 20 28 6e 2d 2d 29 3e 30 29  AVING", (n--)>0)
17d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
17e0: 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65  reeViewExpr(pVie
17f0: 77 2c 20 70 2d 3e 70 48 61 76 69 6e 67 2c 20 30  w, p->pHaving, 0
1800: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1810: 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69 65  TreeViewPop(pVie
1820: 77 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  w);.    }.    if
1830: 28 20 70 2d 3e 70 4f 72 64 65 72 42 79 20 29 7b  ( p->pOrderBy ){
1840: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
1850: 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 70  eeViewExprList(p
1860: 56 69 65 77 2c 20 70 2d 3e 70 4f 72 64 65 72 42  View, p->pOrderB
1870: 79 2c 20 28 6e 2d 2d 29 3e 30 2c 20 22 4f 52 44  y, (n--)>0, "ORD
1880: 45 52 42 59 22 29 3b 0a 20 20 20 20 7d 0a 20 20  ERBY");.    }.  
1890: 20 20 69 66 28 20 70 2d 3e 70 4c 69 6d 69 74 20    if( p->pLimit 
18a0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
18b0: 54 72 65 65 56 69 65 77 49 74 65 6d 28 70 56 69  TreeViewItem(pVi
18c0: 65 77 2c 20 22 4c 49 4d 49 54 22 2c 20 28 6e 2d  ew, "LIMIT", (n-
18d0: 2d 29 3e 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  -)>0);.      sql
18e0: 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
18f0: 28 70 56 69 65 77 2c 20 70 2d 3e 70 4c 69 6d 69  (pView, p->pLimi
1900: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 0);.      sql
1910: 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70 28  ite3TreeViewPop(
1920: 70 56 69 65 77 29 3b 0a 20 20 20 20 7d 0a 20 20  pView);.    }.  
1930: 20 20 69 66 28 20 70 2d 3e 70 4f 66 66 73 65 74    if( p->pOffset
1940: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1950: 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 70 56  3TreeViewItem(pV
1960: 69 65 77 2c 20 22 4f 46 46 53 45 54 22 2c 20 28  iew, "OFFSET", (
1970: 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20 20 20 73  n--)>0);.      s
1980: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
1990: 70 72 28 70 56 69 65 77 2c 20 70 2d 3e 70 4f 66  pr(pView, p->pOf
19a0: 66 73 65 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  fset, 0);.      
19b0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50  sqlite3TreeViewP
19c0: 6f 70 28 70 56 69 65 77 29 3b 0a 20 20 20 20 7d  op(pView);.    }
19d0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 50 72 69  .    if( p->pPri
19e0: 6f 72 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  or ){.      cons
19f0: 74 20 63 68 61 72 20 2a 7a 4f 70 20 3d 20 22 55  t char *zOp = "U
1a00: 4e 49 4f 4e 22 3b 0a 20 20 20 20 20 20 73 77 69  NION";.      swi
1a10: 74 63 68 28 20 70 2d 3e 6f 70 20 29 7b 0a 20 20  tch( p->op ){.  
1a20: 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f 41 4c        case TK_AL
1a30: 4c 3a 20 20 20 20 20 20 20 20 20 7a 4f 70 20 3d  L:         zOp =
1a40: 20 22 55 4e 49 4f 4e 20 41 4c 4c 22 3b 20 20 62   "UNION ALL";  b
1a50: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
1a60: 73 65 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 3a  se TK_INTERSECT:
1a70: 20 20 20 7a 4f 70 20 3d 20 22 49 4e 54 45 52 53     zOp = "INTERS
1a80: 45 43 54 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20  ECT";  break;.  
1a90: 20 20 20 20 20 20 63 61 73 65 20 54 4b 5f 45 58        case TK_EX
1aa0: 43 45 50 54 3a 20 20 20 20 20 20 7a 4f 70 20 3d  CEPT:      zOp =
1ab0: 20 22 45 58 43 45 50 54 22 3b 20 20 20 20 20 62   "EXCEPT";     b
1ac0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
1ad0: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
1ae0: 69 65 77 49 74 65 6d 28 70 56 69 65 77 2c 20 7a  iewItem(pView, z
1af0: 4f 70 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20  Op, 1);.    }.  
1b00: 20 20 70 20 3d 20 70 2d 3e 70 50 72 69 6f 72 3b    p = p->pPrior;
1b10: 0a 20 20 7d 77 68 69 6c 65 28 20 70 21 3d 30 20  .  }while( p!=0 
1b20: 29 3b 0a 20 20 73 71 6c 69 74 65 33 54 72 65 65  );.  sqlite3Tree
1b30: 56 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a  ViewPop(pView);.
1b40: 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74  }../*.** Generat
1b50: 65 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  e a human-readab
1b60: 6c 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f  le explanation o
1b70: 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
1b80: 74 72 65 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  tree..*/.void sq
1b90: 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
1ba0: 72 28 54 72 65 65 56 69 65 77 20 2a 70 56 69 65  r(TreeView *pVie
1bb0: 77 2c 20 63 6f 6e 73 74 20 45 78 70 72 20 2a 70  w, const Expr *p
1bc0: 45 78 70 72 2c 20 75 38 20 6d 6f 72 65 54 6f 46  Expr, u8 moreToF
1bd0: 6f 6c 6c 6f 77 29 7b 0a 20 20 63 6f 6e 73 74 20  ollow){.  const 
1be0: 63 68 61 72 20 2a 7a 42 69 6e 4f 70 20 3d 20 30  char *zBinOp = 0
1bf0: 3b 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 6f 70  ;   /* Binary op
1c00: 65 72 61 74 6f 72 20 2a 2f 0a 20 20 63 6f 6e 73  erator */.  cons
1c10: 74 20 63 68 61 72 20 2a 7a 55 6e 69 4f 70 20 3d  t char *zUniOp =
1c20: 20 30 3b 20 20 20 2f 2a 20 55 6e 61 72 79 20 6f   0;   /* Unary o
1c30: 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 63 68 61  perator */.  cha
1c40: 72 20 7a 46 6c 67 73 5b 33 30 5d 3b 0a 20 20 70  r zFlgs[30];.  p
1c50: 56 69 65 77 20 3d 20 73 71 6c 69 74 65 33 54 72  View = sqlite3Tr
1c60: 65 65 56 69 65 77 50 75 73 68 28 70 56 69 65 77  eeViewPush(pView
1c70: 2c 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29 3b  , moreToFollow);
1c80: 0a 20 20 69 66 28 20 70 45 78 70 72 3d 3d 30 20  .  if( pExpr==0 
1c90: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  ){.    sqlite3Tr
1ca0: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
1cb0: 2c 20 22 6e 69 6c 22 29 3b 0a 20 20 20 20 73 71  , "nil");.    sq
1cc0: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70  lite3TreeViewPop
1cd0: 28 70 56 69 65 77 29 3b 0a 20 20 20 20 72 65 74  (pView);.    ret
1ce0: 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  urn;.  }.  if( p
1cf0: 45 78 70 72 2d 3e 66 6c 61 67 73 20 29 7b 0a 20  Expr->flags ){. 
1d00: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
1d10: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 46 6c 67 73  ntf(sizeof(zFlgs
1d20: 29 2c 7a 46 6c 67 73 2c 22 20 20 66 6c 61 67 73  ),zFlgs,"  flags
1d30: 3d 30 78 25 78 22 2c 70 45 78 70 72 2d 3e 66 6c  =0x%x",pExpr->fl
1d40: 61 67 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ags);.  }else{. 
1d50: 20 20 20 7a 46 6c 67 73 5b 30 5d 20 3d 20 30 3b     zFlgs[0] = 0;
1d60: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
1d70: 45 78 70 72 2d 3e 6f 70 20 29 7b 0a 20 20 20 20  Expr->op ){.    
1d80: 63 61 73 65 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  case TK_AGG_COLU
1d90: 4d 4e 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  MN: {.      sqli
1da0: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
1db0: 70 56 69 65 77 2c 20 22 41 47 47 7b 25 64 3a 25  pView, "AGG{%d:%
1dc0: 64 7d 25 73 22 2c 0a 20 20 20 20 20 20 20 20 20  d}%s",.         
1dd0: 20 20 20 70 45 78 70 72 2d 3e 69 54 61 62 6c 65     pExpr->iTable
1de0: 2c 20 70 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e  , pExpr->iColumn
1df0: 2c 20 7a 46 6c 67 73 29 3b 0a 20 20 20 20 20 20  , zFlgs);.      
1e00: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
1e10: 20 63 61 73 65 20 54 4b 5f 43 4f 4c 55 4d 4e 3a   case TK_COLUMN:
1e20: 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70 45 78   {.      if( pEx
1e30: 70 72 2d 3e 69 54 61 62 6c 65 3c 30 20 29 7b 0a  pr->iTable<0 ){.
1e40: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
1e50: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  only happens whe
1e60: 6e 20 63 6f 64 69 6e 67 20 63 68 65 63 6b 20 63  n coding check c
1e70: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
1e80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65        sqlite3Tre
1e90: 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c  eViewLine(pView,
1ea0: 20 22 43 4f 4c 55 4d 4e 28 25 64 29 25 73 22 2c   "COLUMN(%d)%s",
1eb0: 20 70 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e 2c   pExpr->iColumn,
1ec0: 20 7a 46 6c 67 73 29 3b 0a 20 20 20 20 20 20 7d   zFlgs);.      }
1ed0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
1ee0: 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e  lite3TreeViewLin
1ef0: 65 28 70 56 69 65 77 2c 20 22 7b 25 64 3a 25 64  e(pView, "{%d:%d
1f00: 7d 25 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20  }%s",.          
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 20 20 70 45 78 70 72 2d 3e 69 54 61 62 6c 65     pExpr->iTable
1f30: 2c 20 70 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e  , pExpr->iColumn
1f40: 2c 20 7a 46 6c 67 73 29 3b 0a 20 20 20 20 20 20  , zFlgs);.      
1f50: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
1f60: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 54 4b     }.    case TK
1f70: 5f 49 4e 54 45 47 45 52 3a 20 7b 0a 20 20 20 20  _INTEGER: {.    
1f80: 20 20 69 66 28 20 70 45 78 70 72 2d 3e 66 6c 61    if( pExpr->fla
1f90: 67 73 20 26 20 45 50 5f 49 6e 74 56 61 6c 75 65  gs & EP_IntValue
1fa0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1fb0: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
1fc0: 70 56 69 65 77 2c 20 22 25 64 22 2c 20 70 45 78  pView, "%d", pEx
1fd0: 70 72 2d 3e 75 2e 69 56 61 6c 75 65 29 3b 0a 20  pr->u.iValue);. 
1fe0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ff0: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
2000: 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22  iewLine(pView, "
2010: 25 73 22 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54  %s", pExpr->u.zT
2020: 6f 6b 65 6e 29 3b 0a 20 20 20 20 20 20 7d 0a 20  oken);.      }. 
2030: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2040: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
2050: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
2060: 4f 49 4e 54 0a 20 20 20 20 63 61 73 65 20 54 4b  OINT.    case TK
2070: 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20  _FLOAT: {.      
2080: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
2090: 69 6e 65 28 70 56 69 65 77 2c 22 25 73 22 2c 20  ine(pView,"%s", 
20a0: 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 29  pExpr->u.zToken)
20b0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
20c0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
20d0: 63 61 73 65 20 54 4b 5f 53 54 52 49 4e 47 3a 20  case TK_STRING: 
20e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  {.      sqlite3T
20f0: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
2100: 77 2c 22 25 51 22 2c 20 70 45 78 70 72 2d 3e 75  w,"%Q", pExpr->u
2110: 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20 20 20 20  .zToken);.      
2120: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
2130: 20 63 61 73 65 20 54 4b 5f 4e 55 4c 4c 3a 20 7b   case TK_NULL: {
2140: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
2150: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
2160: 2c 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 20 20  ,"NULL");.      
2170: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 69 66  break;.    }.#if
2180: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2190: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 20 20  _BLOB_LITERAL.  
21a0: 20 20 63 61 73 65 20 54 4b 5f 42 4c 4f 42 3a 20    case TK_BLOB: 
21b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  {.      sqlite3T
21c0: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
21d0: 77 2c 22 25 73 22 2c 20 70 45 78 70 72 2d 3e 75  w,"%s", pExpr->u
21e0: 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20 20 20 20  .zToken);.      
21f0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e  break;.    }.#en
2200: 64 69 66 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  dif.    case TK_
2210: 56 41 52 49 41 42 4c 45 3a 20 7b 0a 20 20 20 20  VARIABLE: {.    
2220: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
2230: 77 4c 69 6e 65 28 70 56 69 65 77 2c 22 56 41 52  wLine(pView,"VAR
2240: 49 41 42 4c 45 28 25 73 2c 25 64 29 22 2c 0a 20  IABLE(%s,%d)",. 
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 20 20 20 20 70 45 78 70 72 2d 3e           pExpr->
2270: 75 2e 7a 54 6f 6b 65 6e 2c 20 70 45 78 70 72 2d  u.zToken, pExpr-
2280: 3e 69 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20  >iColumn);.     
2290: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
22a0: 20 20 63 61 73 65 20 54 4b 5f 52 45 47 49 53 54    case TK_REGIST
22b0: 45 52 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  ER: {.      sqli
22c0: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
22d0: 70 56 69 65 77 2c 22 52 45 47 49 53 54 45 52 28  pView,"REGISTER(
22e0: 25 64 29 22 2c 20 70 45 78 70 72 2d 3e 69 54 61  %d)", pExpr->iTa
22f0: 62 6c 65 29 3b 0a 20 20 20 20 20 20 62 72 65 61  ble);.      brea
2300: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
2310: 65 20 54 4b 5f 49 44 3a 20 7b 0a 20 20 20 20 20  e TK_ID: {.     
2320: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
2330: 4c 69 6e 65 28 70 56 69 65 77 2c 22 49 44 20 5c  Line(pView,"ID \
2340: 22 25 77 5c 22 22 2c 20 70 45 78 70 72 2d 3e 75  "%w\"", pExpr->u
2350: 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20 20 20 20  .zToken);.      
2360: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 69 66  break;.    }.#if
2370: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2380: 5f 43 41 53 54 0a 20 20 20 20 63 61 73 65 20 54  _CAST.    case T
2390: 4b 5f 43 41 53 54 3a 20 7b 0a 20 20 20 20 20 20  K_CAST: {.      
23a0: 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 73 20 6f  /* Expressions o
23b0: 66 20 74 68 65 20 66 6f 72 6d 3a 20 20 20 43 41  f the form:   CA
23c0: 53 54 28 70 4c 65 66 74 20 41 53 20 74 6f 6b 65  ST(pLeft AS toke
23d0: 6e 29 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  n) */.      sqli
23e0: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
23f0: 70 56 69 65 77 2c 22 43 41 53 54 20 25 51 22 2c  pView,"CAST %Q",
2400: 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e   pExpr->u.zToken
2410: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2420: 54 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69  TreeViewExpr(pVi
2430: 65 77 2c 20 70 45 78 70 72 2d 3e 70 4c 65 66 74  ew, pExpr->pLeft
2440: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 0);.      brea
2450: 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  k;.    }.#endif 
2460: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
2470: 41 53 54 20 2a 2f 0a 20 20 20 20 63 61 73 65 20  AST */.    case 
2480: 54 4b 5f 4c 54 3a 20 20 20 20 20 20 7a 42 69 6e  TK_LT:      zBin
2490: 4f 70 20 3d 20 22 4c 54 22 3b 20 20 20 20 20 62  Op = "LT";     b
24a0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54  reak;.    case T
24b0: 4b 5f 4c 45 3a 20 20 20 20 20 20 7a 42 69 6e 4f  K_LE:      zBinO
24c0: 70 20 3d 20 22 4c 45 22 3b 20 20 20 20 20 62 72  p = "LE";     br
24d0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b  eak;.    case TK
24e0: 5f 47 54 3a 20 20 20 20 20 20 7a 42 69 6e 4f 70  _GT:      zBinOp
24f0: 20 3d 20 22 47 54 22 3b 20 20 20 20 20 62 72 65   = "GT";     bre
2500: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  ak;.    case TK_
2510: 47 45 3a 20 20 20 20 20 20 7a 42 69 6e 4f 70 20  GE:      zBinOp 
2520: 3d 20 22 47 45 22 3b 20 20 20 20 20 62 72 65 61  = "GE";     brea
2530: 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 4e  k;.    case TK_N
2540: 45 3a 20 20 20 20 20 20 7a 42 69 6e 4f 70 20 3d  E:      zBinOp =
2550: 20 22 4e 45 22 3b 20 20 20 20 20 62 72 65 61 6b   "NE";     break
2560: 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 45 51  ;.    case TK_EQ
2570: 3a 20 20 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20  :      zBinOp = 
2580: 22 45 51 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  "EQ";     break;
2590: 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 49 53 3a  .    case TK_IS:
25a0: 20 20 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22        zBinOp = "
25b0: 49 53 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  IS";     break;.
25c0: 20 20 20 20 63 61 73 65 20 54 4b 5f 49 53 4e 4f      case TK_ISNO
25d0: 54 3a 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22 49  T:   zBinOp = "I
25e0: 53 4e 4f 54 22 3b 20 20 62 72 65 61 6b 3b 0a 20  SNOT";  break;. 
25f0: 20 20 20 63 61 73 65 20 54 4b 5f 41 4e 44 3a 20     case TK_AND: 
2600: 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22 41 4e      zBinOp = "AN
2610: 44 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  D";    break;.  
2620: 20 20 63 61 73 65 20 54 4b 5f 4f 52 3a 20 20 20    case TK_OR:   
2630: 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22 4f 52 22     zBinOp = "OR"
2640: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
2650: 20 63 61 73 65 20 54 4b 5f 50 4c 55 53 3a 20 20   case TK_PLUS:  
2660: 20 20 7a 42 69 6e 4f 70 20 3d 20 22 41 44 44 22    zBinOp = "ADD"
2670: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
2680: 63 61 73 65 20 54 4b 5f 53 54 41 52 3a 20 20 20  case TK_STAR:   
2690: 20 7a 42 69 6e 4f 70 20 3d 20 22 4d 55 4c 22 3b   zBinOp = "MUL";
26a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
26b0: 61 73 65 20 54 4b 5f 4d 49 4e 55 53 3a 20 20 20  ase TK_MINUS:   
26c0: 7a 42 69 6e 4f 70 20 3d 20 22 53 55 42 22 3b 20  zBinOp = "SUB"; 
26d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
26e0: 73 65 20 54 4b 5f 52 45 4d 3a 20 20 20 20 20 7a  se TK_REM:     z
26f0: 42 69 6e 4f 70 20 3d 20 22 52 45 4d 22 3b 20 20  BinOp = "REM";  
2700: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
2710: 65 20 54 4b 5f 42 49 54 41 4e 44 3a 20 20 7a 42  e TK_BITAND:  zB
2720: 69 6e 4f 70 20 3d 20 22 42 49 54 41 4e 44 22 3b  inOp = "BITAND";
2730: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
2740: 20 54 4b 5f 42 49 54 4f 52 3a 20 20 20 7a 42 69   TK_BITOR:   zBi
2750: 6e 4f 70 20 3d 20 22 42 49 54 4f 52 22 3b 20 20  nOp = "BITOR";  
2760: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
2770: 54 4b 5f 53 4c 41 53 48 3a 20 20 20 7a 42 69 6e  TK_SLASH:   zBin
2780: 4f 70 20 3d 20 22 44 49 56 22 3b 20 20 20 20 62  Op = "DIV";    b
2790: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54  reak;.    case T
27a0: 4b 5f 4c 53 48 49 46 54 3a 20 20 7a 42 69 6e 4f  K_LSHIFT:  zBinO
27b0: 70 20 3d 20 22 4c 53 48 49 46 54 22 3b 20 62 72  p = "LSHIFT"; br
27c0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b  eak;.    case TK
27d0: 5f 52 53 48 49 46 54 3a 20 20 7a 42 69 6e 4f 70  _RSHIFT:  zBinOp
27e0: 20 3d 20 22 52 53 48 49 46 54 22 3b 20 62 72 65   = "RSHIFT"; bre
27f0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  ak;.    case TK_
2800: 43 4f 4e 43 41 54 3a 20 20 7a 42 69 6e 4f 70 20  CONCAT:  zBinOp 
2810: 3d 20 22 43 4f 4e 43 41 54 22 3b 20 62 72 65 61  = "CONCAT"; brea
2820: 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 44  k;.    case TK_D
2830: 4f 54 3a 20 20 20 20 20 7a 42 69 6e 4f 70 20 3d  OT:     zBinOp =
2840: 20 22 44 4f 54 22 3b 20 20 20 20 62 72 65 61 6b   "DOT";    break
2850: 3b 0a 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 55  ;..    case TK_U
2860: 4d 49 4e 55 53 3a 20 20 7a 55 6e 69 4f 70 20 3d  MINUS:  zUniOp =
2870: 20 22 55 4d 49 4e 55 53 22 3b 20 62 72 65 61 6b   "UMINUS"; break
2880: 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 55 50  ;.    case TK_UP
2890: 4c 55 53 3a 20 20 20 7a 55 6e 69 4f 70 20 3d 20  LUS:   zUniOp = 
28a0: 22 55 50 4c 55 53 22 3b 20 20 62 72 65 61 6b 3b  "UPLUS";  break;
28b0: 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 42 49 54  .    case TK_BIT
28c0: 4e 4f 54 3a 20 20 7a 55 6e 69 4f 70 20 3d 20 22  NOT:  zUniOp = "
28d0: 42 49 54 4e 4f 54 22 3b 20 62 72 65 61 6b 3b 0a  BITNOT"; break;.
28e0: 20 20 20 20 63 61 73 65 20 54 4b 5f 4e 4f 54 3a      case TK_NOT:
28f0: 20 20 20 20 20 7a 55 6e 69 4f 70 20 3d 20 22 4e       zUniOp = "N
2900: 4f 54 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  OT";    break;. 
2910: 20 20 20 63 61 73 65 20 54 4b 5f 49 53 4e 55 4c     case TK_ISNUL
2920: 4c 3a 20 20 7a 55 6e 69 4f 70 20 3d 20 22 49 53  L:  zUniOp = "IS
2930: 4e 55 4c 4c 22 3b 20 62 72 65 61 6b 3b 0a 20 20  NULL"; break;.  
2940: 20 20 63 61 73 65 20 54 4b 5f 4e 4f 54 4e 55 4c    case TK_NOTNUL
2950: 4c 3a 20 7a 55 6e 69 4f 70 20 3d 20 22 4e 4f 54  L: zUniOp = "NOT
2960: 4e 55 4c 4c 22 3b 20 62 72 65 61 6b 3b 0a 0a 20  NULL"; break;.. 
2970: 20 20 20 63 61 73 65 20 54 4b 5f 43 4f 4c 4c 41     case TK_COLLA
2980: 54 45 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  TE: {.      sqli
2990: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
29a0: 70 56 69 65 77 2c 20 22 43 4f 4c 4c 41 54 45 20  pView, "COLLATE 
29b0: 25 51 22 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54  %Q", pExpr->u.zT
29c0: 6f 6b 65 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c  oken);.      sql
29d0: 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
29e0: 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 70  (pView, pExpr->p
29f0: 4c 65 66 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Left, 0);.      
2a00: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20  break;.    }..  
2a10: 20 20 63 61 73 65 20 54 4b 5f 41 47 47 5f 46 55    case TK_AGG_FU
2a20: 4e 43 54 49 4f 4e 3a 0a 20 20 20 20 63 61 73 65  NCTION:.    case
2a30: 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20 7b 0a   TK_FUNCTION: {.
2a40: 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
2a50: 70 46 61 72 67 3b 20 20 20 20 20 20 20 2f 2a 20  pFarg;       /* 
2a60: 4c 69 73 74 20 6f 66 20 66 75 6e 63 74 69 6f 6e  List of function
2a70: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
2a80: 20 20 20 20 69 66 28 20 45 78 70 72 48 61 73 50      if( ExprHasP
2a90: 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c 20 45  roperty(pExpr, E
2aa0: 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 29 20 29 7b 0a  P_TokenOnly) ){.
2ab0: 20 20 20 20 20 20 20 20 70 46 61 72 67 20 3d 20          pFarg = 
2ac0: 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
2ad0: 20 20 20 20 20 20 20 20 70 46 61 72 67 20 3d 20          pFarg = 
2ae0: 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74 3b 0a  pExpr->x.pList;.
2af0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
2b00: 28 20 70 45 78 70 72 2d 3e 6f 70 3d 3d 54 4b 5f  ( pExpr->op==TK_
2b10: 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 29 7b 0a  AGG_FUNCTION ){.
2b20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
2b30: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
2b40: 77 2c 20 22 41 47 47 5f 46 55 4e 43 54 49 4f 4e  w, "AGG_FUNCTION
2b50: 25 64 20 25 51 22 2c 0a 20 20 20 20 20 20 20 20  %d %Q",.        
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 20 20 20 20 20 70 45 78 70 72 2d 3e 6f 70 32 2c       pExpr->op2,
2b80: 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e   pExpr->u.zToken
2b90: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2ba0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
2bb0: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
2bc0: 77 2c 20 22 46 55 4e 43 54 49 4f 4e 20 25 51 22  w, "FUNCTION %Q"
2bd0: 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65  , pExpr->u.zToke
2be0: 6e 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  n);.      }.    
2bf0: 20 20 69 66 28 20 70 46 61 72 67 20 29 7b 0a 20    if( pFarg ){. 
2c00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72         sqlite3Tr
2c10: 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 70  eeViewExprList(p
2c20: 56 69 65 77 2c 20 70 46 61 72 67 2c 20 30 2c 20  View, pFarg, 0, 
2c30: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
2c40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23    break;.    }.#
2c50: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c60: 49 54 5f 53 55 42 51 55 45 52 59 0a 20 20 20 20  IT_SUBQUERY.    
2c70: 63 61 73 65 20 54 4b 5f 45 58 49 53 54 53 3a 20  case TK_EXISTS: 
2c80: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  {.      sqlite3T
2c90: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
2ca0: 77 2c 20 22 45 58 49 53 54 53 2d 65 78 70 72 22  w, "EXISTS-expr"
2cb0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2cc0: 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 70  TreeViewSelect(p
2cd0: 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 78 2e 70  View, pExpr->x.p
2ce0: 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20  Select, 0);.    
2cf0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
2d00: 20 20 20 63 61 73 65 20 54 4b 5f 53 45 4c 45 43     case TK_SELEC
2d10: 54 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  T: {.      sqlit
2d20: 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70  e3TreeViewLine(p
2d30: 56 69 65 77 2c 20 22 53 45 4c 45 43 54 2d 65 78  View, "SELECT-ex
2d40: 70 72 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pr");.      sqli
2d50: 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
2d60: 74 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e  t(pView, pExpr->
2d70: 78 2e 70 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20  x.pSelect, 0);. 
2d80: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2d90: 7d 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 49 4e  }.    case TK_IN
2da0: 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  : {.      sqlite
2db0: 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56  3TreeViewLine(pV
2dc0: 69 65 77 2c 20 22 49 4e 22 29 3b 0a 20 20 20 20  iew, "IN");.    
2dd0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
2de0: 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 45 78  wExpr(pView, pEx
2df0: 70 72 2d 3e 70 4c 65 66 74 2c 20 31 29 3b 0a 20  pr->pLeft, 1);. 
2e00: 20 20 20 20 20 69 66 28 20 45 78 70 72 48 61 73       if( ExprHas
2e10: 50 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c 20  Property(pExpr, 
2e20: 45 50 5f 78 49 73 53 65 6c 65 63 74 29 20 29 7b  EP_xIsSelect) ){
2e30: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2e40: 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 70  TreeViewSelect(p
2e50: 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 78 2e 70  View, pExpr->x.p
2e60: 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20  Select, 0);.    
2e70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2e80: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
2e90: 45 78 70 72 4c 69 73 74 28 70 56 69 65 77 2c 20  ExprList(pView, 
2ea0: 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74 2c 20  pExpr->x.pList, 
2eb0: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  0, 0);.      }. 
2ec0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2ed0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2ee0: 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2ef0: 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20   */..    /*.    
2f00: 2a 2a 20 20 20 20 78 20 42 45 54 57 45 45 4e 20  **    x BETWEEN 
2f10: 79 20 41 4e 44 20 7a 0a 20 20 20 20 2a 2a 0a 20  y AND z.    **. 
2f20: 20 20 20 2a 2a 20 54 68 69 73 20 69 73 20 65 71     ** This is eq
2f30: 75 69 76 61 6c 65 6e 74 20 74 6f 0a 20 20 20 20  uivalent to.    
2f40: 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 20 78 3e 3d  **.    **    x>=
2f50: 79 20 41 4e 44 20 78 3c 3d 7a 0a 20 20 20 20 2a  y AND x<=z.    *
2f60: 2a 0a 20 20 20 20 2a 2a 20 58 20 69 73 20 73 74  *.    ** X is st
2f70: 6f 72 65 64 20 69 6e 20 70 45 78 70 72 2d 3e 70  ored in pExpr->p
2f80: 4c 65 66 74 2e 0a 20 20 20 20 2a 2a 20 59 20 69  Left..    ** Y i
2f90: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 45 78 70  s stored in pExp
2fa0: 72 2d 3e 70 4c 69 73 74 2d 3e 61 5b 30 5d 2e 70  r->pList->a[0].p
2fb0: 45 78 70 72 2e 0a 20 20 20 20 2a 2a 20 5a 20 69  Expr..    ** Z i
2fc0: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 45 78 70  s stored in pExp
2fd0: 72 2d 3e 70 4c 69 73 74 2d 3e 61 5b 31 5d 2e 70  r->pList->a[1].p
2fe0: 45 78 70 72 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  Expr..    */.   
2ff0: 20 63 61 73 65 20 54 4b 5f 42 45 54 57 45 45 4e   case TK_BETWEEN
3000: 3a 20 7b 0a 20 20 20 20 20 20 45 78 70 72 20 2a  : {.      Expr *
3010: 70 58 20 3d 20 70 45 78 70 72 2d 3e 70 4c 65 66  pX = pExpr->pLef
3020: 74 3b 0a 20 20 20 20 20 20 45 78 70 72 20 2a 70  t;.      Expr *p
3030: 59 20 3d 20 70 45 78 70 72 2d 3e 78 2e 70 4c 69  Y = pExpr->x.pLi
3040: 73 74 2d 3e 61 5b 30 5d 2e 70 45 78 70 72 3b 0a  st->a[0].pExpr;.
3050: 20 20 20 20 20 20 45 78 70 72 20 2a 70 5a 20 3d        Expr *pZ =
3060: 20 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74 2d   pExpr->x.pList-
3070: 3e 61 5b 31 5d 2e 70 45 78 70 72 3b 0a 20 20 20  >a[1].pExpr;.   
3080: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
3090: 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 42  ewLine(pView, "B
30a0: 45 54 57 45 45 4e 22 29 3b 0a 20 20 20 20 20 20  ETWEEN");.      
30b0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
30c0: 78 70 72 28 70 56 69 65 77 2c 20 70 58 2c 20 31  xpr(pView, pX, 1
30d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
30e0: 54 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69  TreeViewExpr(pVi
30f0: 65 77 2c 20 70 59 2c 20 31 29 3b 0a 20 20 20 20  ew, pY, 1);.    
3100: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
3110: 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 5a 2c  wExpr(pView, pZ,
3120: 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b   0);.      break
3130: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
3140: 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 7b 0a 20   TK_TRIGGER: {. 
3150: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 6f       /* If the o
3160: 70 63 6f 64 65 20 69 73 20 54 4b 5f 54 52 49 47  pcode is TK_TRIG
3170: 47 45 52 2c 20 74 68 65 6e 20 74 68 65 20 65 78  GER, then the ex
3180: 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 72 65  pression is a re
3190: 66 65 72 65 6e 63 65 0a 20 20 20 20 20 20 2a 2a  ference.      **
31a0: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
31b0: 74 68 65 20 6e 65 77 2e 2a 20 6f 72 20 6f 6c 64  the new.* or old
31c0: 2e 2a 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  .* pseudo-tables
31d0: 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 0a 20 20   available to.  
31e0: 20 20 20 20 2a 2a 20 74 72 69 67 67 65 72 20 70      ** trigger p
31f0: 72 6f 67 72 61 6d 73 2e 20 49 6e 20 74 68 69 73  rograms. In this
3200: 20 63 61 73 65 20 45 78 70 72 2e 69 54 61 62 6c   case Expr.iTabl
3210: 65 20 69 73 20 73 65 74 20 74 6f 20 31 20 66 6f  e is set to 1 fo
3220: 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6e  r the.      ** n
3230: 65 77 2e 2a 20 70 73 65 75 64 6f 2d 74 61 62 6c  ew.* pseudo-tabl
3240: 65 2c 20 6f 72 20 30 20 66 6f 72 20 74 68 65 20  e, or 0 for the 
3250: 6f 6c 64 2e 2a 20 70 73 65 75 64 6f 2d 74 61 62  old.* pseudo-tab
3260: 6c 65 2e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  le. Expr.iColumn
3270: 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 73 65 74  .      ** is set
3280: 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   to the column o
3290: 66 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  f the pseudo-tab
32a0: 6c 65 20 74 6f 20 72 65 61 64 2c 20 6f 72 20 74  le to read, or t
32b0: 6f 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 2a 2a  o -1 to.      **
32c0: 20 72 65 61 64 20 74 68 65 20 72 6f 77 69 64 20   read the rowid 
32d0: 66 69 65 6c 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  field..      */.
32e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65        sqlite3Tre
32f0: 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c  eViewLine(pView,
3300: 20 22 25 73 28 25 64 29 22 2c 20 0a 20 20 20 20   "%s(%d)", .    
3310: 20 20 20 20 20 20 70 45 78 70 72 2d 3e 69 54 61        pExpr->iTa
3320: 62 6c 65 20 3f 20 22 4e 45 57 22 20 3a 20 22 4f  ble ? "NEW" : "O
3330: 4c 44 22 2c 20 70 45 78 70 72 2d 3e 69 43 6f 6c  LD", pExpr->iCol
3340: 75 6d 6e 29 3b 0a 20 20 20 20 20 20 62 72 65 61  umn);.      brea
3350: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
3360: 65 20 54 4b 5f 43 41 53 45 3a 20 7b 0a 20 20 20  e TK_CASE: {.   
3370: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
3380: 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 43  ewLine(pView, "C
3390: 41 53 45 22 29 3b 0a 20 20 20 20 20 20 73 71 6c  ASE");.      sql
33a0: 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
33b0: 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 70  (pView, pExpr->p
33c0: 4c 65 66 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  Left, 1);.      
33d0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
33e0: 78 70 72 4c 69 73 74 28 70 56 69 65 77 2c 20 70  xprList(pView, p
33f0: 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74 2c 20 30  Expr->x.pList, 0
3400: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 0);.      brea
3410: 6b 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  k;.    }.#ifndef
3420: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
3430: 47 47 45 52 0a 20 20 20 20 63 61 73 65 20 54 4b  GGER.    case TK
3440: 5f 52 41 49 53 45 3a 20 7b 0a 20 20 20 20 20 20  _RAISE: {.      
3450: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
3460: 65 20 3d 20 22 75 6e 6b 22 3b 0a 20 20 20 20 20  e = "unk";.     
3470: 20 73 77 69 74 63 68 28 20 70 45 78 70 72 2d 3e   switch( pExpr->
3480: 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  affinity ){.    
3490: 20 20 20 20 63 61 73 65 20 4f 45 5f 52 6f 6c 6c      case OE_Roll
34a0: 62 61 63 6b 3a 20 20 20 7a 54 79 70 65 20 3d 20  back:   zType = 
34b0: 22 72 6f 6c 6c 62 61 63 6b 22 3b 20 20 62 72 65  "rollback";  bre
34c0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
34d0: 20 4f 45 5f 41 62 6f 72 74 3a 20 20 20 20 20 20   OE_Abort:      
34e0: 7a 54 79 70 65 20 3d 20 22 61 62 6f 72 74 22 3b  zType = "abort";
34f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3500: 20 20 20 20 63 61 73 65 20 4f 45 5f 46 61 69 6c      case OE_Fail
3510: 3a 20 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  :       zType = 
3520: 22 66 61 69 6c 22 3b 20 20 20 20 20 20 62 72 65  "fail";      bre
3530: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
3540: 20 4f 45 5f 49 67 6e 6f 72 65 3a 20 20 20 20 20   OE_Ignore:     
3550: 7a 54 79 70 65 20 3d 20 22 69 67 6e 6f 72 65 22  zType = "ignore"
3560: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
3570: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
3580: 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56  3TreeViewLine(pV
3590: 69 65 77 2c 20 22 52 41 49 53 45 20 25 73 28 25  iew, "RAISE %s(%
35a0: 51 29 22 2c 20 7a 54 79 70 65 2c 20 70 45 78 70  Q)", zType, pExp
35b0: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20  r->u.zToken);.  
35c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
35d0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 64 65 66 61  .#endif.    defa
35e0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  ult: {.      sql
35f0: 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65  ite3TreeViewLine
3600: 28 70 56 69 65 77 2c 20 22 6f 70 3d 25 64 22 2c  (pView, "op=%d",
3610: 20 70 45 78 70 72 2d 3e 6f 70 29 3b 0a 20 20 20   pExpr->op);.   
3620: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3630: 20 20 7d 0a 20 20 69 66 28 20 7a 42 69 6e 4f 70    }.  if( zBinOp
3640: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 54   ){.    sqlite3T
3650: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
3660: 77 2c 20 22 25 73 25 73 22 2c 20 7a 42 69 6e 4f  w, "%s%s", zBinO
3670: 70 2c 20 7a 46 6c 67 73 29 3b 0a 20 20 20 20 73  p, zFlgs);.    s
3680: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
3690: 70 72 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d  pr(pView, pExpr-
36a0: 3e 70 4c 65 66 74 2c 20 31 29 3b 0a 20 20 20 20  >pLeft, 1);.    
36b0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
36c0: 78 70 72 28 70 56 69 65 77 2c 20 70 45 78 70 72  xpr(pView, pExpr
36d0: 2d 3e 70 52 69 67 68 74 2c 20 30 29 3b 0a 20 20  ->pRight, 0);.  
36e0: 7d 65 6c 73 65 20 69 66 28 20 7a 55 6e 69 4f 70  }else if( zUniOp
36f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 54   ){.    sqlite3T
3700: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
3710: 77 2c 20 22 25 73 25 73 22 2c 20 7a 55 6e 69 4f  w, "%s%s", zUniO
3720: 70 2c 20 7a 46 6c 67 73 29 3b 0a 20 20 20 20 73  p, zFlgs);.    s
3730: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
3740: 70 72 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d  pr(pView, pExpr-
3750: 3e 70 4c 65 66 74 2c 20 30 29 3b 0a 20 20 7d 0a  >pLeft, 0);.  }.
3760: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
3770: 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 7d 0a 0a  wPop(pView);.}..
3780: 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61  /*.** Generate a
3790: 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
37a0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 61  explanation of a
37b0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  n expression lis
37c0: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  t..*/.void sqlit
37d0: 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
37e0: 73 74 28 0a 20 20 54 72 65 65 56 69 65 77 20 2a  st(.  TreeView *
37f0: 70 56 69 65 77 2c 0a 20 20 63 6f 6e 73 74 20 45  pView,.  const E
3800: 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 2c 0a  xprList *pList,.
3810: 20 20 75 38 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f    u8 moreToFollo
3820: 77 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  w,.  const char 
3830: 2a 7a 4c 61 62 65 6c 0a 29 7b 0a 20 20 69 6e 74  *zLabel.){.  int
3840: 20 69 3b 0a 20 20 70 56 69 65 77 20 3d 20 73 71   i;.  pView = sq
3850: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73  lite3TreeViewPus
3860: 68 28 70 56 69 65 77 2c 20 6d 6f 72 65 54 6f 46  h(pView, moreToF
3870: 6f 6c 6c 6f 77 29 3b 0a 20 20 69 66 28 20 7a 4c  ollow);.  if( zL
3880: 61 62 65 6c 3d 3d 30 20 7c 7c 20 7a 4c 61 62 65  abel==0 || zLabe
3890: 6c 5b 30 5d 3d 3d 30 20 29 20 7a 4c 61 62 65 6c  l[0]==0 ) zLabel
38a0: 20 3d 20 22 4c 49 53 54 22 3b 0a 20 20 69 66 28   = "LIST";.  if(
38b0: 20 70 4c 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20   pList==0 ){.   
38c0: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
38d0: 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 25 73 20  Line(pView, "%s 
38e0: 28 65 6d 70 74 79 29 22 2c 20 7a 4c 61 62 65 6c  (empty)", zLabel
38f0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
3900: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
3910: 69 6e 65 28 70 56 69 65 77 2c 20 22 25 73 22 2c  ine(pView, "%s",
3920: 20 7a 4c 61 62 65 6c 29 3b 0a 20 20 20 20 66 6f   zLabel);.    fo
3930: 72 28 69 3d 30 3b 20 69 3c 70 4c 69 73 74 2d 3e  r(i=0; i<pList->
3940: 6e 45 78 70 72 3b 20 69 2b 2b 29 7b 0a 20 20 20  nExpr; i++){.   
3950: 20 20 20 69 6e 74 20 6a 20 3d 20 70 4c 69 73 74     int j = pList
3960: 2d 3e 61 5b 69 5d 2e 75 2e 78 2e 69 4f 72 64 65  ->a[i].u.x.iOrde
3970: 72 42 79 43 6f 6c 3b 0a 20 20 20 20 20 20 69 66  rByCol;.      if
3980: 28 20 6a 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ( j ){.        s
3990: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75  qlite3TreeViewPu
39a0: 73 68 28 70 56 69 65 77 2c 20 30 29 3b 0a 20 20  sh(pView, 0);.  
39b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65        sqlite3Tre
39c0: 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c  eViewLine(pView,
39d0: 20 22 69 4f 72 64 65 72 42 79 43 6f 6c 3d 25 64   "iOrderByCol=%d
39e0: 22 2c 20 6a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", j);.      }. 
39f0: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
3a00: 56 69 65 77 45 78 70 72 28 70 56 69 65 77 2c 20  ViewExpr(pView, 
3a10: 70 4c 69 73 74 2d 3e 61 5b 69 5d 2e 70 45 78 70  pList->a[i].pExp
3a20: 72 2c 20 69 3c 70 4c 69 73 74 2d 3e 6e 45 78 70  r, i<pList->nExp
3a30: 72 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  r-1);.      if( 
3a40: 6a 20 29 20 73 71 6c 69 74 65 33 54 72 65 65 56  j ) sqlite3TreeV
3a50: 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20  iewPop(pView);. 
3a60: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
3a70: 65 33 54 72 65 65 56 69 65 77 50 6f 70 28 70 56  e3TreeViewPop(pV
3a80: 69 65 77 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  iew);.}..#endif 
3a90: 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
3aa0: 2a 2f 0a                                         */.