/ Hex Artifact Content
Login

Artifact 72b78e17fd7ceaf7bf6ac23ea1c9c0a716aafede61adc20b791b4374bab77f5a:


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 5f  {.      sqlite3_
0690: 73 74 72 5f 61 70 70 65 6e 64 28 26 61 63 63 2c  str_append(&acc,
06a0: 20 70 2d 3e 62 4c 69 6e 65 5b 69 5d 20 3f 20 22   p->bLine[i] ? "
06b0: 7c 20 20 20 22 20 3a 20 22 20 20 20 20 22 2c 20  |   " : "    ", 
06c0: 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  4);.    }.    sq
06d0: 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64  lite3_str_append
06e0: 28 26 61 63 63 2c 20 70 2d 3e 62 4c 69 6e 65 5b  (&acc, p->bLine[
06f0: 69 5d 20 3f 20 22 7c 2d 2d 20 22 20 3a 20 22 27  i] ? "|-- " : "'
0700: 2d 2d 20 22 2c 20 34 29 3b 0a 20 20 7d 0a 20 20  -- ", 4);.  }.  
0710: 69 66 28 20 7a 46 6f 72 6d 61 74 21 3d 30 20 29  if( zFormat!=0 )
0720: 7b 0a 20 20 20 20 76 61 5f 73 74 61 72 74 28 61  {.    va_start(a
0730: 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20  p, zFormat);.   
0740: 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 76 61 70   sqlite3_str_vap
0750: 70 65 6e 64 66 28 26 61 63 63 2c 20 7a 46 6f 72  pendf(&acc, zFor
0760: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20 20 76 61  mat, ap);.    va
0770: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 20 20 61 73  _end(ap);.    as
0780: 73 65 72 74 28 20 61 63 63 2e 6e 43 68 61 72 3e  sert( acc.nChar>
0790: 30 20 7c 7c 20 61 63 63 2e 61 63 63 45 72 72 6f  0 || acc.accErro
07a0: 72 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  r );.    sqlite3
07b0: 5f 73 74 72 5f 61 70 70 65 6e 64 28 26 61 63 63  _str_append(&acc
07c0: 2c 20 22 5c 6e 22 2c 20 31 29 3b 0a 20 20 7d 0a  , "\n", 1);.  }.
07d0: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
07e0: 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20  mFinish(&acc);. 
07f0: 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c   fprintf(stdout,
0800: 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 66  "%s", zBuf);.  f
0810: 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 7d  flush(stdout);.}
0820: 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f 72 74 68 61 6e  ../*.** Shorthan
0830: 64 20 66 6f 72 20 73 74 61 72 74 69 6e 67 20 61  d for starting a
0840: 20 6e 65 77 20 74 72 65 65 20 69 74 65 6d 20 74   new tree item t
0850: 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  hat consists of 
0860: 61 20 73 69 6e 67 6c 65 20 6c 61 62 65 6c 0a 2a  a single label.*
0870: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 71  /.static void sq
0880: 6c 69 74 65 33 54 72 65 65 56 69 65 77 49 74 65  lite3TreeViewIte
0890: 6d 28 54 72 65 65 56 69 65 77 20 2a 70 2c 20 63  m(TreeView *p, c
08a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65  onst char *zLabe
08b0: 6c 2c 75 38 20 6d 6f 72 65 46 6f 6c 6c 6f 77 73  l,u8 moreFollows
08c0: 29 7b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33  ){.  p = sqlite3
08d0: 54 72 65 65 56 69 65 77 50 75 73 68 28 70 2c 20  TreeViewPush(p, 
08e0: 6d 6f 72 65 46 6f 6c 6c 6f 77 73 29 3b 0a 20 20  moreFollows);.  
08f0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
0900: 69 6e 65 28 70 2c 20 22 25 73 22 2c 20 7a 4c 61  ine(p, "%s", zLa
0910: 62 65 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47  bel);.}../*.** G
0920: 65 6e 65 72 61 74 65 20 61 20 68 75 6d 61 6e 2d  enerate a human-
0930: 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
0940: 74 69 6f 6e 20 6f 66 20 61 20 57 49 54 48 20 63  tion of a WITH c
0950: 6c 61 75 73 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73  lause..*/.void s
0960: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
0970: 74 68 28 54 72 65 65 56 69 65 77 20 2a 70 56 69  th(TreeView *pVi
0980: 65 77 2c 20 63 6f 6e 73 74 20 57 69 74 68 20 2a  ew, const With *
0990: 70 57 69 74 68 2c 20 75 38 20 6d 6f 72 65 54 6f  pWith, u8 moreTo
09a0: 46 6f 6c 6c 6f 77 29 7b 0a 20 20 69 6e 74 20 69  Follow){.  int i
09b0: 3b 0a 20 20 69 66 28 20 70 57 69 74 68 3d 3d 30  ;.  if( pWith==0
09c0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
09d0: 20 70 57 69 74 68 2d 3e 6e 43 74 65 3d 3d 30 20   pWith->nCte==0 
09e0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
09f0: 70 57 69 74 68 2d 3e 70 4f 75 74 65 72 20 29 7b  pWith->pOuter ){
0a00: 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65  .    sqlite3Tree
0a10: 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20  ViewLine(pView, 
0a20: 22 57 49 54 48 20 28 30 78 25 70 2c 20 70 4f 75  "WITH (0x%p, pOu
0a30: 74 65 72 3d 30 78 25 70 29 22 2c 70 57 69 74 68  ter=0x%p)",pWith
0a40: 2c 70 57 69 74 68 2d 3e 70 4f 75 74 65 72 29 3b  ,pWith->pOuter);
0a50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
0a60: 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e  lite3TreeViewLin
0a70: 65 28 70 56 69 65 77 2c 20 22 57 49 54 48 20 28  e(pView, "WITH (
0a80: 30 78 25 70 29 22 2c 20 70 57 69 74 68 29 3b 0a  0x%p)", pWith);.
0a90: 20 20 7d 0a 20 20 69 66 28 20 70 57 69 74 68 2d    }.  if( pWith-
0aa0: 3e 6e 43 74 65 3e 30 20 29 7b 0a 20 20 20 20 70  >nCte>0 ){.    p
0ab0: 56 69 65 77 20 3d 20 73 71 6c 69 74 65 33 54 72  View = sqlite3Tr
0ac0: 65 65 56 69 65 77 50 75 73 68 28 70 56 69 65 77  eeViewPush(pView
0ad0: 2c 20 31 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  , 1);.    for(i=
0ae0: 30 3b 20 69 3c 70 57 69 74 68 2d 3e 6e 43 74 65  0; i<pWith->nCte
0af0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 53 74  ; i++){.      St
0b00: 72 41 63 63 75 6d 20 78 3b 0a 20 20 20 20 20 20  rAccum x;.      
0b10: 63 68 61 72 20 7a 4c 69 6e 65 5b 31 30 30 30 5d  char zLine[1000]
0b20: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 73 74  ;.      const st
0b30: 72 75 63 74 20 43 74 65 20 2a 70 43 74 65 20 3d  ruct Cte *pCte =
0b40: 20 26 70 57 69 74 68 2d 3e 61 5b 69 5d 3b 0a 20   &pWith->a[i];. 
0b50: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
0b60: 63 63 75 6d 49 6e 69 74 28 26 78 2c 20 30 2c 20  ccumInit(&x, 0, 
0b70: 7a 4c 69 6e 65 2c 20 73 69 7a 65 6f 66 28 7a 4c  zLine, sizeof(zL
0b80: 69 6e 65 29 2c 20 30 29 3b 0a 20 20 20 20 20 20  ine), 0);.      
0b90: 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
0ba0: 6e 64 66 28 26 78 2c 20 22 25 73 22 2c 20 70 43  ndf(&x, "%s", pC
0bb0: 74 65 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  te->zName);.    
0bc0: 20 20 69 66 28 20 70 43 74 65 2d 3e 70 43 6f 6c    if( pCte->pCol
0bd0: 73 20 26 26 20 70 43 74 65 2d 3e 70 43 6f 6c 73  s && pCte->pCols
0be0: 2d 3e 6e 45 78 70 72 3e 30 20 29 7b 0a 20 20 20  ->nExpr>0 ){.   
0bf0: 20 20 20 20 20 63 68 61 72 20 63 53 65 70 20 3d       char cSep =
0c00: 20 27 28 27 3b 0a 20 20 20 20 20 20 20 20 69 6e   '(';.        in
0c10: 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  t j;.        for
0c20: 28 6a 3d 30 3b 20 6a 3c 70 43 74 65 2d 3e 70 43  (j=0; j<pCte->pC
0c30: 6f 6c 73 2d 3e 6e 45 78 70 72 3b 20 6a 2b 2b 29  ols->nExpr; j++)
0c40: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
0c50: 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 66 28  te3_str_appendf(
0c60: 26 78 2c 20 22 25 63 25 73 22 2c 20 63 53 65 70  &x, "%c%s", cSep
0c70: 2c 20 70 43 74 65 2d 3e 70 43 6f 6c 73 2d 3e 61  , pCte->pCols->a
0c80: 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  [j].zName);.    
0c90: 20 20 20 20 20 20 63 53 65 70 20 3d 20 27 2c 27        cSep = ','
0ca0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0cb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f      sqlite3_str_
0cc0: 61 70 70 65 6e 64 66 28 26 78 2c 20 22 29 22 29  appendf(&x, ")")
0cd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
0ce0: 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
0cf0: 6e 64 66 28 26 78 2c 20 22 20 41 53 22 29 3b 0a  ndf(&x, " AS");.
0d00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
0d10: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 78 29 3b  AccumFinish(&x);
0d20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
0d30: 65 65 56 69 65 77 49 74 65 6d 28 70 56 69 65 77  eeViewItem(pView
0d40: 2c 20 7a 4c 69 6e 65 2c 20 69 3c 70 57 69 74 68  , zLine, i<pWith
0d50: 2d 3e 6e 43 74 65 2d 31 29 3b 0a 20 20 20 20 20  ->nCte-1);.     
0d60: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
0d70: 53 65 6c 65 63 74 28 70 56 69 65 77 2c 20 70 43  Select(pView, pC
0d80: 74 65 2d 3e 70 53 65 6c 65 63 74 2c 20 30 29 3b  te->pSelect, 0);
0d90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
0da0: 65 65 56 69 65 77 50 6f 70 28 70 56 69 65 77 29  eeViewPop(pView)
0db0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
0dc0: 74 65 33 54 72 65 65 56 69 65 77 50 6f 70 28 70  te3TreeViewPop(p
0dd0: 56 69 65 77 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  View);.  }.}../*
0de0: 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20 68  .** Generate a h
0df0: 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
0e00: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61 20 53  scription of a S
0e10: 72 63 4c 69 73 74 20 6f 62 6a 65 63 74 2e 0a 2a  rcList object..*
0e20: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72  /.void sqlite3Tr
0e30: 65 65 56 69 65 77 53 72 63 4c 69 73 74 28 54 72  eeViewSrcList(Tr
0e40: 65 65 56 69 65 77 20 2a 70 56 69 65 77 2c 20 63  eeView *pView, c
0e50: 6f 6e 73 74 20 53 72 63 4c 69 73 74 20 2a 70 53  onst SrcList *pS
0e60: 72 63 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  rc){.  int i;.  
0e70: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 72 63 2d  for(i=0; i<pSrc-
0e80: 3e 6e 53 72 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >nSrc; i++){.   
0e90: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 53 72   const struct Sr
0ea0: 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70 49 74 65  cList_item *pIte
0eb0: 6d 20 3d 20 26 70 53 72 63 2d 3e 61 5b 69 5d 3b  m = &pSrc->a[i];
0ec0: 0a 20 20 20 20 53 74 72 41 63 63 75 6d 20 78 3b  .    StrAccum x;
0ed0: 0a 20 20 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b  .    char zLine[
0ee0: 31 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  100];.    sqlite
0ef0: 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 78  3StrAccumInit(&x
0f00: 2c 20 30 2c 20 7a 4c 69 6e 65 2c 20 73 69 7a 65  , 0, zLine, size
0f10: 6f 66 28 7a 4c 69 6e 65 29 2c 20 30 29 3b 0a 20  of(zLine), 0);. 
0f20: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 61     sqlite3_str_a
0f30: 70 70 65 6e 64 66 28 26 78 2c 20 22 7b 25 64 2c  ppendf(&x, "{%d,
0f40: 2a 7d 22 2c 20 70 49 74 65 6d 2d 3e 69 43 75 72  *}", pItem->iCur
0f50: 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 70 49  sor);.    if( pI
0f60: 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 20 29  tem->zDatabase )
0f70: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
0f80: 73 74 72 5f 61 70 70 65 6e 64 66 28 26 78 2c 20  str_appendf(&x, 
0f90: 22 20 25 73 2e 25 73 22 2c 20 70 49 74 65 6d 2d  " %s.%s", pItem-
0fa0: 3e 7a 44 61 74 61 62 61 73 65 2c 20 70 49 74 65  >zDatabase, pIte
0fb0: 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d  m->zName);.    }
0fc0: 65 6c 73 65 20 69 66 28 20 70 49 74 65 6d 2d 3e  else if( pItem->
0fd0: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 73  zName ){.      s
0fe0: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
0ff0: 64 66 28 26 78 2c 20 22 20 25 73 22 2c 20 70 49  df(&x, " %s", pI
1000: 74 65 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  tem->zName);.   
1010: 20 7d 0a 20 20 20 20 69 66 28 20 70 49 74 65 6d   }.    if( pItem
1020: 2d 3e 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ->pTab ){.      
1030: 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
1040: 6e 64 66 28 26 78 2c 20 22 20 74 61 62 3d 25 51  ndf(&x, " tab=%Q
1050: 20 6e 43 6f 6c 3d 25 64 20 70 74 72 3d 25 70 22   nCol=%d ptr=%p"
1060: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 74  ,.           pIt
1070: 65 6d 2d 3e 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  em->pTab->zName,
1080: 20 70 49 74 65 6d 2d 3e 70 54 61 62 2d 3e 6e 43   pItem->pTab->nC
1090: 6f 6c 2c 20 70 49 74 65 6d 2d 3e 70 54 61 62 29  ol, pItem->pTab)
10a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
10b0: 70 49 74 65 6d 2d 3e 7a 41 6c 69 61 73 20 29 7b  pItem->zAlias ){
10c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
10d0: 74 72 5f 61 70 70 65 6e 64 66 28 26 78 2c 20 22  tr_appendf(&x, "
10e0: 20 28 41 53 20 25 73 29 22 2c 20 70 49 74 65 6d   (AS %s)", pItem
10f0: 2d 3e 7a 41 6c 69 61 73 29 3b 0a 20 20 20 20 7d  ->zAlias);.    }
1100: 0a 20 20 20 20 69 66 28 20 70 49 74 65 6d 2d 3e  .    if( pItem->
1110: 66 67 2e 6a 6f 69 6e 74 79 70 65 20 26 20 4a 54  fg.jointype & JT
1120: 5f 4c 45 46 54 20 29 7b 0a 20 20 20 20 20 20 73  _LEFT ){.      s
1130: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
1140: 64 66 28 26 78 2c 20 22 20 4c 45 46 54 2d 4a 4f  df(&x, " LEFT-JO
1150: 49 4e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  IN");.    }.    
1160: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
1170: 69 6e 69 73 68 28 26 78 29 3b 0a 20 20 20 20 73  inish(&x);.    s
1180: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 49 74  qlite3TreeViewIt
1190: 65 6d 28 70 56 69 65 77 2c 20 7a 4c 69 6e 65 2c  em(pView, zLine,
11a0: 20 69 3c 70 53 72 63 2d 3e 6e 53 72 63 2d 31 29   i<pSrc->nSrc-1)
11b0: 3b 20 0a 20 20 20 20 69 66 28 20 70 49 74 65 6d  ; .    if( pItem
11c0: 2d 3e 70 53 65 6c 65 63 74 20 29 7b 0a 20 20 20  ->pSelect ){.   
11d0: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
11e0: 65 77 53 65 6c 65 63 74 28 70 56 69 65 77 2c 20  ewSelect(pView, 
11f0: 70 49 74 65 6d 2d 3e 70 53 65 6c 65 63 74 2c 20  pItem->pSelect, 
1200: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
1210: 28 20 70 49 74 65 6d 2d 3e 66 67 2e 69 73 54 61  ( pItem->fg.isTa
1220: 62 46 75 6e 63 20 29 7b 0a 20 20 20 20 20 20 73  bFunc ){.      s
1230: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
1240: 70 72 4c 69 73 74 28 70 56 69 65 77 2c 20 70 49  prList(pView, pI
1250: 74 65 6d 2d 3e 75 31 2e 70 46 75 6e 63 41 72 67  tem->u1.pFuncArg
1260: 2c 20 30 2c 20 22 66 75 6e 63 2d 61 72 67 73 3a  , 0, "func-args:
1270: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ");.    }.    sq
1280: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70  lite3TreeViewPop
1290: 28 70 56 69 65 77 29 3b 0a 20 20 7d 0a 7d 0a 0a  (pView);.  }.}..
12a0: 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61  /*.** Generate a
12b0: 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
12c0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61  description of a
12d0: 20 53 65 6c 65 63 74 20 6f 62 6a 65 63 74 2e 0a   Select object..
12e0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  */.void sqlite3T
12f0: 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
1300: 65 65 56 69 65 77 20 2a 70 56 69 65 77 2c 20 63  eeView *pView, c
1310: 6f 6e 73 74 20 53 65 6c 65 63 74 20 2a 70 2c 20  onst Select *p, 
1320: 75 38 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29  u8 moreToFollow)
1330: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
1340: 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20   int cnt = 0;.  
1350: 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20  if( p==0 ){.    
1360: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
1370: 69 6e 65 28 70 56 69 65 77 2c 20 22 6e 69 6c 2d  ine(pView, "nil-
1380: 53 45 4c 45 43 54 22 29 3b 0a 20 20 20 20 72 65  SELECT");.    re
1390: 74 75 72 6e 3b 0a 20 20 7d 20 0a 20 20 70 56 69  turn;.  } .  pVi
13a0: 65 77 20 3d 20 73 71 6c 69 74 65 33 54 72 65 65  ew = sqlite3Tree
13b0: 56 69 65 77 50 75 73 68 28 70 56 69 65 77 2c 20  ViewPush(pView, 
13c0: 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29 3b 0a 20  moreToFollow);. 
13d0: 20 69 66 28 20 70 2d 3e 70 57 69 74 68 20 29 7b   if( p->pWith ){
13e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65  .    sqlite3Tree
13f0: 56 69 65 77 57 69 74 68 28 70 56 69 65 77 2c 20  ViewWith(pView, 
1400: 70 2d 3e 70 57 69 74 68 2c 20 31 29 3b 0a 20 20  p->pWith, 1);.  
1410: 20 20 63 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73    cnt = 1;.    s
1420: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75  qlite3TreeViewPu
1430: 73 68 28 70 56 69 65 77 2c 20 31 29 3b 0a 20 20  sh(pView, 1);.  
1440: 7d 0a 20 20 64 6f 7b 0a 20 20 20 20 69 66 28 20  }.  do{.    if( 
1450: 70 2d 3e 73 65 6c 46 6c 61 67 73 20 26 20 53 46  p->selFlags & SF
1460: 5f 57 68 65 72 65 42 65 67 69 6e 20 29 7b 0a 20  _WhereBegin ){. 
1470: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
1480: 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20  ViewLine(pView, 
1490: 22 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  "sqlite3WhereBeg
14a0: 69 6e 28 29 22 29 3b 0a 20 20 20 20 7d 65 6c 73  in()");.    }els
14b0: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
14c0: 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69  TreeViewLine(pVi
14d0: 65 77 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c  ew,.        "SEL
14e0: 45 43 54 25 73 25 73 20 28 25 75 2f 25 70 29 20  ECT%s%s (%u/%p) 
14f0: 73 65 6c 46 6c 61 67 73 3d 30 78 25 78 20 6e 53  selFlags=0x%x nS
1500: 65 6c 65 63 74 52 6f 77 3d 25 64 22 2c 0a 20 20  electRow=%d",.  
1510: 20 20 20 20 20 20 28 28 70 2d 3e 73 65 6c 46 6c        ((p->selFl
1520: 61 67 73 20 26 20 53 46 5f 44 69 73 74 69 6e 63  ags & SF_Distinc
1530: 74 29 20 3f 20 22 20 44 49 53 54 49 4e 43 54 22  t) ? " DISTINCT"
1540: 20 3a 20 22 22 29 2c 0a 20 20 20 20 20 20 20 20   : ""),.        
1550: 28 28 70 2d 3e 73 65 6c 46 6c 61 67 73 20 26 20  ((p->selFlags & 
1560: 53 46 5f 41 67 67 72 65 67 61 74 65 29 20 3f 20  SF_Aggregate) ? 
1570: 22 20 61 67 67 5f 66 6c 61 67 22 20 3a 20 22 22  " agg_flag" : ""
1580: 29 2c 0a 20 20 20 20 20 20 20 20 70 2d 3e 73 65  ),.        p->se
1590: 6c 49 64 2c 20 70 2c 20 70 2d 3e 73 65 6c 46 6c  lId, p, p->selFl
15a0: 61 67 73 2c 0a 20 20 20 20 20 20 20 20 28 69 6e  ags,.        (in
15b0: 74 29 70 2d 3e 6e 53 65 6c 65 63 74 52 6f 77 0a  t)p->nSelectRow.
15c0: 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a 20        );.    }. 
15d0: 20 20 20 69 66 28 20 63 6e 74 2b 2b 20 29 20 73     if( cnt++ ) s
15e0: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f  qlite3TreeViewPo
15f0: 70 28 70 56 69 65 77 29 3b 0a 20 20 20 20 69 66  p(pView);.    if
1600: 28 20 70 2d 3e 70 50 72 69 6f 72 20 29 7b 0a 20  ( p->pPrior ){. 
1610: 20 20 20 20 20 6e 20 3d 20 31 30 30 30 3b 0a 20       n = 1000;. 
1620: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1630: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28  n = 0;.      if(
1640: 20 70 2d 3e 70 53 72 63 20 26 26 20 70 2d 3e 70   p->pSrc && p->p
1650: 53 72 63 2d 3e 6e 53 72 63 20 29 20 6e 2b 2b 3b  Src->nSrc ) n++;
1660: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 57  .      if( p->pW
1670: 68 65 72 65 20 29 20 6e 2b 2b 3b 0a 20 20 20 20  here ) n++;.    
1680: 20 20 69 66 28 20 70 2d 3e 70 47 72 6f 75 70 42    if( p->pGroupB
1690: 79 20 29 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 69  y ) n++;.      i
16a0: 66 28 20 70 2d 3e 70 48 61 76 69 6e 67 20 29 20  f( p->pHaving ) 
16b0: 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  n++;.      if( p
16c0: 2d 3e 70 4f 72 64 65 72 42 79 20 29 20 6e 2b 2b  ->pOrderBy ) n++
16d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
16e0: 4c 69 6d 69 74 20 29 20 6e 2b 2b 3b 0a 23 69 66  Limit ) n++;.#if
16f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1700: 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20  _WINDOWFUNC.    
1710: 20 20 69 66 28 20 70 2d 3e 70 57 69 6e 20 29 20    if( p->pWin ) 
1720: 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  n++;.      if( p
1730: 2d 3e 70 57 69 6e 44 65 66 6e 20 29 20 6e 2b 2b  ->pWinDefn ) n++
1740: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20  ;.#endif.    }. 
1750: 20 20 20 69 66 28 20 70 2d 3e 70 45 4c 69 73 74     if( p->pEList
1760: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1770: 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
1780: 74 28 70 56 69 65 77 2c 20 70 2d 3e 70 45 4c 69  t(pView, p->pELi
1790: 73 74 2c 20 6e 3e 30 2c 20 22 72 65 73 75 6c 74  st, n>0, "result
17a0: 2d 73 65 74 22 29 3b 0a 20 20 20 20 7d 0a 20 20  -set");.    }.  
17b0: 20 20 6e 2d 2d 3b 0a 23 69 66 6e 64 65 66 20 53    n--;.#ifndef S
17c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
17d0: 57 46 55 4e 43 0a 20 20 20 20 69 66 28 20 70 2d  WFUNC.    if( p-
17e0: 3e 70 57 69 6e 20 29 7b 0a 20 20 20 20 20 20 57  >pWin ){.      W
17f0: 69 6e 64 6f 77 20 2a 70 58 3b 0a 20 20 20 20 20  indow *pX;.     
1800: 20 70 56 69 65 77 20 3d 20 73 71 6c 69 74 65 33   pView = sqlite3
1810: 54 72 65 65 56 69 65 77 50 75 73 68 28 70 56 69  TreeViewPush(pVi
1820: 65 77 2c 20 28 6e 2d 2d 29 3e 30 29 3b 0a 20 20  ew, (n--)>0);.  
1830: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
1840: 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22  iewLine(pView, "
1850: 77 69 6e 64 6f 77 2d 66 75 6e 63 74 69 6f 6e 73  window-functions
1860: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 58  ");.      for(pX
1870: 3d 70 2d 3e 70 57 69 6e 3b 20 70 58 3b 20 70 58  =p->pWin; pX; pX
1880: 3d 70 58 2d 3e 70 4e 65 78 74 57 69 6e 29 7b 0a  =pX->pNextWin){.
1890: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
18a0: 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28 70  reeViewWinFunc(p
18b0: 56 69 65 77 2c 20 70 58 2c 20 70 58 2d 3e 70 4e  View, pX, pX->pN
18c0: 65 78 74 57 69 6e 21 3d 30 29 3b 0a 20 20 20 20  extWin!=0);.    
18d0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
18e0: 33 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69  3TreeViewPop(pVi
18f0: 65 77 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ew);.    }.#endi
1900: 66 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 53 72  f.    if( p->pSr
1910: 63 20 26 26 20 70 2d 3e 70 53 72 63 2d 3e 6e 53  c && p->pSrc->nS
1920: 72 63 20 29 7b 0a 20 20 20 20 20 20 70 56 69 65  rc ){.      pVie
1930: 77 20 3d 20 73 71 6c 69 74 65 33 54 72 65 65 56  w = sqlite3TreeV
1940: 69 65 77 50 75 73 68 28 70 56 69 65 77 2c 20 28  iewPush(pView, (
1950: 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20 20 20 73  n--)>0);.      s
1960: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69  qlite3TreeViewLi
1970: 6e 65 28 70 56 69 65 77 2c 20 22 46 52 4f 4d 22  ne(pView, "FROM"
1980: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1990: 54 72 65 65 56 69 65 77 53 72 63 4c 69 73 74 28  TreeViewSrcList(
19a0: 70 56 69 65 77 2c 20 70 2d 3e 70 53 72 63 29 3b  pView, p->pSrc);
19b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
19c0: 65 65 56 69 65 77 50 6f 70 28 70 56 69 65 77 29  eeViewPop(pView)
19d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19e0: 70 2d 3e 70 57 68 65 72 65 20 29 7b 0a 20 20 20  p->pWhere ){.   
19f0: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
1a00: 65 77 49 74 65 6d 28 70 56 69 65 77 2c 20 22 57  ewItem(pView, "W
1a10: 48 45 52 45 22 2c 20 28 6e 2d 2d 29 3e 30 29 3b  HERE", (n--)>0);
1a20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
1a30: 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65 77  eeViewExpr(pView
1a40: 2c 20 70 2d 3e 70 57 68 65 72 65 2c 20 30 29 3b  , p->pWhere, 0);
1a50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
1a60: 65 65 56 69 65 77 50 6f 70 28 70 56 69 65 77 29  eeViewPop(pView)
1a70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1a80: 70 2d 3e 70 47 72 6f 75 70 42 79 20 29 7b 0a 20  p->pGroupBy ){. 
1a90: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
1aa0: 56 69 65 77 45 78 70 72 4c 69 73 74 28 70 56 69  ViewExprList(pVi
1ab0: 65 77 2c 20 70 2d 3e 70 47 72 6f 75 70 42 79 2c  ew, p->pGroupBy,
1ac0: 20 28 6e 2d 2d 29 3e 30 2c 20 22 47 52 4f 55 50   (n--)>0, "GROUP
1ad0: 42 59 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  BY");.    }.    
1ae0: 69 66 28 20 70 2d 3e 70 48 61 76 69 6e 67 20 29  if( p->pHaving )
1af0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  {.      sqlite3T
1b00: 72 65 65 56 69 65 77 49 74 65 6d 28 70 56 69 65  reeViewItem(pVie
1b10: 77 2c 20 22 48 41 56 49 4e 47 22 2c 20 28 6e 2d  w, "HAVING", (n-
1b20: 2d 29 3e 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  -)>0);.      sql
1b30: 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
1b40: 28 70 56 69 65 77 2c 20 70 2d 3e 70 48 61 76 69  (pView, p->pHavi
1b50: 6e 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ng, 0);.      sq
1b60: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70  lite3TreeViewPop
1b70: 28 70 56 69 65 77 29 3b 0a 20 20 20 20 7d 0a 23  (pView);.    }.#
1b80: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1b90: 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
1ba0: 20 20 69 66 28 20 70 2d 3e 70 57 69 6e 44 65 66    if( p->pWinDef
1bb0: 6e 20 29 7b 0a 20 20 20 20 20 20 57 69 6e 64 6f  n ){.      Windo
1bc0: 77 20 2a 70 58 3b 0a 20 20 20 20 20 20 73 71 6c  w *pX;.      sql
1bd0: 69 74 65 33 54 72 65 65 56 69 65 77 49 74 65 6d  ite3TreeViewItem
1be0: 28 70 56 69 65 77 2c 20 22 57 49 4e 44 4f 57 22  (pView, "WINDOW"
1bf0: 2c 20 28 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20  , (n--)>0);.    
1c00: 20 20 66 6f 72 28 70 58 3d 70 2d 3e 70 57 69 6e    for(pX=p->pWin
1c10: 44 65 66 6e 3b 20 70 58 3b 20 70 58 3d 70 58 2d  Defn; pX; pX=pX-
1c20: 3e 70 4e 65 78 74 57 69 6e 29 7b 0a 20 20 20 20  >pNextWin){.    
1c30: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
1c40: 69 65 77 57 69 6e 64 6f 77 28 70 56 69 65 77 2c  iewWindow(pView,
1c50: 20 70 58 2c 20 70 58 2d 3e 70 4e 65 78 74 57 69   pX, pX->pNextWi
1c60: 6e 21 3d 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n!=0);.      }. 
1c70: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
1c80: 56 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a  ViewPop(pView);.
1c90: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
1ca0: 20 69 66 28 20 70 2d 3e 70 4f 72 64 65 72 42 79   if( p->pOrderBy
1cb0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1cc0: 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
1cd0: 74 28 70 56 69 65 77 2c 20 70 2d 3e 70 4f 72 64  t(pView, p->pOrd
1ce0: 65 72 42 79 2c 20 28 6e 2d 2d 29 3e 30 2c 20 22  erBy, (n--)>0, "
1cf0: 4f 52 44 45 52 42 59 22 29 3b 0a 20 20 20 20 7d  ORDERBY");.    }
1d00: 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 4c 69 6d  .    if( p->pLim
1d10: 69 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  it ){.      sqli
1d20: 74 65 33 54 72 65 65 56 69 65 77 49 74 65 6d 28  te3TreeViewItem(
1d30: 70 56 69 65 77 2c 20 22 4c 49 4d 49 54 22 2c 20  pView, "LIMIT", 
1d40: 28 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20 20 20  (n--)>0);.      
1d50: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
1d60: 78 70 72 28 70 56 69 65 77 2c 20 70 2d 3e 70 4c  xpr(pView, p->pL
1d70: 69 6d 69 74 2d 3e 70 4c 65 66 74 2c 20 70 2d 3e  imit->pLeft, p->
1d80: 70 4c 69 6d 69 74 2d 3e 70 52 69 67 68 74 21 3d  pLimit->pRight!=
1d90: 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  0);.      if( p-
1da0: 3e 70 4c 69 6d 69 74 2d 3e 70 52 69 67 68 74 20  >pLimit->pRight 
1db0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
1dc0: 65 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 70  e3TreeViewItem(p
1dd0: 56 69 65 77 2c 20 22 4f 46 46 53 45 54 22 2c 20  View, "OFFSET", 
1de0: 28 6e 2d 2d 29 3e 30 29 3b 0a 20 20 20 20 20 20  (n--)>0);.      
1df0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
1e00: 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 2d 3e  wExpr(pView, p->
1e10: 70 4c 69 6d 69 74 2d 3e 70 52 69 67 68 74 2c 20  pLimit->pRight, 
1e20: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
1e30: 74 65 33 54 72 65 65 56 69 65 77 50 6f 70 28 70  te3TreeViewPop(p
1e40: 56 69 65 77 29 3b 0a 20 20 20 20 20 20 7d 0a 20  View);.      }. 
1e50: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
1e60: 56 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a  ViewPop(pView);.
1e70: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
1e80: 3e 70 50 72 69 6f 72 20 29 7b 0a 20 20 20 20 20  >pPrior ){.     
1e90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70   const char *zOp
1ea0: 20 3d 20 22 55 4e 49 4f 4e 22 3b 0a 20 20 20 20   = "UNION";.    
1eb0: 20 20 73 77 69 74 63 68 28 20 70 2d 3e 6f 70 20    switch( p->op 
1ec0: 29 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ){.        case 
1ed0: 54 4b 5f 41 4c 4c 3a 20 20 20 20 20 20 20 20 20  TK_ALL:         
1ee0: 7a 4f 70 20 3d 20 22 55 4e 49 4f 4e 20 41 4c 4c  zOp = "UNION ALL
1ef0: 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  ";  break;.     
1f00: 20 20 20 63 61 73 65 20 54 4b 5f 49 4e 54 45 52     case TK_INTER
1f10: 53 45 43 54 3a 20 20 20 7a 4f 70 20 3d 20 22 49  SECT:   zOp = "I
1f20: 4e 54 45 52 53 45 43 54 22 3b 20 20 62 72 65 61  NTERSECT";  brea
1f30: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
1f40: 54 4b 5f 45 58 43 45 50 54 3a 20 20 20 20 20 20  TK_EXCEPT:      
1f50: 7a 4f 70 20 3d 20 22 45 58 43 45 50 54 22 3b 20  zOp = "EXCEPT"; 
1f60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1f70: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
1f80: 54 72 65 65 56 69 65 77 49 74 65 6d 28 70 56 69  TreeViewItem(pVi
1f90: 65 77 2c 20 7a 4f 70 2c 20 31 29 3b 0a 20 20 20  ew, zOp, 1);.   
1fa0: 20 7d 0a 20 20 20 20 70 20 3d 20 70 2d 3e 70 50   }.    p = p->pP
1fb0: 72 69 6f 72 3b 0a 20 20 7d 77 68 69 6c 65 28 20  rior;.  }while( 
1fc0: 70 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  p!=0 );.  sqlite
1fd0: 33 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69  3TreeViewPop(pVi
1fe0: 65 77 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  ew);.}..#ifndef 
1ff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
2000: 4f 57 46 55 4e 43 0a 2f 2a 0a 2a 2a 20 47 65 6e  OWFUNC./*.** Gen
2010: 65 72 61 74 65 20 61 20 64 65 73 63 72 69 70 74  erate a descript
2020: 69 6f 6e 20 6f 66 20 73 74 61 72 74 69 6e 67 20  ion of starting 
2030: 6f 72 20 73 74 6f 70 70 69 6e 67 20 62 6f 75 6e  or stopping boun
2040: 64 73 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ds.*/.void sqlit
2050: 65 33 54 72 65 65 56 69 65 77 42 6f 75 6e 64 28  e3TreeViewBound(
2060: 0a 20 20 54 72 65 65 56 69 65 77 20 2a 70 56 69  .  TreeView *pVi
2070: 65 77 2c 20 20 20 20 20 20 20 20 2f 2a 20 56 69  ew,        /* Vi
2080: 65 77 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ew context */.  
2090: 75 38 20 65 42 6f 75 6e 64 2c 20 20 20 20 20 20  u8 eBound,      
20a0: 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55          /* UNBOU
20b0: 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50  NDED, CURRENT, P
20c0: 52 45 43 45 44 49 4e 47 2c 20 46 4f 4c 4c 4f 57  RECEDING, FOLLOW
20d0: 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ING */.  Expr *p
20e0: 45 78 70 72 2c 20 20 20 20 20 20 20 20 20 20 20  Expr,           
20f0: 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 50 52   /* Value for PR
2100: 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f  ECEDING or FOLLO
2110: 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 6d 6f 72  WING */.  u8 mor
2120: 65 54 6f 46 6f 6c 6c 6f 77 20 20 20 20 20 20 20  eToFollow       
2130: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6d 6f 72    /* True if mor
2140: 65 20 74 6f 20 66 6f 6c 6c 6f 77 20 2a 2f 0a 29  e to follow */.)
2150: 7b 0a 20 20 73 77 69 74 63 68 28 20 65 42 6f 75  {.  switch( eBou
2160: 6e 64 20 29 7b 0a 20 20 20 20 63 61 73 65 20 54  nd ){.    case T
2170: 4b 5f 55 4e 42 4f 55 4e 44 45 44 3a 20 7b 0a 20  K_UNBOUNDED: {. 
2180: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
2190: 56 69 65 77 49 74 65 6d 28 70 56 69 65 77 2c 20  ViewItem(pView, 
21a0: 22 55 4e 42 4f 55 4e 44 45 44 22 2c 20 6d 6f 72  "UNBOUNDED", mor
21b0: 65 54 6f 46 6f 6c 6c 6f 77 29 3b 0a 20 20 20 20  eToFollow);.    
21c0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
21d0: 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20 20 20  wPop(pView);.   
21e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
21f0: 20 20 20 20 63 61 73 65 20 54 4b 5f 43 55 52 52      case TK_CURR
2200: 45 4e 54 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  ENT: {.      sql
2210: 69 74 65 33 54 72 65 65 56 69 65 77 49 74 65 6d  ite3TreeViewItem
2220: 28 70 56 69 65 77 2c 20 22 43 55 52 52 45 4e 54  (pView, "CURRENT
2230: 22 2c 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29  ", moreToFollow)
2240: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
2250: 72 65 65 56 69 65 77 50 6f 70 28 70 56 69 65 77  reeViewPop(pView
2260: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
2270: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 54      }.    case T
2280: 4b 5f 50 52 45 43 45 44 49 4e 47 3a 20 7b 0a 20  K_PRECEDING: {. 
2290: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
22a0: 56 69 65 77 49 74 65 6d 28 70 56 69 65 77 2c 20  ViewItem(pView, 
22b0: 22 50 52 45 43 45 44 49 4e 47 22 2c 20 6d 6f 72  "PRECEDING", mor
22c0: 65 54 6f 46 6f 6c 6c 6f 77 29 3b 0a 20 20 20 20  eToFollow);.    
22d0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
22e0: 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 45 78  wExpr(pView, pEx
22f0: 70 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  pr, 0);.      sq
2300: 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70  lite3TreeViewPop
2310: 28 70 56 69 65 77 29 3b 0a 20 20 20 20 20 20 62  (pView);.      b
2320: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
2330: 63 61 73 65 20 54 4b 5f 46 4f 4c 4c 4f 57 49 4e  case TK_FOLLOWIN
2340: 47 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  G: {.      sqlit
2350: 65 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 70  e3TreeViewItem(p
2360: 56 69 65 77 2c 20 22 46 4f 4c 4c 4f 57 49 4e 47  View, "FOLLOWING
2370: 22 2c 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29  ", moreToFollow)
2380: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
2390: 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65  reeViewExpr(pVie
23a0: 77 2c 20 70 45 78 70 72 2c 20 30 29 3b 0a 20 20  w, pExpr, 0);.  
23b0: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
23c0: 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20  iewPop(pView);. 
23d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
23e0: 7d 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f  }.  }.}.#endif /
23f0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  * SQLITE_OMIT_WI
2400: 4e 44 4f 57 46 55 4e 43 20 2a 2f 0a 0a 23 69 66  NDOWFUNC */..#if
2410: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2420: 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 2f 2a 0a 2a  _WINDOWFUNC./*.*
2430: 2a 20 47 65 6e 65 72 61 74 65 20 61 20 68 75 6d  * Generate a hum
2440: 61 6e 2d 72 65 61 64 61 62 6c 65 20 65 78 70 6c  an-readable expl
2450: 61 6e 61 74 69 6f 6e 20 66 6f 72 20 61 20 57 69  anation for a Wi
2460: 6e 64 6f 77 20 6f 62 6a 65 63 74 0a 2a 2f 0a 76  ndow object.*/.v
2470: 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
2480: 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65 56 69  iewWindow(TreeVi
2490: 65 77 20 2a 70 56 69 65 77 2c 20 63 6f 6e 73 74  ew *pView, const
24a0: 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 2c 20 75   Window *pWin, u
24b0: 38 20 6d 6f 72 65 29 7b 0a 20 20 69 6e 74 20 6e  8 more){.  int n
24c0: 45 6c 65 6d 65 6e 74 20 3d 20 30 3b 0a 20 20 69  Element = 0;.  i
24d0: 66 28 20 70 57 69 6e 2d 3e 70 46 69 6c 74 65 72  f( pWin->pFilter
24e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 54   ){.    sqlite3T
24f0: 72 65 65 56 69 65 77 49 74 65 6d 28 70 56 69 65  reeViewItem(pVie
2500: 77 2c 20 22 46 49 4c 54 45 52 22 2c 20 31 29 3b  w, "FILTER", 1);
2510: 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65  .    sqlite3Tree
2520: 56 69 65 77 45 78 70 72 28 70 56 69 65 77 2c 20  ViewExpr(pView, 
2530: 70 57 69 6e 2d 3e 70 46 69 6c 74 65 72 2c 20 30  pWin->pFilter, 0
2540: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  );.    sqlite3Tr
2550: 65 65 56 69 65 77 50 6f 70 28 70 56 69 65 77 29  eeViewPop(pView)
2560: 3b 0a 20 20 7d 0a 20 20 70 56 69 65 77 20 3d 20  ;.  }.  pView = 
2570: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50  sqlite3TreeViewP
2580: 75 73 68 28 70 56 69 65 77 2c 20 6d 6f 72 65 29  ush(pView, more)
2590: 3b 0a 20 20 69 66 28 20 70 57 69 6e 2d 3e 7a 4e  ;.  if( pWin->zN
25a0: 61 6d 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ame ){.    sqlit
25b0: 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70  e3TreeViewLine(p
25c0: 56 69 65 77 2c 20 22 4f 56 45 52 20 25 73 20 28  View, "OVER %s (
25d0: 25 70 29 22 2c 20 70 57 69 6e 2d 3e 7a 4e 61 6d  %p)", pWin->zNam
25e0: 65 2c 20 70 57 69 6e 29 3b 0a 20 20 7d 65 6c 73  e, pWin);.  }els
25f0: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  e{.    sqlite3Tr
2600: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
2610: 2c 20 22 4f 56 45 52 20 28 25 70 29 22 2c 20 70  , "OVER (%p)", p
2620: 57 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Win);.  }.  if( 
2630: 70 57 69 6e 2d 3e 7a 42 61 73 65 20 29 20 20 20  pWin->zBase )   
2640: 20 6e 45 6c 65 6d 65 6e 74 2b 2b 3b 0a 20 20 69   nElement++;.  i
2650: 66 28 20 70 57 69 6e 2d 3e 70 4f 72 64 65 72 42  f( pWin->pOrderB
2660: 79 20 29 20 6e 45 6c 65 6d 65 6e 74 2b 2b 3b 0a  y ) nElement++;.
2670: 20 20 69 66 28 20 70 57 69 6e 2d 3e 65 46 72 6d    if( pWin->eFrm
2680: 54 79 70 65 20 29 20 6e 45 6c 65 6d 65 6e 74 2b  Type ) nElement+
2690: 2b 3b 0a 20 20 69 66 28 20 70 57 69 6e 2d 3e 65  +;.  if( pWin->e
26a0: 45 78 63 6c 75 64 65 20 29 20 6e 45 6c 65 6d 65  Exclude ) nEleme
26b0: 6e 74 2b 2b 3b 0a 20 20 69 66 28 20 70 57 69 6e  nt++;.  if( pWin
26c0: 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20 20 20 73  ->zBase ){.    s
26d0: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75  qlite3TreeViewPu
26e0: 73 68 28 70 56 69 65 77 2c 20 28 2d 2d 6e 45 6c  sh(pView, (--nEl
26f0: 65 6d 65 6e 74 29 3e 30 29 3b 0a 20 20 20 20 73  ement)>0);.    s
2700: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69  qlite3TreeViewLi
2710: 6e 65 28 70 56 69 65 77 2c 20 22 77 69 6e 64 6f  ne(pView, "windo
2720: 77 3a 20 25 73 22 2c 20 70 57 69 6e 2d 3e 7a 42  w: %s", pWin->zB
2730: 61 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ase);.    sqlite
2740: 33 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69  3TreeViewPop(pVi
2750: 65 77 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  ew);.  }.  if( p
2760: 57 69 6e 2d 3e 70 50 61 72 74 69 74 69 6f 6e 20  Win->pPartition 
2770: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  ){.    sqlite3Tr
2780: 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 70  eeViewExprList(p
2790: 56 69 65 77 2c 20 70 57 69 6e 2d 3e 70 50 61 72  View, pWin->pPar
27a0: 74 69 74 69 6f 6e 2c 20 6e 45 6c 65 6d 65 6e 74  tition, nElement
27b0: 3e 30 2c 22 50 41 52 54 49 54 49 4f 4e 2d 42 59  >0,"PARTITION-BY
27c0: 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 57  ");.  }.  if( pW
27d0: 69 6e 2d 3e 70 4f 72 64 65 72 42 79 20 29 7b 0a  in->pOrderBy ){.
27e0: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
27f0: 69 65 77 45 78 70 72 4c 69 73 74 28 70 56 69 65  iewExprList(pVie
2800: 77 2c 20 70 57 69 6e 2d 3e 70 4f 72 64 65 72 42  w, pWin->pOrderB
2810: 79 2c 20 28 2d 2d 6e 45 6c 65 6d 65 6e 74 29 3e  y, (--nElement)>
2820: 30 2c 20 22 4f 52 44 45 52 2d 42 59 22 29 3b 0a  0, "ORDER-BY");.
2830: 20 20 7d 0a 20 20 69 66 28 20 70 57 69 6e 2d 3e    }.  if( pWin->
2840: 65 46 72 6d 54 79 70 65 20 29 7b 0a 20 20 20 20  eFrmType ){.    
2850: 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20  char zBuf[30];. 
2860: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2870: 46 72 6d 54 79 70 65 20 3d 20 22 52 4f 57 53 22  FrmType = "ROWS"
2880: 3b 0a 20 20 20 20 69 66 28 20 70 57 69 6e 2d 3e  ;.    if( pWin->
2890: 65 46 72 6d 54 79 70 65 3d 3d 54 4b 5f 52 41 4e  eFrmType==TK_RAN
28a0: 47 45 20 29 20 7a 46 72 6d 54 79 70 65 20 3d 20  GE ) zFrmType = 
28b0: 22 52 41 4e 47 45 22 3b 0a 20 20 20 20 69 66 28  "RANGE";.    if(
28c0: 20 70 57 69 6e 2d 3e 65 46 72 6d 54 79 70 65 3d   pWin->eFrmType=
28d0: 3d 54 4b 5f 47 52 4f 55 50 53 20 29 20 7a 46 72  =TK_GROUPS ) zFr
28e0: 6d 54 79 70 65 20 3d 20 22 47 52 4f 55 50 53 22  mType = "GROUPS"
28f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2900: 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42  printf(sizeof(zB
2910: 75 66 29 2c 7a 42 75 66 2c 22 25 73 25 73 22 2c  uf),zBuf,"%s%s",
2920: 7a 46 72 6d 54 79 70 65 2c 0a 20 20 20 20 20 20  zFrmType,.      
2930: 20 20 70 57 69 6e 2d 3e 62 49 6d 70 6c 69 63 69    pWin->bImplici
2940: 74 46 72 61 6d 65 20 3f 20 22 20 28 69 6d 70 6c  tFrame ? " (impl
2950: 69 65 64 29 22 20 3a 20 22 22 29 3b 0a 20 20 20  ied)" : "");.   
2960: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
2970: 49 74 65 6d 28 70 56 69 65 77 2c 20 7a 42 75 66  Item(pView, zBuf
2980: 2c 20 28 2d 2d 6e 45 6c 65 6d 65 6e 74 29 3e 30  , (--nElement)>0
2990: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  );.    sqlite3Tr
29a0: 65 65 56 69 65 77 42 6f 75 6e 64 28 70 56 69 65  eeViewBound(pVie
29b0: 77 2c 20 70 57 69 6e 2d 3e 65 53 74 61 72 74 2c  w, pWin->eStart,
29c0: 20 70 57 69 6e 2d 3e 70 53 74 61 72 74 2c 20 31   pWin->pStart, 1
29d0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  );.    sqlite3Tr
29e0: 65 65 56 69 65 77 42 6f 75 6e 64 28 70 56 69 65  eeViewBound(pVie
29f0: 77 2c 20 70 57 69 6e 2d 3e 65 45 6e 64 2c 20 70  w, pWin->eEnd, p
2a00: 57 69 6e 2d 3e 70 45 6e 64 2c 20 30 29 3b 0a 20  Win->pEnd, 0);. 
2a10: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
2a20: 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a 20 20  ewPop(pView);.  
2a30: 7d 0a 20 20 69 66 28 20 70 57 69 6e 2d 3e 65 45  }.  if( pWin->eE
2a40: 78 63 6c 75 64 65 20 29 7b 0a 20 20 20 20 63 68  xclude ){.    ch
2a50: 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 20  ar zBuf[30];.   
2a60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78   const char *zEx
2a70: 63 6c 75 64 65 3b 0a 20 20 20 20 73 77 69 74 63  clude;.    switc
2a80: 68 28 20 70 57 69 6e 2d 3e 65 45 78 63 6c 75 64  h( pWin->eExclud
2a90: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
2aa0: 54 4b 5f 4e 4f 3a 20 20 20 20 20 20 7a 45 78 63  TK_NO:      zExc
2ab0: 6c 75 64 65 20 3d 20 22 4e 4f 20 4f 54 48 45 52  lude = "NO OTHER
2ac0: 53 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  S";   break;.   
2ad0: 20 20 20 63 61 73 65 20 54 4b 5f 43 55 52 52 45     case TK_CURRE
2ae0: 4e 54 3a 20 7a 45 78 63 6c 75 64 65 20 3d 20 22  NT: zExclude = "
2af0: 43 55 52 52 45 4e 54 20 52 4f 57 22 3b 20 62 72  CURRENT ROW"; br
2b00: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
2b10: 54 4b 5f 47 52 4f 55 50 3a 20 20 20 7a 45 78 63  TK_GROUP:   zExc
2b20: 6c 75 64 65 20 3d 20 22 47 52 4f 55 50 22 3b 20  lude = "GROUP"; 
2b30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2b40: 20 20 20 63 61 73 65 20 54 4b 5f 54 49 45 53 3a     case TK_TIES:
2b50: 20 20 20 20 7a 45 78 63 6c 75 64 65 20 3d 20 22      zExclude = "
2b60: 54 49 45 53 22 3b 20 20 20 20 20 20 20 20 62 72  TIES";        br
2b70: 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75  eak;.      defau
2b80: 6c 74 3a 0a 20 20 20 20 20 20 20 20 73 71 6c 69  lt:.        sqli
2b90: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
2ba0: 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c 22  eof(zBuf),zBuf,"
2bb0: 69 6e 76 61 6c 69 64 28 25 64 29 22 2c 20 70 57  invalid(%d)", pW
2bc0: 69 6e 2d 3e 65 45 78 63 6c 75 64 65 29 3b 0a 20  in->eExclude);. 
2bd0: 20 20 20 20 20 20 20 7a 45 78 63 6c 75 64 65 20         zExclude 
2be0: 3d 20 7a 42 75 66 3b 0a 20 20 20 20 20 20 20 20  = zBuf;.        
2bf0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
2c00: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
2c10: 50 75 73 68 28 70 56 69 65 77 2c 20 30 29 3b 0a  Push(pView, 0);.
2c20: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
2c30: 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22  iewLine(pView, "
2c40: 45 58 43 4c 55 44 45 20 25 73 22 2c 20 7a 45 78  EXCLUDE %s", zEx
2c50: 63 6c 75 64 65 29 3b 0a 20 20 20 20 73 71 6c 69  clude);.    sqli
2c60: 74 65 33 54 72 65 65 56 69 65 77 50 6f 70 28 70  te3TreeViewPop(p
2c70: 56 69 65 77 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  View);.  }.  sql
2c80: 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70 28  ite3TreeViewPop(
2c90: 70 56 69 65 77 29 3b 0a 7d 0a 23 65 6e 64 69 66  pView);.}.#endif
2ca0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2cb0: 57 49 4e 44 4f 57 46 55 4e 43 20 2a 2f 0a 0a 23  WINDOWFUNC */..#
2cc0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cd0: 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 2f 2a  IT_WINDOWFUNC./*
2ce0: 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20 68  .** Generate a h
2cf0: 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 65 78  uman-readable ex
2d00: 70 6c 61 6e 61 74 69 6f 6e 20 66 6f 72 20 61 20  planation for a 
2d10: 57 69 6e 64 6f 77 20 46 75 6e 63 74 69 6f 6e 20  Window Function 
2d20: 6f 62 6a 65 63 74 0a 2a 2f 0a 76 6f 69 64 20 73  object.*/.void s
2d30: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
2d40: 6e 46 75 6e 63 28 54 72 65 65 56 69 65 77 20 2a  nFunc(TreeView *
2d50: 70 56 69 65 77 2c 20 63 6f 6e 73 74 20 57 69 6e  pView, const Win
2d60: 64 6f 77 20 2a 70 57 69 6e 2c 20 75 38 20 6d 6f  dow *pWin, u8 mo
2d70: 72 65 29 7b 0a 20 20 70 56 69 65 77 20 3d 20 73  re){.  pView = s
2d80: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75  qlite3TreeViewPu
2d90: 73 68 28 70 56 69 65 77 2c 20 6d 6f 72 65 29 3b  sh(pView, more);
2da0: 0a 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  .  sqlite3TreeVi
2db0: 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 57  ewLine(pView, "W
2dc0: 49 4e 46 55 4e 43 20 25 73 28 25 64 29 22 2c 0a  INFUNC %s(%d)",.
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 20 20 20 20 20 20 20 70 57 69 6e 2d 3e 70 46 75         pWin->pFu
2df0: 6e 63 2d 3e 7a 4e 61 6d 65 2c 20 70 57 69 6e 2d  nc->zName, pWin-
2e00: 3e 70 46 75 6e 63 2d 3e 6e 41 72 67 29 3b 0a 20  >pFunc->nArg);. 
2e10: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
2e20: 57 69 6e 64 6f 77 28 70 56 69 65 77 2c 20 70 57  Window(pView, pW
2e30: 69 6e 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  in, 0);.  sqlite
2e40: 33 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69  3TreeViewPop(pVi
2e50: 65 77 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  ew);.}.#endif /*
2e60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
2e70: 44 4f 57 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 0a 2a  DOWFUNC */../*.*
2e80: 2a 20 47 65 6e 65 72 61 74 65 20 61 20 68 75 6d  * Generate a hum
2e90: 61 6e 2d 72 65 61 64 61 62 6c 65 20 65 78 70 6c  an-readable expl
2ea0: 61 6e 61 74 69 6f 6e 20 6f 66 20 61 6e 20 65 78  anation of an ex
2eb0: 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a 2a  pression tree..*
2ec0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72  /.void sqlite3Tr
2ed0: 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
2ee0: 69 65 77 20 2a 70 56 69 65 77 2c 20 63 6f 6e 73  iew *pView, cons
2ef0: 74 20 45 78 70 72 20 2a 70 45 78 70 72 2c 20 75  t Expr *pExpr, u
2f00: 38 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29 7b  8 moreToFollow){
2f10: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2f20: 42 69 6e 4f 70 20 3d 20 30 3b 20 20 20 2f 2a 20  BinOp = 0;   /* 
2f30: 42 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  Binary operator 
2f40: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
2f50: 2a 7a 55 6e 69 4f 70 20 3d 20 30 3b 20 20 20 2f  *zUniOp = 0;   /
2f60: 2a 20 55 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  * Unary operator
2f70: 20 2a 2f 0a 20 20 63 68 61 72 20 7a 46 6c 67 73   */.  char zFlgs
2f80: 5b 36 30 5d 3b 0a 20 20 70 56 69 65 77 20 3d 20  [60];.  pView = 
2f90: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50  sqlite3TreeViewP
2fa0: 75 73 68 28 70 56 69 65 77 2c 20 6d 6f 72 65 54  ush(pView, moreT
2fb0: 6f 46 6f 6c 6c 6f 77 29 3b 0a 20 20 69 66 28 20  oFollow);.  if( 
2fc0: 70 45 78 70 72 3d 3d 30 20 29 7b 0a 20 20 20 20  pExpr==0 ){.    
2fd0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
2fe0: 69 6e 65 28 70 56 69 65 77 2c 20 22 6e 69 6c 22  ine(pView, "nil"
2ff0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  );.    sqlite3Tr
3000: 65 65 56 69 65 77 50 6f 70 28 70 56 69 65 77 29  eeViewPop(pView)
3010: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
3020: 7d 0a 20 20 69 66 28 20 70 45 78 70 72 2d 3e 66  }.  if( pExpr->f
3030: 6c 61 67 73 20 7c 7c 20 70 45 78 70 72 2d 3e 61  lags || pExpr->a
3040: 66 66 45 78 70 72 20 29 7b 0a 20 20 20 20 69 66  ffExpr ){.    if
3050: 28 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  ( ExprHasPropert
3060: 79 28 70 45 78 70 72 2c 20 45 50 5f 46 72 6f 6d  y(pExpr, EP_From
3070: 4a 6f 69 6e 29 20 29 7b 0a 20 20 20 20 20 20 73  Join) ){.      s
3080: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3090: 73 69 7a 65 6f 66 28 7a 46 6c 67 73 29 2c 7a 46  sizeof(zFlgs),zF
30a0: 6c 67 73 2c 22 20 20 66 67 2e 61 66 3d 25 78 2e  lgs,"  fg.af=%x.
30b0: 25 63 20 69 52 4a 54 3d 25 64 22 2c 0a 20 20 20  %c iRJT=%d",.   
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 20 20 20 70 45 78 70 72 2d 3e 66 6c 61 67 73      pExpr->flags
30e0: 2c 20 70 45 78 70 72 2d 3e 61 66 66 45 78 70 72  , pExpr->affExpr
30f0: 20 3f 20 70 45 78 70 72 2d 3e 61 66 66 45 78 70   ? pExpr->affExp
3100: 72 20 3a 20 27 6e 27 2c 0a 20 20 20 20 20 20 20  r : 'n',.       
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 70 45 78 70 72 2d 3e 69 52 69 67 68 74 4a 6f 69  pExpr->iRightJoi
3130: 6e 54 61 62 6c 65 29 3b 0a 20 20 20 20 7d 65 6c  nTable);.    }el
3140: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
3150: 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
3160: 66 28 7a 46 6c 67 73 29 2c 7a 46 6c 67 73 2c 22  f(zFlgs),zFlgs,"
3170: 20 20 66 67 2e 61 66 3d 25 78 2e 25 63 22 2c 0a    fg.af=%x.%c",.
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3190: 20 20 20 20 20 20 20 70 45 78 70 72 2d 3e 66 6c         pExpr->fl
31a0: 61 67 73 2c 20 70 45 78 70 72 2d 3e 61 66 66 45  ags, pExpr->affE
31b0: 78 70 72 20 3f 20 70 45 78 70 72 2d 3e 61 66 66  xpr ? pExpr->aff
31c0: 45 78 70 72 20 3a 20 27 6e 27 29 3b 0a 20 20 20  Expr : 'n');.   
31d0: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
31e0: 7a 46 6c 67 73 5b 30 5d 20 3d 20 30 3b 0a 20 20  zFlgs[0] = 0;.  
31f0: 7d 0a 20 20 73 77 69 74 63 68 28 20 70 45 78 70  }.  switch( pExp
3200: 72 2d 3e 6f 70 20 29 7b 0a 20 20 20 20 63 61 73  r->op ){.    cas
3210: 65 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 3a  e TK_AGG_COLUMN:
3220: 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   {.      sqlite3
3230: 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69  TreeViewLine(pVi
3240: 65 77 2c 20 22 41 47 47 7b 25 64 3a 25 64 7d 25  ew, "AGG{%d:%d}%
3250: 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
3260: 70 45 78 70 72 2d 3e 69 54 61 62 6c 65 2c 20 70  pExpr->iTable, p
3270: 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e 2c 20 7a  Expr->iColumn, z
3280: 46 6c 67 73 29 3b 0a 20 20 20 20 20 20 62 72 65  Flgs);.      bre
3290: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
32a0: 73 65 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 7b 0a  se TK_COLUMN: {.
32b0: 20 20 20 20 20 20 69 66 28 20 70 45 78 70 72 2d        if( pExpr-
32c0: 3e 69 54 61 62 6c 65 3c 30 20 29 7b 0a 20 20 20  >iTable<0 ){.   
32d0: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 6f 6e 6c       /* This onl
32e0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 63  y happens when c
32f0: 6f 64 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  oding check cons
3300: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
3310: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
3320: 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 43  ewLine(pView, "C
3330: 4f 4c 55 4d 4e 28 25 64 29 25 73 22 2c 20 70 45  OLUMN(%d)%s", pE
3340: 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e 2c 20 7a 46  xpr->iColumn, zF
3350: 6c 67 73 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  lgs);.      }els
3360: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
3370: 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70  e3TreeViewLine(p
3380: 56 69 65 77 2c 20 22 7b 25 64 3a 25 64 7d 25 73  View, "{%d:%d}%s
3390: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b0: 70 45 78 70 72 2d 3e 69 54 61 62 6c 65 2c 20 70  pExpr->iTable, p
33c0: 45 78 70 72 2d 3e 69 43 6f 6c 75 6d 6e 2c 20 7a  Expr->iColumn, z
33d0: 46 6c 67 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Flgs);.      }. 
33e0: 20 20 20 20 20 69 66 28 20 45 78 70 72 48 61 73       if( ExprHas
33f0: 50 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c 20  Property(pExpr, 
3400: 45 50 5f 46 69 78 65 64 43 6f 6c 29 20 29 7b 0a  EP_FixedCol) ){.
3410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
3420: 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65  reeViewExpr(pVie
3430: 77 2c 20 70 45 78 70 72 2d 3e 70 4c 65 66 74 2c  w, pExpr->pLeft,
3440: 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
3450: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3460: 20 20 20 20 63 61 73 65 20 54 4b 5f 49 4e 54 45      case TK_INTE
3470: 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  GER: {.      if(
3480: 20 70 45 78 70 72 2d 3e 66 6c 61 67 73 20 26 20   pExpr->flags & 
3490: 45 50 5f 49 6e 74 56 61 6c 75 65 20 29 7b 0a 20  EP_IntValue ){. 
34a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72         sqlite3Tr
34b0: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
34c0: 2c 20 22 25 64 22 2c 20 70 45 78 70 72 2d 3e 75  , "%d", pExpr->u
34d0: 2e 69 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  .iValue);.      
34e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
34f0: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69  qlite3TreeViewLi
3500: 6e 65 28 70 56 69 65 77 2c 20 22 25 73 22 2c 20  ne(pView, "%s", 
3510: 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 29  pExpr->u.zToken)
3520: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
3530: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 69 66  break;.    }.#if
3540: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3550: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3560: 20 20 20 20 63 61 73 65 20 54 4b 5f 46 4c 4f 41      case TK_FLOA
3570: 54 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  T: {.      sqlit
3580: 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70  e3TreeViewLine(p
3590: 56 69 65 77 2c 22 25 73 22 2c 20 70 45 78 70 72  View,"%s", pExpr
35a0: 2d 3e 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20  ->u.zToken);.   
35b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
35c0: 23 65 6e 64 69 66 0a 20 20 20 20 63 61 73 65 20  #endif.    case 
35d0: 54 4b 5f 53 54 52 49 4e 47 3a 20 7b 0a 20 20 20  TK_STRING: {.   
35e0: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
35f0: 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 22 25 51  ewLine(pView,"%Q
3600: 22 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b  ", pExpr->u.zTok
3610: 65 6e 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  en);.      break
3620: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
3630: 20 54 4b 5f 4e 55 4c 4c 3a 20 7b 0a 20 20 20 20   TK_NULL: {.    
3640: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
3650: 77 4c 69 6e 65 28 70 56 69 65 77 2c 22 4e 55 4c  wLine(pView,"NUL
3660: 4c 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  L");.      break
3670: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
3680: 20 54 4b 5f 54 52 55 45 46 41 4c 53 45 3a 20 7b   TK_TRUEFALSE: {
3690: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
36a0: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
36b0: 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  ,.         sqlit
36c0: 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65  e3ExprTruthValue
36d0: 28 70 45 78 70 72 29 20 3f 20 22 54 52 55 45 22  (pExpr) ? "TRUE"
36e0: 20 3a 20 22 46 41 4c 53 45 22 29 3b 0a 20 20 20   : "FALSE");.   
36f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3700: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3710: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
3720: 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 42 4c 4f  .    case TK_BLO
3730: 42 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  B: {.      sqlit
3740: 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70  e3TreeViewLine(p
3750: 56 69 65 77 2c 22 25 73 22 2c 20 70 45 78 70 72  View,"%s", pExpr
3760: 2d 3e 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20  ->u.zToken);.   
3770: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3780: 23 65 6e 64 69 66 0a 20 20 20 20 63 61 73 65 20  #endif.    case 
3790: 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 7b 0a 20  TK_VARIABLE: {. 
37a0: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
37b0: 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 22  ViewLine(pView,"
37c0: 56 41 52 49 41 42 4c 45 28 25 73 2c 25 64 29 22  VARIABLE(%s,%d)"
37d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 45 78 70              pExp
37f0: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 2c 20 70 45 78  r->u.zToken, pEx
3800: 70 72 2d 3e 69 43 6f 6c 75 6d 6e 29 3b 0a 20 20  pr->iColumn);.  
3810: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
3820: 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 52 45 47  .    case TK_REG
3830: 49 53 54 45 52 3a 20 7b 0a 20 20 20 20 20 20 73  ISTER: {.      s
3840: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69  qlite3TreeViewLi
3850: 6e 65 28 70 56 69 65 77 2c 22 52 45 47 49 53 54  ne(pView,"REGIST
3860: 45 52 28 25 64 29 22 2c 20 70 45 78 70 72 2d 3e  ER(%d)", pExpr->
3870: 69 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 62  iTable);.      b
3880: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
3890: 63 61 73 65 20 54 4b 5f 49 44 3a 20 7b 0a 20 20  case TK_ID: {.  
38a0: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
38b0: 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 22 49  iewLine(pView,"I
38c0: 44 20 5c 22 25 77 5c 22 22 2c 20 70 45 78 70 72  D \"%w\"", pExpr
38d0: 2d 3e 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20 20  ->u.zToken);.   
38e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
38f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3900: 4d 49 54 5f 43 41 53 54 0a 20 20 20 20 63 61 73  MIT_CAST.    cas
3910: 65 20 54 4b 5f 43 41 53 54 3a 20 7b 0a 20 20 20  e TK_CAST: {.   
3920: 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
3930: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 20 20  s of the form:  
3940: 20 43 41 53 54 28 70 4c 65 66 74 20 41 53 20 74   CAST(pLeft AS t
3950: 6f 6b 65 6e 29 20 2a 2f 0a 20 20 20 20 20 20 73  oken) */.      s
3960: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69  qlite3TreeViewLi
3970: 6e 65 28 70 56 69 65 77 2c 22 43 41 53 54 20 25  ne(pView,"CAST %
3980: 51 22 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f  Q", pExpr->u.zTo
3990: 6b 65 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ken);.      sqli
39a0: 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
39b0: 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 70 4c  pView, pExpr->pL
39c0: 65 66 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 62  eft, 0);.      b
39d0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  reak;.    }.#end
39e0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
39f0: 54 5f 43 41 53 54 20 2a 2f 0a 20 20 20 20 63 61  T_CAST */.    ca
3a00: 73 65 20 54 4b 5f 4c 54 3a 20 20 20 20 20 20 7a  se TK_LT:      z
3a10: 42 69 6e 4f 70 20 3d 20 22 4c 54 22 3b 20 20 20  BinOp = "LT";   
3a20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
3a30: 65 20 54 4b 5f 4c 45 3a 20 20 20 20 20 20 7a 42  e TK_LE:      zB
3a40: 69 6e 4f 70 20 3d 20 22 4c 45 22 3b 20 20 20 20  inOp = "LE";    
3a50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3a60: 20 54 4b 5f 47 54 3a 20 20 20 20 20 20 7a 42 69   TK_GT:      zBi
3a70: 6e 4f 70 20 3d 20 22 47 54 22 3b 20 20 20 20 20  nOp = "GT";     
3a80: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3a90: 54 4b 5f 47 45 3a 20 20 20 20 20 20 7a 42 69 6e  TK_GE:      zBin
3aa0: 4f 70 20 3d 20 22 47 45 22 3b 20 20 20 20 20 62  Op = "GE";     b
3ab0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54  reak;.    case T
3ac0: 4b 5f 4e 45 3a 20 20 20 20 20 20 7a 42 69 6e 4f  K_NE:      zBinO
3ad0: 70 20 3d 20 22 4e 45 22 3b 20 20 20 20 20 62 72  p = "NE";     br
3ae0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b  eak;.    case TK
3af0: 5f 45 51 3a 20 20 20 20 20 20 7a 42 69 6e 4f 70  _EQ:      zBinOp
3b00: 20 3d 20 22 45 51 22 3b 20 20 20 20 20 62 72 65   = "EQ";     bre
3b10: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  ak;.    case TK_
3b20: 49 53 3a 20 20 20 20 20 20 7a 42 69 6e 4f 70 20  IS:      zBinOp 
3b30: 3d 20 22 49 53 22 3b 20 20 20 20 20 62 72 65 61  = "IS";     brea
3b40: 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 49  k;.    case TK_I
3b50: 53 4e 4f 54 3a 20 20 20 7a 42 69 6e 4f 70 20 3d  SNOT:   zBinOp =
3b60: 20 22 49 53 4e 4f 54 22 3b 20 20 62 72 65 61 6b   "ISNOT";  break
3b70: 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 41 4e  ;.    case TK_AN
3b80: 44 3a 20 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20  D:     zBinOp = 
3b90: 22 41 4e 44 22 3b 20 20 20 20 62 72 65 61 6b 3b  "AND";    break;
3ba0: 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 4f 52 3a  .    case TK_OR:
3bb0: 20 20 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22        zBinOp = "
3bc0: 4f 52 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  OR";     break;.
3bd0: 20 20 20 20 63 61 73 65 20 54 4b 5f 50 4c 55 53      case TK_PLUS
3be0: 3a 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22 41  :    zBinOp = "A
3bf0: 44 44 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  DD";    break;. 
3c00: 20 20 20 63 61 73 65 20 54 4b 5f 53 54 41 52 3a     case TK_STAR:
3c10: 20 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22 4d 55      zBinOp = "MU
3c20: 4c 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  L";    break;.  
3c30: 20 20 63 61 73 65 20 54 4b 5f 4d 49 4e 55 53 3a    case TK_MINUS:
3c40: 20 20 20 7a 42 69 6e 4f 70 20 3d 20 22 53 55 42     zBinOp = "SUB
3c50: 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ";    break;.   
3c60: 20 63 61 73 65 20 54 4b 5f 52 45 4d 3a 20 20 20   case TK_REM:   
3c70: 20 20 7a 42 69 6e 4f 70 20 3d 20 22 52 45 4d 22    zBinOp = "REM"
3c80: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
3c90: 63 61 73 65 20 54 4b 5f 42 49 54 41 4e 44 3a 20  case TK_BITAND: 
3ca0: 20 7a 42 69 6e 4f 70 20 3d 20 22 42 49 54 41 4e   zBinOp = "BITAN
3cb0: 44 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 63  D"; break;.    c
3cc0: 61 73 65 20 54 4b 5f 42 49 54 4f 52 3a 20 20 20  ase TK_BITOR:   
3cd0: 7a 42 69 6e 4f 70 20 3d 20 22 42 49 54 4f 52 22  zBinOp = "BITOR"
3ce0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61  ;  break;.    ca
3cf0: 73 65 20 54 4b 5f 53 4c 41 53 48 3a 20 20 20 7a  se TK_SLASH:   z
3d00: 42 69 6e 4f 70 20 3d 20 22 44 49 56 22 3b 20 20  BinOp = "DIV";  
3d10: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
3d20: 65 20 54 4b 5f 4c 53 48 49 46 54 3a 20 20 7a 42  e TK_LSHIFT:  zB
3d30: 69 6e 4f 70 20 3d 20 22 4c 53 48 49 46 54 22 3b  inOp = "LSHIFT";
3d40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3d50: 20 54 4b 5f 52 53 48 49 46 54 3a 20 20 7a 42 69   TK_RSHIFT:  zBi
3d60: 6e 4f 70 20 3d 20 22 52 53 48 49 46 54 22 3b 20  nOp = "RSHIFT"; 
3d70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3d80: 54 4b 5f 43 4f 4e 43 41 54 3a 20 20 7a 42 69 6e  TK_CONCAT:  zBin
3d90: 4f 70 20 3d 20 22 43 4f 4e 43 41 54 22 3b 20 62  Op = "CONCAT"; b
3da0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54  reak;.    case T
3db0: 4b 5f 44 4f 54 3a 20 20 20 20 20 7a 42 69 6e 4f  K_DOT:     zBinO
3dc0: 70 20 3d 20 22 44 4f 54 22 3b 20 20 20 20 62 72  p = "DOT";    br
3dd0: 65 61 6b 3b 0a 0a 20 20 20 20 63 61 73 65 20 54  eak;..    case T
3de0: 4b 5f 55 4d 49 4e 55 53 3a 20 20 7a 55 6e 69 4f  K_UMINUS:  zUniO
3df0: 70 20 3d 20 22 55 4d 49 4e 55 53 22 3b 20 62 72  p = "UMINUS"; br
3e00: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b  eak;.    case TK
3e10: 5f 55 50 4c 55 53 3a 20 20 20 7a 55 6e 69 4f 70  _UPLUS:   zUniOp
3e20: 20 3d 20 22 55 50 4c 55 53 22 3b 20 20 62 72 65   = "UPLUS";  bre
3e30: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  ak;.    case TK_
3e40: 42 49 54 4e 4f 54 3a 20 20 7a 55 6e 69 4f 70 20  BITNOT:  zUniOp 
3e50: 3d 20 22 42 49 54 4e 4f 54 22 3b 20 62 72 65 61  = "BITNOT"; brea
3e60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 4e  k;.    case TK_N
3e70: 4f 54 3a 20 20 20 20 20 7a 55 6e 69 4f 70 20 3d  OT:     zUniOp =
3e80: 20 22 4e 4f 54 22 3b 20 20 20 20 62 72 65 61 6b   "NOT";    break
3e90: 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 49 53  ;.    case TK_IS
3ea0: 4e 55 4c 4c 3a 20 20 7a 55 6e 69 4f 70 20 3d 20  NULL:  zUniOp = 
3eb0: 22 49 53 4e 55 4c 4c 22 3b 20 62 72 65 61 6b 3b  "ISNULL"; break;
3ec0: 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 4e 4f 54  .    case TK_NOT
3ed0: 4e 55 4c 4c 3a 20 7a 55 6e 69 4f 70 20 3d 20 22  NULL: zUniOp = "
3ee0: 4e 4f 54 4e 55 4c 4c 22 3b 20 62 72 65 61 6b 3b  NOTNULL"; break;
3ef0: 0a 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 54 52  ..    case TK_TR
3f00: 55 54 48 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74  UTH: {.      int
3f10: 20 78 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   x;.      const 
3f20: 63 68 61 72 20 2a 61 7a 4f 70 5b 5d 20 3d 20 7b  char *azOp[] = {
3f30: 0a 20 20 20 20 20 20 20 20 20 22 49 53 2d 46 41  .         "IS-FA
3f40: 4c 53 45 22 2c 20 22 49 53 2d 54 52 55 45 22 2c  LSE", "IS-TRUE",
3f50: 20 22 49 53 2d 4e 4f 54 2d 46 41 4c 53 45 22 2c   "IS-NOT-FALSE",
3f60: 20 22 49 53 2d 4e 4f 54 2d 54 52 55 45 22 0a 20   "IS-NOT-TRUE". 
3f70: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 61 73       };.      as
3f80: 73 65 72 74 28 20 70 45 78 70 72 2d 3e 6f 70 32  sert( pExpr->op2
3f90: 3d 3d 54 4b 5f 49 53 20 7c 7c 20 70 45 78 70 72  ==TK_IS || pExpr
3fa0: 2d 3e 6f 70 32 3d 3d 54 4b 5f 49 53 4e 4f 54 20  ->op2==TK_ISNOT 
3fb0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
3fc0: 20 70 45 78 70 72 2d 3e 70 52 69 67 68 74 20 29   pExpr->pRight )
3fd0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3fe0: 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
3ff0: 6f 6c 6c 61 74 65 28 70 45 78 70 72 2d 3e 70 52  ollate(pExpr->pR
4000: 69 67 68 74 29 2d 3e 6f 70 3d 3d 54 4b 5f 54 52  ight)->op==TK_TR
4010: 55 45 46 41 4c 53 45 20 29 3b 0a 20 20 20 20 20  UEFALSE );.     
4020: 20 78 20 3d 20 28 70 45 78 70 72 2d 3e 6f 70 32   x = (pExpr->op2
4030: 3d 3d 54 4b 5f 49 53 4e 4f 54 29 2a 32 20 2b 20  ==TK_ISNOT)*2 + 
4040: 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68  sqlite3ExprTruth
4050: 56 61 6c 75 65 28 70 45 78 70 72 2d 3e 70 52 69  Value(pExpr->pRi
4060: 67 68 74 29 3b 0a 20 20 20 20 20 20 7a 55 6e 69  ght);.      zUni
4070: 4f 70 20 3d 20 61 7a 4f 70 5b 78 5d 3b 0a 20 20  Op = azOp[x];.  
4080: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
4090: 0a 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 53 50  ..    case TK_SP
40a0: 41 4e 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  AN: {.      sqli
40b0: 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
40c0: 70 56 69 65 77 2c 20 22 53 50 41 4e 20 25 51 22  pView, "SPAN %Q"
40d0: 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65  , pExpr->u.zToke
40e0: 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  n);.      sqlite
40f0: 33 54 72 65 65 56 69 65 77 45 78 70 72 28 70 56  3TreeViewExpr(pV
4100: 69 65 77 2c 20 70 45 78 70 72 2d 3e 70 4c 65 66  iew, pExpr->pLef
4110: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65  t, 0);.      bre
4120: 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63  ak;.    }..    c
4130: 61 73 65 20 54 4b 5f 43 4f 4c 4c 41 54 45 3a 20  ase TK_COLLATE: 
4140: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  {.      sqlite3T
4150: 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65  reeViewLine(pVie
4160: 77 2c 20 22 43 4f 4c 4c 41 54 45 20 25 51 22 2c  w, "COLLATE %Q",
4170: 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65 6e   pExpr->u.zToken
4180: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
4190: 54 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69  TreeViewExpr(pVi
41a0: 65 77 2c 20 70 45 78 70 72 2d 3e 70 4c 65 66 74  ew, pExpr->pLeft
41b0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 0);.      brea
41c0: 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63 61  k;.    }..    ca
41d0: 73 65 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  se TK_AGG_FUNCTI
41e0: 4f 4e 3a 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  ON:.    case TK_
41f0: 46 55 4e 43 54 49 4f 4e 3a 20 7b 0a 20 20 20 20  FUNCTION: {.    
4200: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 61 72    ExprList *pFar
4210: 67 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  g;       /* List
4220: 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20 61 72 67   of function arg
4230: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  uments */.      
4240: 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 0a 20 20  Window *pWin;.  
4250: 20 20 20 20 69 66 28 20 45 78 70 72 48 61 73 50      if( ExprHasP
4260: 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c 20 45  roperty(pExpr, E
4270: 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 29 20 29 7b 0a  P_TokenOnly) ){.
4280: 20 20 20 20 20 20 20 20 70 46 61 72 67 20 3d 20          pFarg = 
4290: 30 3b 0a 20 20 20 20 20 20 20 20 70 57 69 6e 20  0;.        pWin 
42a0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
42b0: 7b 0a 20 20 20 20 20 20 20 20 70 46 61 72 67 20  {.        pFarg 
42c0: 3d 20 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74  = pExpr->x.pList
42d0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
42e0: 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
42f0: 0a 20 20 20 20 20 20 20 20 70 57 69 6e 20 3d 20  .        pWin = 
4300: 70 45 78 70 72 2d 3e 79 2e 70 57 69 6e 3b 0a 23  pExpr->y.pWin;.#
4310: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 70 57 69  else.        pWi
4320: 6e 20 3d 20 30 3b 0a 23 65 6e 64 69 66 20 0a 20  n = 0;.#endif . 
4330: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
4340: 20 70 45 78 70 72 2d 3e 6f 70 3d 3d 54 4b 5f 41   pExpr->op==TK_A
4350: 47 47 5f 46 55 4e 43 54 49 4f 4e 20 29 7b 0a 20  GG_FUNCTION ){. 
4360: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72         sqlite3Tr
4370: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
4380: 2c 20 22 41 47 47 5f 46 55 4e 43 54 49 4f 4e 25  , "AGG_FUNCTION%
4390: 64 20 25 51 25 73 22 2c 0a 20 20 20 20 20 20 20  d %Q%s",.       
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 20 20 20 20 70 45 78 70 72 2d 3e 6f 70 32        pExpr->op2
43c0: 2c 20 70 45 78 70 72 2d 3e 75 2e 7a 54 6f 6b 65  , pExpr->u.zToke
43d0: 6e 2c 20 7a 46 6c 67 73 29 3b 0a 20 20 20 20 20  n, zFlgs);.     
43e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
43f0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
4400: 69 6e 65 28 70 56 69 65 77 2c 20 22 46 55 4e 43  ine(pView, "FUNC
4410: 54 49 4f 4e 20 25 51 25 73 22 2c 20 70 45 78 70  TION %Q%s", pExp
4420: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 2c 20 7a 46 6c  r->u.zToken, zFl
4430: 67 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  gs);.      }.   
4440: 20 20 20 69 66 28 20 70 46 61 72 67 20 29 7b 0a     if( pFarg ){.
4450: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
4460: 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28  reeViewExprList(
4470: 70 56 69 65 77 2c 20 70 46 61 72 67 2c 20 70 57  pView, pFarg, pW
4480: 69 6e 21 3d 30 2c 20 30 29 3b 0a 20 20 20 20 20  in!=0, 0);.     
4490: 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
44a0: 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
44b0: 43 0a 20 20 20 20 20 20 69 66 28 20 70 57 69 6e  C.      if( pWin
44c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
44d0: 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f  te3TreeViewWindo
44e0: 77 28 70 56 69 65 77 2c 20 70 57 69 6e 2c 20 30  w(pView, pWin, 0
44f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  );.      }.#endi
4500: 66 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  f.      break;. 
4510: 20 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c     }.#ifndef SQL
4520: 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
4530: 59 0a 20 20 20 20 63 61 73 65 20 54 4b 5f 45 58  Y.    case TK_EX
4540: 49 53 54 53 3a 20 7b 0a 20 20 20 20 20 20 73 71  ISTS: {.      sq
4550: 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e  lite3TreeViewLin
4560: 65 28 70 56 69 65 77 2c 20 22 45 58 49 53 54 53  e(pView, "EXISTS
4570: 2d 65 78 70 72 20 66 6c 61 67 73 3d 30 78 25 78  -expr flags=0x%x
4580: 22 2c 20 70 45 78 70 72 2d 3e 66 6c 61 67 73 29  ", pExpr->flags)
4590: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
45a0: 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 70 56  reeViewSelect(pV
45b0: 69 65 77 2c 20 70 45 78 70 72 2d 3e 78 2e 70 53  iew, pExpr->x.pS
45c0: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 20  elect, 0);.     
45d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
45e0: 20 20 63 61 73 65 20 54 4b 5f 53 45 4c 45 43 54    case TK_SELECT
45f0: 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  : {.      sqlite
4600: 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56  3TreeViewLine(pV
4610: 69 65 77 2c 20 22 53 45 4c 45 43 54 2d 65 78 70  iew, "SELECT-exp
4620: 72 20 66 6c 61 67 73 3d 30 78 25 78 22 2c 20 70  r flags=0x%x", p
4630: 45 78 70 72 2d 3e 66 6c 61 67 73 29 3b 0a 20 20  Expr->flags);.  
4640: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
4650: 69 65 77 53 65 6c 65 63 74 28 70 56 69 65 77 2c  iewSelect(pView,
4660: 20 70 45 78 70 72 2d 3e 78 2e 70 53 65 6c 65 63   pExpr->x.pSelec
4670: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65  t, 0);.      bre
4680: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
4690: 73 65 20 54 4b 5f 49 4e 3a 20 7b 0a 20 20 20 20  se TK_IN: {.    
46a0: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
46b0: 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 49 4e  wLine(pView, "IN
46c0: 20 66 6c 61 67 73 3d 30 78 25 78 22 2c 20 70 45   flags=0x%x", pE
46d0: 78 70 72 2d 3e 66 6c 61 67 73 29 3b 0a 20 20 20  xpr->flags);.   
46e0: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
46f0: 65 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 45  ewExpr(pView, pE
4700: 78 70 72 2d 3e 70 4c 65 66 74 2c 20 31 29 3b 0a  xpr->pLeft, 1);.
4710: 20 20 20 20 20 20 69 66 28 20 45 78 70 72 48 61        if( ExprHa
4720: 73 50 72 6f 70 65 72 74 79 28 70 45 78 70 72 2c  sProperty(pExpr,
4730: 20 45 50 5f 78 49 73 53 65 6c 65 63 74 29 20 29   EP_xIsSelect) )
4740: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4750: 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
4760: 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 78 2e  pView, pExpr->x.
4770: 70 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20  pSelect, 0);.   
4780: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4790: 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65    sqlite3TreeVie
47a0: 77 45 78 70 72 4c 69 73 74 28 70 56 69 65 77 2c  wExprList(pView,
47b0: 20 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74 2c   pExpr->x.pList,
47c0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a   0, 0);.      }.
47d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
47e0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
47f0: 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
4800: 59 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  Y */..    /*.   
4810: 20 2a 2a 20 20 20 20 78 20 42 45 54 57 45 45 4e   **    x BETWEEN
4820: 20 79 20 41 4e 44 20 7a 0a 20 20 20 20 2a 2a 0a   y AND z.    **.
4830: 20 20 20 20 2a 2a 20 54 68 69 73 20 69 73 20 65      ** This is e
4840: 71 75 69 76 61 6c 65 6e 74 20 74 6f 0a 20 20 20  quivalent to.   
4850: 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 20 78 3e   **.    **    x>
4860: 3d 79 20 41 4e 44 20 78 3c 3d 7a 0a 20 20 20 20  =y AND x<=z.    
4870: 2a 2a 0a 20 20 20 20 2a 2a 20 58 20 69 73 20 73  **.    ** X is s
4880: 74 6f 72 65 64 20 69 6e 20 70 45 78 70 72 2d 3e  tored in pExpr->
4890: 70 4c 65 66 74 2e 0a 20 20 20 20 2a 2a 20 59 20  pLeft..    ** Y 
48a0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 45 78  is stored in pEx
48b0: 70 72 2d 3e 70 4c 69 73 74 2d 3e 61 5b 30 5d 2e  pr->pList->a[0].
48c0: 70 45 78 70 72 2e 0a 20 20 20 20 2a 2a 20 5a 20  pExpr..    ** Z 
48d0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 45 78  is stored in pEx
48e0: 70 72 2d 3e 70 4c 69 73 74 2d 3e 61 5b 31 5d 2e  pr->pList->a[1].
48f0: 70 45 78 70 72 2e 0a 20 20 20 20 2a 2f 0a 20 20  pExpr..    */.  
4900: 20 20 63 61 73 65 20 54 4b 5f 42 45 54 57 45 45    case TK_BETWEE
4910: 4e 3a 20 7b 0a 20 20 20 20 20 20 45 78 70 72 20  N: {.      Expr 
4920: 2a 70 58 20 3d 20 70 45 78 70 72 2d 3e 70 4c 65  *pX = pExpr->pLe
4930: 66 74 3b 0a 20 20 20 20 20 20 45 78 70 72 20 2a  ft;.      Expr *
4940: 70 59 20 3d 20 70 45 78 70 72 2d 3e 78 2e 70 4c  pY = pExpr->x.pL
4950: 69 73 74 2d 3e 61 5b 30 5d 2e 70 45 78 70 72 3b  ist->a[0].pExpr;
4960: 0a 20 20 20 20 20 20 45 78 70 72 20 2a 70 5a 20  .      Expr *pZ 
4970: 3d 20 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74  = pExpr->x.pList
4980: 2d 3e 61 5b 31 5d 2e 70 45 78 70 72 3b 0a 20 20  ->a[1].pExpr;.  
4990: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
49a0: 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22  iewLine(pView, "
49b0: 42 45 54 57 45 45 4e 22 29 3b 0a 20 20 20 20 20  BETWEEN");.     
49c0: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
49d0: 45 78 70 72 28 70 56 69 65 77 2c 20 70 58 2c 20  Expr(pView, pX, 
49e0: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
49f0: 33 54 72 65 65 56 69 65 77 45 78 70 72 28 70 56  3TreeViewExpr(pV
4a00: 69 65 77 2c 20 70 59 2c 20 31 29 3b 0a 20 20 20  iew, pY, 1);.   
4a10: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
4a20: 65 77 45 78 70 72 28 70 56 69 65 77 2c 20 70 5a  ewExpr(pView, pZ
4a30: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 0);.      brea
4a40: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
4a50: 65 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 7b 0a  e TK_TRIGGER: {.
4a60: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
4a70: 6f 70 63 6f 64 65 20 69 73 20 54 4b 5f 54 52 49  opcode is TK_TRI
4a80: 47 47 45 52 2c 20 74 68 65 6e 20 74 68 65 20 65  GGER, then the e
4a90: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 72  xpression is a r
4aa0: 65 66 65 72 65 6e 63 65 0a 20 20 20 20 20 20 2a  eference.      *
4ab0: 2a 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  * to a column in
4ac0: 20 74 68 65 20 6e 65 77 2e 2a 20 6f 72 20 6f 6c   the new.* or ol
4ad0: 64 2e 2a 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  d.* pseudo-table
4ae0: 73 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 0a 20  s available to. 
4af0: 20 20 20 20 20 2a 2a 20 74 72 69 67 67 65 72 20       ** trigger 
4b00: 70 72 6f 67 72 61 6d 73 2e 20 49 6e 20 74 68 69  programs. In thi
4b10: 73 20 63 61 73 65 20 45 78 70 72 2e 69 54 61 62  s case Expr.iTab
4b20: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 31 20 66  le is set to 1 f
4b30: 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  or the.      ** 
4b40: 6e 65 77 2e 2a 20 70 73 65 75 64 6f 2d 74 61 62  new.* pseudo-tab
4b50: 6c 65 2c 20 6f 72 20 30 20 66 6f 72 20 74 68 65  le, or 0 for the
4b60: 20 6f 6c 64 2e 2a 20 70 73 65 75 64 6f 2d 74 61   old.* pseudo-ta
4b70: 62 6c 65 2e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  ble. Expr.iColum
4b80: 6e 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 73 65  n.      ** is se
4b90: 74 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20  t to the column 
4ba0: 6f 66 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  of the pseudo-ta
4bb0: 62 6c 65 20 74 6f 20 72 65 61 64 2c 20 6f 72 20  ble to read, or 
4bc0: 74 6f 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 2a  to -1 to.      *
4bd0: 2a 20 72 65 61 64 20 74 68 65 20 72 6f 77 69 64  * read the rowid
4be0: 20 66 69 65 6c 64 2e 0a 20 20 20 20 20 20 2a 2f   field..      */
4bf0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72  .      sqlite3Tr
4c00: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
4c10: 2c 20 22 25 73 28 25 64 29 22 2c 20 0a 20 20 20  , "%s(%d)", .   
4c20: 20 20 20 20 20 20 20 70 45 78 70 72 2d 3e 69 54         pExpr->iT
4c30: 61 62 6c 65 20 3f 20 22 4e 45 57 22 20 3a 20 22  able ? "NEW" : "
4c40: 4f 4c 44 22 2c 20 70 45 78 70 72 2d 3e 69 43 6f  OLD", pExpr->iCo
4c50: 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 62 72 65  lumn);.      bre
4c60: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
4c70: 73 65 20 54 4b 5f 43 41 53 45 3a 20 7b 0a 20 20  se TK_CASE: {.  
4c80: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
4c90: 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22  iewLine(pView, "
4ca0: 43 41 53 45 22 29 3b 0a 20 20 20 20 20 20 73 71  CASE");.      sq
4cb0: 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
4cc0: 72 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e  r(pView, pExpr->
4cd0: 70 4c 65 66 74 2c 20 31 29 3b 0a 20 20 20 20 20  pLeft, 1);.     
4ce0: 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
4cf0: 45 78 70 72 4c 69 73 74 28 70 56 69 65 77 2c 20  ExprList(pView, 
4d00: 70 45 78 70 72 2d 3e 78 2e 70 4c 69 73 74 2c 20  pExpr->x.pList, 
4d10: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65  0, 0);.      bre
4d20: 61 6b 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65  ak;.    }.#ifnde
4d30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
4d40: 49 47 47 45 52 0a 20 20 20 20 63 61 73 65 20 54  IGGER.    case T
4d50: 4b 5f 52 41 49 53 45 3a 20 7b 0a 20 20 20 20 20  K_RAISE: {.     
4d60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
4d70: 70 65 20 3d 20 22 75 6e 6b 22 3b 0a 20 20 20 20  pe = "unk";.    
4d80: 20 20 73 77 69 74 63 68 28 20 70 45 78 70 72 2d    switch( pExpr-
4d90: 3e 61 66 66 45 78 70 72 20 29 7b 0a 20 20 20 20  >affExpr ){.    
4da0: 20 20 20 20 63 61 73 65 20 4f 45 5f 52 6f 6c 6c      case OE_Roll
4db0: 62 61 63 6b 3a 20 20 20 7a 54 79 70 65 20 3d 20  back:   zType = 
4dc0: 22 72 6f 6c 6c 62 61 63 6b 22 3b 20 20 62 72 65  "rollback";  bre
4dd0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
4de0: 20 4f 45 5f 41 62 6f 72 74 3a 20 20 20 20 20 20   OE_Abort:      
4df0: 7a 54 79 70 65 20 3d 20 22 61 62 6f 72 74 22 3b  zType = "abort";
4e00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4e10: 20 20 20 20 63 61 73 65 20 4f 45 5f 46 61 69 6c      case OE_Fail
4e20: 3a 20 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  :       zType = 
4e30: 22 66 61 69 6c 22 3b 20 20 20 20 20 20 62 72 65  "fail";      bre
4e40: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
4e50: 20 4f 45 5f 49 67 6e 6f 72 65 3a 20 20 20 20 20   OE_Ignore:     
4e60: 7a 54 79 70 65 20 3d 20 22 69 67 6e 6f 72 65 22  zType = "ignore"
4e70: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
4e80: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4e90: 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56  3TreeViewLine(pV
4ea0: 69 65 77 2c 20 22 52 41 49 53 45 20 25 73 28 25  iew, "RAISE %s(%
4eb0: 51 29 22 2c 20 7a 54 79 70 65 2c 20 70 45 78 70  Q)", zType, pExp
4ec0: 72 2d 3e 75 2e 7a 54 6f 6b 65 6e 29 3b 0a 20 20  r->u.zToken);.  
4ed0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
4ee0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 63 61 73 65  .#endif.    case
4ef0: 20 54 4b 5f 4d 41 54 43 48 3a 20 7b 0a 20 20 20   TK_MATCH: {.   
4f00: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
4f10: 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20 22 4d  ewLine(pView, "M
4f20: 41 54 43 48 20 7b 25 64 3a 25 64 7d 25 73 22 2c  ATCH {%d:%d}%s",
4f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f40: 20 20 20 20 20 20 20 20 20 20 20 70 45 78 70 72             pExpr
4f50: 2d 3e 69 54 61 62 6c 65 2c 20 70 45 78 70 72 2d  ->iTable, pExpr-
4f60: 3e 69 43 6f 6c 75 6d 6e 2c 20 7a 46 6c 67 73 29  >iColumn, zFlgs)
4f70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
4f80: 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65  reeViewExpr(pVie
4f90: 77 2c 20 70 45 78 70 72 2d 3e 70 52 69 67 68 74  w, pExpr->pRight
4fa0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 0);.      brea
4fb0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
4fc0: 65 20 54 4b 5f 56 45 43 54 4f 52 3a 20 7b 0a 20  e TK_VECTOR: {. 
4fd0: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
4fe0: 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74  ViewBareExprList
4ff0: 28 70 56 69 65 77 2c 20 70 45 78 70 72 2d 3e 78  (pView, pExpr->x
5000: 2e 70 4c 69 73 74 2c 20 22 56 45 43 54 4f 52 22  .pList, "VECTOR"
5010: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
5020: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 54      }.    case T
5030: 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a  K_SELECT_COLUMN:
5040: 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   {.      sqlite3
5050: 54 72 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69  TreeViewLine(pVi
5060: 65 77 2c 20 22 53 45 4c 45 43 54 2d 43 4f 4c 55  ew, "SELECT-COLU
5070: 4d 4e 20 25 64 22 2c 20 70 45 78 70 72 2d 3e 69  MN %d", pExpr->i
5080: 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 73  Column);.      s
5090: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
50a0: 6c 65 63 74 28 70 56 69 65 77 2c 20 70 45 78 70  lect(pView, pExp
50b0: 72 2d 3e 70 4c 65 66 74 2d 3e 78 2e 70 53 65 6c  r->pLeft->x.pSel
50c0: 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 62  ect, 0);.      b
50d0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
50e0: 63 61 73 65 20 54 4b 5f 49 46 5f 4e 55 4c 4c 5f  case TK_IF_NULL_
50f0: 52 4f 57 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  ROW: {.      sql
5100: 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65  ite3TreeViewLine
5110: 28 70 56 69 65 77 2c 20 22 49 46 2d 4e 55 4c 4c  (pView, "IF-NULL
5120: 2d 52 4f 57 20 25 64 22 2c 20 70 45 78 70 72 2d  -ROW %d", pExpr-
5130: 3e 69 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20  >iTable);.      
5140: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
5150: 78 70 72 28 70 56 69 65 77 2c 20 70 45 78 70 72  xpr(pView, pExpr
5160: 2d 3e 70 4c 65 66 74 2c 20 30 29 3b 0a 20 20 20  ->pLeft, 0);.   
5170: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
5180: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
5190: 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65       sqlite3Tree
51a0: 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77 2c 20  ViewLine(pView, 
51b0: 22 6f 70 3d 25 64 22 2c 20 70 45 78 70 72 2d 3e  "op=%d", pExpr->
51c0: 6f 70 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  op);.      break
51d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
51e0: 28 20 7a 42 69 6e 4f 70 20 29 7b 0a 20 20 20 20  ( zBinOp ){.    
51f0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
5200: 69 6e 65 28 70 56 69 65 77 2c 20 22 25 73 25 73  ine(pView, "%s%s
5210: 22 2c 20 7a 42 69 6e 4f 70 2c 20 7a 46 6c 67 73  ", zBinOp, zFlgs
5220: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  );.    sqlite3Tr
5230: 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65 77  eeViewExpr(pView
5240: 2c 20 70 45 78 70 72 2d 3e 70 4c 65 66 74 2c 20  , pExpr->pLeft, 
5250: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54  1);.    sqlite3T
5260: 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69 65  reeViewExpr(pVie
5270: 77 2c 20 70 45 78 70 72 2d 3e 70 52 69 67 68 74  w, pExpr->pRight
5280: 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  , 0);.  }else if
5290: 28 20 7a 55 6e 69 4f 70 20 29 7b 0a 20 20 20 20  ( zUniOp ){.    
52a0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c  sqlite3TreeViewL
52b0: 69 6e 65 28 70 56 69 65 77 2c 20 22 25 73 25 73  ine(pView, "%s%s
52c0: 22 2c 20 7a 55 6e 69 4f 70 2c 20 7a 46 6c 67 73  ", zUniOp, zFlgs
52d0: 29 3b 0a 20 20 20 73 71 6c 69 74 65 33 54 72 65  );.   sqlite3Tre
52e0: 65 56 69 65 77 45 78 70 72 28 70 56 69 65 77 2c  eViewExpr(pView,
52f0: 20 70 45 78 70 72 2d 3e 70 4c 65 66 74 2c 20 30   pExpr->pLeft, 0
5300: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
5310: 54 72 65 65 56 69 65 77 50 6f 70 28 70 56 69 65  TreeViewPop(pVie
5320: 77 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 47 65  w);.}.../*.** Ge
5330: 6e 65 72 61 74 65 20 61 20 68 75 6d 61 6e 2d 72  nerate a human-r
5340: 65 61 64 61 62 6c 65 20 65 78 70 6c 61 6e 61 74  eadable explanat
5350: 69 6f 6e 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ion of an expres
5360: 73 69 6f 6e 20 6c 69 73 74 2e 0a 2a 2f 0a 76 6f  sion list..*/.vo
5370: 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
5380: 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 0a  ewBareExprList(.
5390: 20 20 54 72 65 65 56 69 65 77 20 2a 70 56 69 65    TreeView *pVie
53a0: 77 2c 0a 20 20 63 6f 6e 73 74 20 45 78 70 72 4c  w,.  const ExprL
53b0: 69 73 74 20 2a 70 4c 69 73 74 2c 0a 20 20 63 6f  ist *pList,.  co
53c0: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c  nst char *zLabel
53d0: 0a 29 7b 0a 20 20 69 66 28 20 7a 4c 61 62 65 6c  .){.  if( zLabel
53e0: 3d 3d 30 20 7c 7c 20 7a 4c 61 62 65 6c 5b 30 5d  ==0 || zLabel[0]
53f0: 3d 3d 30 20 29 20 7a 4c 61 62 65 6c 20 3d 20 22  ==0 ) zLabel = "
5400: 4c 49 53 54 22 3b 0a 20 20 69 66 28 20 70 4c 69  LIST";.  if( pLi
5410: 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  st==0 ){.    sql
5420: 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65  ite3TreeViewLine
5430: 28 70 56 69 65 77 2c 20 22 25 73 20 28 65 6d 70  (pView, "%s (emp
5440: 74 79 29 22 2c 20 7a 4c 61 62 65 6c 29 3b 0a 20  ty)", zLabel);. 
5450: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20   }else{.    int 
5460: 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 72  i;.    sqlite3Tr
5470: 65 65 56 69 65 77 4c 69 6e 65 28 70 56 69 65 77  eeViewLine(pView
5480: 2c 20 22 25 73 22 2c 20 7a 4c 61 62 65 6c 29 3b  , "%s", zLabel);
5490: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
54a0: 70 4c 69 73 74 2d 3e 6e 45 78 70 72 3b 20 69 2b  pList->nExpr; i+
54b0: 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6a 20  +){.      int j 
54c0: 3d 20 70 4c 69 73 74 2d 3e 61 5b 69 5d 2e 75 2e  = pList->a[i].u.
54d0: 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 3b 0a 20  x.iOrderByCol;. 
54e0: 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65       char *zName
54f0: 20 3d 20 70 4c 69 73 74 2d 3e 61 5b 69 5d 2e 7a   = pList->a[i].z
5500: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 6e 74 20  Name;.      int 
5510: 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77 20 3d 20 69  moreToFollow = i
5520: 3c 70 4c 69 73 74 2d 3e 6e 45 78 70 72 20 2d 20  <pList->nExpr - 
5530: 31 3b 0a 20 20 20 20 20 20 69 66 28 20 6a 20 7c  1;.      if( j |
5540: 7c 20 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  | zName ){.     
5550: 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56 69     sqlite3TreeVi
5560: 65 77 50 75 73 68 28 70 56 69 65 77 2c 20 6d 6f  ewPush(pView, mo
5570: 72 65 54 6f 46 6f 6c 6c 6f 77 29 3b 0a 20 20 20  reToFollow);.   
5580: 20 20 20 20 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f       moreToFollo
5590: 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73  w = 0;.        s
55a0: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69  qlite3TreeViewLi
55b0: 6e 65 28 70 56 69 65 77 2c 20 30 29 3b 0a 20 20  ne(pView, 0);.  
55c0: 20 20 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 20        if( zName 
55d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 70 72  ){.          fpr
55e0: 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 41 53  intf(stdout, "AS
55f0: 20 25 73 20 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20   %s ", zName);. 
5600: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5610: 20 69 66 28 20 6a 20 29 7b 0a 20 20 20 20 20 20   if( j ){.      
5620: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f      fprintf(stdo
5630: 75 74 2c 20 22 69 4f 72 64 65 72 42 79 43 6f 6c  ut, "iOrderByCol
5640: 3d 25 64 22 2c 20 6a 29 3b 0a 20 20 20 20 20 20  =%d", j);.      
5650: 20 20 7d 0a 20 20 20 20 20 20 20 20 66 70 72 69    }.        fpri
5660: 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 5c 6e 22  ntf(stdout, "\n"
5670: 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75 73  );.        fflus
5680: 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20  h(stdout);.     
5690: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
56a0: 54 72 65 65 56 69 65 77 45 78 70 72 28 70 56 69  TreeViewExpr(pVi
56b0: 65 77 2c 20 70 4c 69 73 74 2d 3e 61 5b 69 5d 2e  ew, pList->a[i].
56c0: 70 45 78 70 72 2c 20 6d 6f 72 65 54 6f 46 6f 6c  pExpr, moreToFol
56d0: 6c 6f 77 29 3b 0a 20 20 20 20 20 20 69 66 28 20  low);.      if( 
56e0: 6a 20 7c 7c 20 7a 4e 61 6d 65 20 29 7b 0a 20 20  j || zName ){.  
56f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 72 65        sqlite3Tre
5700: 65 56 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b  eViewPop(pView);
5710: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5720: 20 7d 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65   }.}.void sqlite
5730: 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
5740: 74 28 0a 20 20 54 72 65 65 56 69 65 77 20 2a 70  t(.  TreeView *p
5750: 56 69 65 77 2c 0a 20 20 63 6f 6e 73 74 20 45 78  View,.  const Ex
5760: 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 2c 0a 20  prList *pList,. 
5770: 20 75 38 20 6d 6f 72 65 54 6f 46 6f 6c 6c 6f 77   u8 moreToFollow
5780: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
5790: 7a 4c 61 62 65 6c 0a 29 7b 0a 20 20 70 56 69 65  zLabel.){.  pVie
57a0: 77 20 3d 20 73 71 6c 69 74 65 33 54 72 65 65 56  w = sqlite3TreeV
57b0: 69 65 77 50 75 73 68 28 70 56 69 65 77 2c 20 6d  iewPush(pView, m
57c0: 6f 72 65 54 6f 46 6f 6c 6c 6f 77 29 3b 0a 20 20  oreToFollow);.  
57d0: 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42  sqlite3TreeViewB
57e0: 61 72 65 45 78 70 72 4c 69 73 74 28 70 56 69 65  areExprList(pVie
57f0: 77 2c 20 70 4c 69 73 74 2c 20 7a 4c 61 62 65 6c  w, pList, zLabel
5800: 29 3b 0a 20 20 73 71 6c 69 74 65 33 54 72 65 65  );.  sqlite3Tree
5810: 56 69 65 77 50 6f 70 28 70 56 69 65 77 29 3b 0a  ViewPop(pView);.
5820: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
5830: 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a           ITE_DEBUG */.