System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0b9c4e9cef8e98ab35d2c7556569d4d579c6ee44:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 23 69 66 20 55 53 45 5f 45  **/....#if USE_E
0130: 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f  NTITY_FRAMEWORK_
0140: 36 0d 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  6..namespace Sys
0150: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
0160: 45 46 36 0d 0a 23 65 6c 73 65 0d 0a 6e 61 6d 65  EF6..#else..name
0170: 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74  space System.Dat
0180: 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 23  a.SQLite.Linq..#
0190: 65 6e 64 69 66 0d 0a 7b 0d 0a 20 20 75 73 69 6e  endif..{..  usin
01a0: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69  g System;..  usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63  ng System.Collec
01c0: 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a  tions.Generic;..
01d0: 0d 0a 23 69 66 20 55 53 45 5f 45 4e 54 49 54 59  ..#if USE_ENTITY
01e0: 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 0d 0a 20 20  _FRAMEWORK_6..  
01f0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
0200: 61 2e 45 6e 74 69 74 79 2e 43 6f 72 65 2e 43 6f  a.Entity.Core.Co
0210: 6d 6d 6f 6e 2e 43 6f 6d 6d 61 6e 64 54 72 65 65  mmon.CommandTree
0220: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 75 73 69  s;..#else..  usi
0230: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 43  ng System.Data.C
0240: 6f 6d 6d 6f 6e 2e 43 6f 6d 6d 61 6e 64 54 72 65  ommon.CommandTre
0250: 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  es;..#endif.... 
0260: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
0270: 65 64 20 63 6c 61 73 73 20 53 71 6c 43 68 65 63  ed class SqlChec
0280: 6b 65 72 20 3a 20 44 62 45 78 70 72 65 73 73 69  ker : DbExpressi
0290: 6f 6e 56 69 73 69 74 6f 72 3c 62 6f 6f 6c 3e 0d  onVisitor<bool>.
02a0: 0a 20 20 7b 0d 0a 23 69 66 20 66 61 6c 73 65 0d  .  {..#if false.
02b0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
02c0: 74 69 63 20 54 79 70 65 20 73 71 6c 38 72 65 77  tic Type sql8rew
02d0: 72 69 74 65 72 3b 0d 0a 0d 0a 20 20 20 20 73 74  riter;....    st
02e0: 61 74 69 63 20 53 71 6c 43 68 65 63 6b 65 72 28  atic SqlChecker(
02f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
0300: 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e    string version
0310: 20 3d 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c   =..#if NET_40 |
0320: 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f  | NET_45 || NET_
0330: 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c  451 || NET_452 |
0340: 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f  | NET_46 || NET_
0350: 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20 7c  461 || NET_462 |
0360: 7c 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45 54 5f  | NET_47 || NET_
0370: 34 37 31 20 7c 7c 20 4e 45 54 5f 34 37 32 0d 0a  471 || NET_472..
0380: 20 20 20 20 20 20 20 20 20 20 20 20 22 34 2e 30              "4.0
0390: 2e 30 2e 30 22 3b 0d 0a 23 65 6c 73 65 0d 0a 20  .0.0";..#else.. 
03a0: 20 20 20 20 20 20 20 20 20 20 20 22 33 2e 35 2e             "3.5.
03b0: 30 2e 30 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  0.0";..#endif...
03c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 38 72 65 77  .        sql8rew
03d0: 72 69 74 65 72 20 3d 20 54 79 70 65 2e 47 65 74  riter = Type.Get
03e0: 54 79 70 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Type(String.Form
03f0: 61 74 28 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  at("System.Data.
0400: 53 71 6c 43 6c 69 65 6e 74 2e 53 71 6c 47 65 6e  SqlClient.SqlGen
0410: 2e 53 71 6c 38 45 78 70 72 65 73 73 69 6f 6e 52  .Sql8ExpressionR
0420: 65 77 72 69 74 65 72 2c 20 53 79 73 74 65 6d 2e  ewriter, System.
0430: 44 61 74 61 2e 45 6e 74 69 74 79 2c 20 56 65 72  Data.Entity, Ver
0440: 73 69 6f 6e 3d 7b 30 7d 2c 20 43 75 6c 74 75 72  sion={0}, Cultur
0450: 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c 69  e=neutral, Publi
0460: 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63  cKeyToken=b77a5c
0470: 35 36 31 39 33 34 65 30 38 39 22 2c 20 76 65 72  561934e089", ver
0480: 73 69 6f 6e 29 2c 20 66 61 6c 73 65 29 3b 0d 0a  sion), false);..
0490: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
04a0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 71 6c  .    private Sql
04b0: 43 68 65 63 6b 65 72 28 29 0d 0a 20 20 20 20 7b  Checker()..    {
04c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 66  ..    }....#if f
04d0: 61 6c 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  alse..    /// <s
04e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
04f0: 20 53 51 4c 69 74 65 20 64 6f 65 73 6e 27 74 20   SQLite doesn't 
0500: 73 75 70 70 6f 72 74 20 74 68 69 6e 67 73 20 6c  support things l
0510: 69 6b 65 20 53 4b 49 50 20 61 6e 64 20 61 20 66  ike SKIP and a f
0520: 65 77 20 6f 74 68 65 72 20 74 68 69 6e 67 73 2e  ew other things.
0530: 20 20 0d 0a 20 20 20 20 2f 2f 2f 20 53 6f 20 64    ..    /// So d
0540: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
0550: 71 75 65 72 79 20 68 61 73 20 74 6f 20 62 65 20  query has to be 
0560: 72 65 77 72 69 74 74 65 6e 0d 0a 20 20 20 20 2f  rewritten..    /
0570: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0580: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
0590: 0d 0a 20 20 20 20 2f 2f 2f 20 4d 69 63 72 6f 73  ..    /// Micros
05a0: 6f 66 74 20 77 65 6e 74 20 74 6f 20 61 6c 6c 20  oft went to all 
05b0: 74 68 65 20 74 72 6f 75 62 6c 65 20 6f 66 20 6d  the trouble of m
05c0: 61 6b 69 6e 67 20 74 68 69 6e 67 73 20 6c 69 6b  aking things lik
05d0: 65 20 53 4b 49 50 20 77 6f 72 6b 20 0d 0a 20 20  e SKIP work ..  
05e0: 20 20 2f 2f 2f 20 6f 6e 20 53 71 6c 20 53 65 72    /// on Sql Ser
05f0: 76 65 72 20 32 30 30 30 20 62 79 20 64 6f 69 6e  ver 2000 by doin
0600: 67 20 61 20 72 65 77 72 69 74 65 20 6f 66 20 74  g a rewrite of t
0610: 68 65 20 63 6f 6d 6d 61 6e 64 74 72 65 65 2e 0d  he commandtree..
0620: 0a 20 20 20 20 2f 2f 2f 20 48 6f 77 65 76 65 72  .    /// However
0630: 2c 20 61 6c 6c 20 74 68 61 74 20 66 61 6e 63 79  , all that fancy
0640: 20 73 74 75 66 66 20 69 73 20 68 69 64 64 65 6e   stuff is hidden
0650: 20 66 72 6f 6d 20 75 73 2e 20 20 54 68 61 6e 6b   from us.  Thank
0660: 73 20 74 6f 20 0d 0a 20 20 20 20 2f 2f 2f 20 72  s to ..    /// r
0670: 65 66 6c 65 63 74 69 6f 6e 20 68 6f 77 65 76 65  eflection howeve
0680: 72 2c 20 77 65 20 63 61 6e 20 67 6f 20 61 68 65  r, we can go ahe
0690: 61 64 20 61 6e 64 20 75 73 65 20 74 68 65 20 53  ad and use the S
06a0: 71 6c 20 32 30 30 30 20 72 65 77 72 69 74 65 72  ql 2000 rewriter
06b0: 20 63 6f 64 65 0d 0a 20 20 20 20 2f 2f 2f 20 74   code..    /// t
06c0: 68 65 79 20 6d 61 64 65 2e 0d 0a 20 20 20 20 2f  hey made...    /
06d0: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
06e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
06f0: 6d 65 3d 22 74 72 65 65 22 3e 54 68 65 20 74 72  me="tree">The tr
0700: 65 65 20 74 6f 20 69 6e 73 70 65 63 74 20 66 6f  ee to inspect fo
0710: 72 20 61 20 72 65 77 72 69 74 65 3c 2f 70 61 72  r a rewrite</par
0720: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
0730: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
0740: 6e 65 77 20 71 75 65 72 79 20 74 72 65 65 20 69  new query tree i
0750: 66 20 69 74 20 6e 65 65 64 73 20 72 65 77 72 69  f it needs rewri
0760: 74 69 6e 67 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ting</returns>..
0770: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
0780: 74 69 63 20 44 62 51 75 65 72 79 43 6f 6d 6d 61  tic DbQueryComma
0790: 6e 64 54 72 65 65 20 52 65 77 72 69 74 65 28 44  ndTree Rewrite(D
07a0: 62 51 75 65 72 79 43 6f 6d 6d 61 6e 64 54 72 65  bQueryCommandTre
07b0: 65 20 74 72 65 65 29 0d 0a 20 20 20 20 7b 0d 0a  e tree)..    {..
07c0: 20 20 20 20 20 20 53 71 6c 43 68 65 63 6b 65 72        SqlChecker
07d0: 20 76 69 73 69 74 6f 72 20 3d 20 6e 65 77 20 53   visitor = new S
07e0: 71 6c 43 68 65 63 6b 65 72 28 29 3b 0d 0a 20 20  qlChecker();..  
07f0: 20 20 20 20 69 66 20 28 74 72 65 65 2e 51 75 65      if (tree.Que
0800: 72 79 2e 41 63 63 65 70 74 3c 62 6f 6f 6c 3e 28  ry.Accept<bool>(
0810: 76 69 73 69 74 6f 72 29 29 0d 0a 20 20 20 20 20  visitor))..     
0820: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 65 65   {..        tree
0830: 20 3d 20 73 71 6c 38 72 65 77 72 69 74 65 72 2e   = sql8rewriter.
0840: 49 6e 76 6f 6b 65 4d 65 6d 62 65 72 28 22 52 65  InvokeMember("Re
0850: 77 72 69 74 65 22 2c 20 53 79 73 74 65 6d 2e 52  write", System.R
0860: 65 66 6c 65 63 74 69 6f 6e 2e 42 69 6e 64 69 6e  eflection.Bindin
0870: 67 46 6c 61 67 73 2e 4e 6f 6e 50 75 62 6c 69 63  gFlags.NonPublic
0880: 20 7c 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63   | System.Reflec
0890: 74 69 6f 6e 2e 42 69 6e 64 69 6e 67 46 6c 61 67  tion.BindingFlag
08a0: 73 2e 49 6e 76 6f 6b 65 4d 65 74 68 6f 64 20 7c  s.InvokeMethod |
08b0: 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69   System.Reflecti
08c0: 6f 6e 2e 42 69 6e 64 69 6e 67 46 6c 61 67 73 2e  on.BindingFlags.
08d0: 53 74 61 74 69 63 2c 20 6e 75 6c 6c 2c 20 6e 75  Static, null, nu
08e0: 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  ll, new object[]
08f0: 20 7b 20 74 72 65 65 20 7d 29 20 61 73 20 44 62   { tree }) as Db
0900: 51 75 65 72 79 43 6f 6d 6d 61 6e 64 54 72 65 65  QueryCommandTree
0910: 3b 0d 0a 20 20 20 20 20 20 7d 20 20 20 20 20 20  ;..      }      
0920: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74  ..      return t
0930: 72 65 65 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  ree;..    }..#en
0940: 64 69 66 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69  dif....    publi
0950: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
0960: 56 69 73 69 74 28 44 62 41 6e 64 45 78 70 72 65  Visit(DbAndExpre
0970: 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ssion expression
0980: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
0990: 72 65 74 75 72 6e 20 56 69 73 69 74 42 69 6e 61  return VisitBina
09a0: 72 79 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70  ryExpression(exp
09b0: 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d  ression);..    }
09c0: 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ....    public o
09d0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73  verride bool Vis
09e0: 69 74 28 44 62 41 70 70 6c 79 45 78 70 72 65 73  it(DbApplyExpres
09f0: 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29  sion expression)
0a00: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74  ..    {..      t
0a10: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70  hrow new NotSupp
0a20: 6f 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28 22  ortedException("
0a30: 61 70 70 6c 79 20 65 78 70 72 65 73 73 69 6f 6e  apply expression
0a40: 22 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ");..    }....  
0a50: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
0a60: 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 41  e bool Visit(DbA
0a70: 72 69 74 68 6d 65 74 69 63 45 78 70 72 65 73 73  rithmeticExpress
0a80: 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d  ion expression).
0a90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
0aa0: 74 75 72 6e 20 56 69 73 69 74 45 78 70 72 65 73  turn VisitExpres
0ab0: 73 69 6f 6e 4c 69 73 74 28 65 78 70 72 65 73 73  sionList(express
0ac0: 69 6f 6e 2e 41 72 67 75 6d 65 6e 74 73 29 3b 0d  ion.Arguments);.
0ad0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75  .    }....    pu
0ae0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f  blic override bo
0af0: 6f 6c 20 56 69 73 69 74 28 44 62 43 61 73 65 45  ol Visit(DbCaseE
0b00: 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65 73  xpression expres
0b10: 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sion)..    {..  
0b20: 20 20 20 20 62 6f 6f 6c 20 66 6c 61 67 31 20 3d      bool flag1 =
0b30: 20 56 69 73 69 74 45 78 70 72 65 73 73 69 6f 6e   VisitExpression
0b40: 4c 69 73 74 28 65 78 70 72 65 73 73 69 6f 6e 2e  List(expression.
0b50: 57 68 65 6e 29 3b 0d 0a 20 20 20 20 20 20 62 6f  When);..      bo
0b60: 6f 6c 20 66 6c 61 67 32 20 3d 20 56 69 73 69 74  ol flag2 = Visit
0b70: 45 78 70 72 65 73 73 69 6f 6e 4c 69 73 74 28 65  ExpressionList(e
0b80: 78 70 72 65 73 73 69 6f 6e 2e 54 68 65 6e 29 3b  xpression.Then);
0b90: 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61  ..      bool fla
0ba0: 67 33 20 3d 20 56 69 73 69 74 45 78 70 72 65 73  g3 = VisitExpres
0bb0: 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e 2e  sion(expression.
0bc0: 45 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Else);....      
0bd0: 72 65 74 75 72 6e 20 28 66 6c 61 67 31 20 7c 7c  return (flag1 ||
0be0: 20 66 6c 61 67 32 20 7c 7c 20 66 6c 61 67 33 29   flag2 || flag3)
0bf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
0c00: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
0c10: 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 43 61 73  bool Visit(DbCas
0c20: 74 45 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  tExpression expr
0c30: 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a  ession)..    {..
0c40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 69 73        return Vis
0c50: 69 74 55 6e 61 72 79 45 78 70 72 65 73 73 69 6f  itUnaryExpressio
0c60: 6e 28 65 78 70 72 65 73 73 69 6f 6e 29 3b 0d 0a  n(expression);..
0c70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62      }....    pub
0c80: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
0c90: 6c 20 56 69 73 69 74 28 44 62 43 6f 6d 70 61 72  l Visit(DbCompar
0ca0: 69 73 6f 6e 45 78 70 72 65 73 73 69 6f 6e 20 65  isonExpression e
0cb0: 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20  xpression)..    
0cc0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
0cd0: 56 69 73 69 74 42 69 6e 61 72 79 45 78 70 72 65  VisitBinaryExpre
0ce0: 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e  ssion(expression
0cf0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
0d00: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
0d10: 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 43 6f   bool Visit(DbCo
0d20: 6e 73 74 61 6e 74 45 78 70 72 65 73 73 69 6f 6e  nstantExpression
0d30: 20 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20   expression)..  
0d40: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
0d50: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d  n false;..    }.
0d60: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  ...    public ov
0d70: 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69  erride bool Visi
0d80: 74 28 44 62 43 72 6f 73 73 4a 6f 69 6e 45 78 70  t(DbCrossJoinExp
0d90: 72 65 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69  ression expressi
0da0: 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  on)..    {..    
0db0: 20 20 72 65 74 75 72 6e 20 56 69 73 69 74 45 78    return VisitEx
0dc0: 70 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 4c  pressionBindingL
0dd0: 69 73 74 28 65 78 70 72 65 73 73 69 6f 6e 2e 49  ist(expression.I
0de0: 6e 70 75 74 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nputs);..    }..
0df0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
0e00: 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74  rride bool Visit
0e10: 28 44 62 44 65 72 65 66 45 78 70 72 65 73 73 69  (DbDerefExpressi
0e20: 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a  on expression)..
0e30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
0e40: 75 72 6e 20 56 69 73 69 74 55 6e 61 72 79 45 78  urn VisitUnaryEx
0e50: 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65 73 73  pression(express
0e60: 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ion);..    }....
0e70: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
0e80: 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44  ide bool Visit(D
0e90: 62 44 69 73 74 69 6e 63 74 45 78 70 72 65 73 73  bDistinctExpress
0ea0: 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d  ion expression).
0eb0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
0ec0: 74 75 72 6e 20 56 69 73 69 74 55 6e 61 72 79 45  turn VisitUnaryE
0ed0: 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65 73  xpression(expres
0ee0: 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  sion);..    }...
0ef0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
0f00: 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28  ride bool Visit(
0f10: 44 62 45 6c 65 6d 65 6e 74 45 78 70 72 65 73 73  DbElementExpress
0f20: 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d  ion expression).
0f30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
0f40: 74 75 72 6e 20 56 69 73 69 74 55 6e 61 72 79 45  turn VisitUnaryE
0f50: 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65 73  xpression(expres
0f60: 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  sion);..    }...
0f70: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
0f80: 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28  ride bool Visit(
0f90: 44 62 45 6e 74 69 74 79 52 65 66 45 78 70 72 65  DbEntityRefExpre
0fa0: 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ssion expression
0fb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
0fc0: 72 65 74 75 72 6e 20 56 69 73 69 74 55 6e 61 72  return VisitUnar
0fd0: 79 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72  yExpression(expr
0fe0: 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d  ession);..    }.
0ff0: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  ...    public ov
1000: 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69  erride bool Visi
1010: 74 28 44 62 45 78 63 65 70 74 45 78 70 72 65 73  t(DbExceptExpres
1020: 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29  sion expression)
1030: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62  ..    {..      b
1040: 6f 6f 6c 20 66 6c 61 67 31 20 3d 20 56 69 73 69  ool flag1 = Visi
1050: 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72  tExpression(expr
1060: 65 73 73 69 6f 6e 2e 4c 65 66 74 29 3b 0d 0a 20  ession.Left);.. 
1070: 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61 67 32 20       bool flag2 
1080: 3d 20 56 69 73 69 74 45 78 70 72 65 73 73 69 6f  = VisitExpressio
1090: 6e 28 65 78 70 72 65 73 73 69 6f 6e 2e 52 69 67  n(expression.Rig
10a0: 68 74 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ht);..      retu
10b0: 72 6e 20 28 66 6c 61 67 31 20 7c 7c 20 66 6c 61  rn (flag1 || fla
10c0: 67 32 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  g2);..    }.... 
10d0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
10e0: 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62  de bool Visit(Db
10f0: 45 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65  Expression expre
1100: 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssion)..    {.. 
1110: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
1120: 6f 74 53 75 70 70 6f 72 74 65 64 45 78 63 65 70  otSupportedExcep
1130: 74 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e 2e  tion(expression.
1140: 47 65 74 54 79 70 65 28 29 2e 46 75 6c 6c 4e 61  GetType().FullNa
1150: 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  me);..    }.... 
1160: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
1170: 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62  de bool Visit(Db
1180: 46 69 6c 74 65 72 45 78 70 72 65 73 73 69 6f 6e  FilterExpression
1190: 20 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20   expression)..  
11a0: 20 20 7b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20    {..      bool 
11b0: 66 6c 61 67 31 20 3d 20 56 69 73 69 74 45 78 70  flag1 = VisitExp
11c0: 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 28 65  ressionBinding(e
11d0: 78 70 72 65 73 73 69 6f 6e 2e 49 6e 70 75 74 29  xpression.Input)
11e0: 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c  ;..      bool fl
11f0: 61 67 32 20 3d 20 56 69 73 69 74 45 78 70 72 65  ag2 = VisitExpre
1200: 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e  ssion(expression
1210: 2e 50 72 65 64 69 63 61 74 65 29 3b 0d 0a 0d 0a  .Predicate);....
1220: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c        return (fl
1230: 61 67 31 20 7c 7c 20 66 6c 61 67 32 29 3b 0d 0a  ag1 || flag2);..
1240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62      }....    pub
1250: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
1260: 6c 20 56 69 73 69 74 28 44 62 46 75 6e 63 74 69  l Visit(DbFuncti
1270: 6f 6e 45 78 70 72 65 73 73 69 6f 6e 20 65 78 70  onExpression exp
1280: 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d  ression)..    {.
1290: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 69  .      return Vi
12a0: 73 69 74 45 78 70 72 65 73 73 69 6f 6e 4c 69 73  sitExpressionLis
12b0: 74 28 65 78 70 72 65 73 73 69 6f 6e 2e 41 72 67  t(expression.Arg
12c0: 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 7d 0d  uments);..    }.
12d0: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  ...    public ov
12e0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69  erride bool Visi
12f0: 74 28 44 62 47 72 6f 75 70 42 79 45 78 70 72 65  t(DbGroupByExpre
1300: 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ssion expression
1310: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1320: 62 6f 6f 6c 20 66 6c 61 67 31 20 3d 20 56 69 73  bool flag1 = Vis
1330: 69 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70  itExpression(exp
1340: 72 65 73 73 69 6f 6e 2e 49 6e 70 75 74 2e 45 78  ression.Input.Ex
1350: 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20  pression);..    
1360: 20 20 62 6f 6f 6c 20 66 6c 61 67 32 20 3d 20 56    bool flag2 = V
1370: 69 73 69 74 45 78 70 72 65 73 73 69 6f 6e 4c 69  isitExpressionLi
1380: 73 74 28 65 78 70 72 65 73 73 69 6f 6e 2e 4b 65  st(expression.Ke
1390: 79 73 29 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c  ys);..      bool
13a0: 20 66 6c 61 67 33 20 3d 20 56 69 73 69 74 41 67   flag3 = VisitAg
13b0: 67 72 65 67 61 74 65 4c 69 73 74 28 65 78 70 72  gregateList(expr
13c0: 65 73 73 69 6f 6e 2e 41 67 67 72 65 67 61 74 65  ession.Aggregate
13d0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  s);....      ret
13e0: 75 72 6e 20 28 66 6c 61 67 31 20 7c 7c 20 66 6c  urn (flag1 || fl
13f0: 61 67 32 20 7c 7c 20 66 6c 61 67 33 29 3b 0d 0a  ag2 || flag3);..
1400: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62      }....    pub
1410: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
1420: 6c 20 56 69 73 69 74 28 44 62 49 6e 74 65 72 73  l Visit(DbInters
1430: 65 63 74 45 78 70 72 65 73 73 69 6f 6e 20 65 78  ectExpression ex
1440: 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b  pression)..    {
1450: 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61  ..      bool fla
1460: 67 31 20 3d 20 56 69 73 69 74 45 78 70 72 65 73  g1 = VisitExpres
1470: 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e 2e  sion(expression.
1480: 4c 65 66 74 29 3b 0d 0a 20 20 20 20 20 20 62 6f  Left);..      bo
1490: 6f 6c 20 66 6c 61 67 32 20 3d 20 56 69 73 69 74  ol flag2 = Visit
14a0: 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65  Expression(expre
14b0: 73 73 69 6f 6e 2e 52 69 67 68 74 29 3b 0d 0a 20  ssion.Right);.. 
14c0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c 61       return (fla
14d0: 67 31 20 7c 7c 20 66 6c 61 67 32 29 3b 0d 0a 20  g1 || flag2);.. 
14e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c     }....    publ
14f0: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
1500: 20 56 69 73 69 74 28 44 62 49 73 45 6d 70 74 79   Visit(DbIsEmpty
1510: 45 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65  Expression expre
1520: 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssion)..    {.. 
1530: 20 20 20 20 20 72 65 74 75 72 6e 20 56 69 73 69       return Visi
1540: 74 55 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e  tUnaryExpression
1550: 28 65 78 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20  (expression);.. 
1560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c     }....    publ
1570: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
1580: 20 56 69 73 69 74 28 44 62 49 73 4e 75 6c 6c 45   Visit(DbIsNullE
1590: 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65 73  xpression expres
15a0: 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sion)..    {..  
15b0: 20 20 20 20 72 65 74 75 72 6e 20 56 69 73 69 74      return Visit
15c0: 55 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e 28  UnaryExpression(
15d0: 65 78 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20  expression);..  
15e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69    }....    publi
15f0: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
1600: 56 69 73 69 74 28 44 62 49 73 4f 66 45 78 70 72  Visit(DbIsOfExpr
1610: 65 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f  ession expressio
1620: 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  n)..    {..     
1630: 20 72 65 74 75 72 6e 20 56 69 73 69 74 55 6e 61   return VisitUna
1640: 72 79 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70  ryExpression(exp
1650: 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d  ression);..    }
1660: 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ....    public o
1670: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73  verride bool Vis
1680: 69 74 28 44 62 4a 6f 69 6e 45 78 70 72 65 73 73  it(DbJoinExpress
1690: 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d  ion expression).
16a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 6f  .    {..      bo
16b0: 6f 6c 20 66 6c 61 67 31 20 3d 20 56 69 73 69 74  ol flag1 = Visit
16c0: 45 78 70 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e  ExpressionBindin
16d0: 67 28 65 78 70 72 65 73 73 69 6f 6e 2e 4c 65 66  g(expression.Lef
16e0: 74 29 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20  t);..      bool 
16f0: 66 6c 61 67 32 20 3d 20 56 69 73 69 74 45 78 70  flag2 = VisitExp
1700: 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 28 65  ressionBinding(e
1710: 78 70 72 65 73 73 69 6f 6e 2e 52 69 67 68 74 29  xpression.Right)
1720: 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c  ;..      bool fl
1730: 61 67 33 20 3d 20 56 69 73 69 74 45 78 70 72 65  ag3 = VisitExpre
1740: 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e  ssion(expression
1750: 2e 4a 6f 69 6e 43 6f 6e 64 69 74 69 6f 6e 29 3b  .JoinCondition);
1760: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  ..      return (
1770: 66 6c 61 67 31 20 7c 7c 20 66 6c 61 67 32 20 7c  flag1 || flag2 |
1780: 7c 20 66 6c 61 67 33 29 3b 0d 0a 20 20 20 20 7d  | flag3);..    }
1790: 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ....    public o
17a0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73  verride bool Vis
17b0: 69 74 28 44 62 4c 69 6b 65 45 78 70 72 65 73 73  it(DbLikeExpress
17c0: 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d  ion expression).
17d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 6f  .    {..      bo
17e0: 6f 6c 20 66 6c 61 67 31 20 3d 20 56 69 73 69 74  ol flag1 = Visit
17f0: 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65  Expression(expre
1800: 73 73 69 6f 6e 2e 41 72 67 75 6d 65 6e 74 29 3b  ssion.Argument);
1810: 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61  ..      bool fla
1820: 67 32 20 3d 20 56 69 73 69 74 45 78 70 72 65 73  g2 = VisitExpres
1830: 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e 2e  sion(expression.
1840: 50 61 74 74 65 72 6e 29 3b 0d 0a 20 20 20 20 20  Pattern);..     
1850: 20 62 6f 6f 6c 20 66 6c 61 67 33 20 3d 20 56 69   bool flag3 = Vi
1860: 73 69 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78  sitExpression(ex
1870: 70 72 65 73 73 69 6f 6e 2e 45 73 63 61 70 65 29  pression.Escape)
1880: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
1890: 28 66 6c 61 67 31 20 7c 7c 20 66 6c 61 67 32 20  (flag1 || flag2 
18a0: 7c 7c 20 66 6c 61 67 33 29 3b 0d 0a 20 20 20 20  || flag3);..    
18b0: 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  }....    public 
18c0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69  override bool Vi
18d0: 73 69 74 28 44 62 4c 69 6d 69 74 45 78 70 72 65  sit(DbLimitExpre
18e0: 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ssion expression
18f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1900: 72 65 74 75 72 6e 20 56 69 73 69 74 45 78 70 72  return VisitExpr
1910: 65 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f  ession(expressio
1920: 6e 2e 41 72 67 75 6d 65 6e 74 29 3b 0d 0a 20 20  n.Argument);..  
1930: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69    }....    publi
1940: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
1950: 56 69 73 69 74 28 44 62 4e 65 77 49 6e 73 74 61  Visit(DbNewInsta
1960: 6e 63 65 45 78 70 72 65 73 73 69 6f 6e 20 65 78  nceExpression ex
1970: 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b  pression)..    {
1980: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56  ..      return V
1990: 69 73 69 74 45 78 70 72 65 73 73 69 6f 6e 4c 69  isitExpressionLi
19a0: 73 74 28 65 78 70 72 65 73 73 69 6f 6e 2e 41 72  st(expression.Ar
19b0: 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 7d  guments);..    }
19c0: 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ....    public o
19d0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73  verride bool Vis
19e0: 69 74 28 44 62 4e 6f 74 45 78 70 72 65 73 73 69  it(DbNotExpressi
19f0: 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a  on expression)..
1a00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
1a10: 75 72 6e 20 56 69 73 69 74 55 6e 61 72 79 45 78  urn VisitUnaryEx
1a20: 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65 73 73  pression(express
1a30: 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ion);..    }....
1a40: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
1a50: 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44  ide bool Visit(D
1a60: 62 4e 75 6c 6c 45 78 70 72 65 73 73 69 6f 6e 20  bNullExpression 
1a70: 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20  expression)..   
1a80: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
1a90: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a   false;..    }..
1aa0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
1ab0: 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74  rride bool Visit
1ac0: 28 44 62 4f 66 54 79 70 65 45 78 70 72 65 73 73  (DbOfTypeExpress
1ad0: 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d  ion expression).
1ae0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
1af0: 74 75 72 6e 20 56 69 73 69 74 55 6e 61 72 79 45  turn VisitUnaryE
1b00: 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72 65 73  xpression(expres
1b10: 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  sion);..    }...
1b20: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
1b30: 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28  ride bool Visit(
1b40: 44 62 4f 72 45 78 70 72 65 73 73 69 6f 6e 20 65  DbOrExpression e
1b50: 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20  xpression)..    
1b60: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
1b70: 56 69 73 69 74 42 69 6e 61 72 79 45 78 70 72 65  VisitBinaryExpre
1b80: 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e  ssion(expression
1b90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
1ba0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
1bb0: 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 50 61   bool Visit(DbPa
1bc0: 72 61 6d 65 74 65 72 52 65 66 65 72 65 6e 63 65  rameterReference
1bd0: 45 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65  Expression expre
1be0: 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssion)..    {.. 
1bf0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1c00: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
1c10: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
1c20: 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 50 72   bool Visit(DbPr
1c30: 6f 6a 65 63 74 45 78 70 72 65 73 73 69 6f 6e 20  ojectExpression 
1c40: 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20  expression)..   
1c50: 20 7b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66   {..      bool f
1c60: 6c 61 67 31 20 3d 20 56 69 73 69 74 45 78 70 72  lag1 = VisitExpr
1c70: 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 28 65 78  essionBinding(ex
1c80: 70 72 65 73 73 69 6f 6e 2e 49 6e 70 75 74 29 3b  pression.Input);
1c90: 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61  ..      bool fla
1ca0: 67 32 20 3d 20 56 69 73 69 74 45 78 70 72 65 73  g2 = VisitExpres
1cb0: 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e 2e  sion(expression.
1cc0: 50 72 6f 6a 65 63 74 69 6f 6e 29 3b 0d 0a 20 20  Projection);..  
1cd0: 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c 61 67      return (flag
1ce0: 31 20 7c 7c 20 66 6c 61 67 32 29 3b 0d 0a 20 20  1 || flag2);..  
1cf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69    }....    publi
1d00: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
1d10: 56 69 73 69 74 28 44 62 50 72 6f 70 65 72 74 79  Visit(DbProperty
1d20: 45 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65  Expression expre
1d30: 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssion)..    {.. 
1d40: 20 20 20 20 20 72 65 74 75 72 6e 20 56 69 73 69       return Visi
1d50: 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72  tExpression(expr
1d60: 65 73 73 69 6f 6e 2e 49 6e 73 74 61 6e 63 65 29  ession.Instance)
1d70: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1d80: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
1d90: 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 51 75 61  bool Visit(DbQua
1da0: 6e 74 69 66 69 65 72 45 78 70 72 65 73 73 69 6f  ntifierExpressio
1db0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20  n expression).. 
1dc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c     {..      bool
1dd0: 20 66 6c 61 67 31 20 3d 20 56 69 73 69 74 45 78   flag1 = VisitEx
1de0: 70 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 28  pressionBinding(
1df0: 65 78 70 72 65 73 73 69 6f 6e 2e 49 6e 70 75 74  expression.Input
1e00: 29 3b 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66  );..      bool f
1e10: 6c 61 67 32 20 3d 20 56 69 73 69 74 45 78 70 72  lag2 = VisitExpr
1e20: 65 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f  ession(expressio
1e30: 6e 2e 50 72 65 64 69 63 61 74 65 29 3b 0d 0a 20  n.Predicate);.. 
1e40: 20 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c 61       return (fla
1e50: 67 31 20 7c 7c 20 66 6c 61 67 32 29 3b 0d 0a 20  g1 || flag2);.. 
1e60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c     }....    publ
1e70: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
1e80: 20 56 69 73 69 74 28 44 62 52 65 66 45 78 70 72   Visit(DbRefExpr
1e90: 65 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f  ession expressio
1ea0: 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  n)..    {..     
1eb0: 20 72 65 74 75 72 6e 20 56 69 73 69 74 55 6e 61   return VisitUna
1ec0: 72 79 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70  ryExpression(exp
1ed0: 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d  ression);..    }
1ee0: 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ....    public o
1ef0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73  verride bool Vis
1f00: 69 74 28 44 62 52 65 66 4b 65 79 45 78 70 72 65  it(DbRefKeyExpre
1f10: 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ssion expression
1f20: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1f30: 72 65 74 75 72 6e 20 56 69 73 69 74 55 6e 61 72  return VisitUnar
1f40: 79 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72  yExpression(expr
1f50: 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d  ession);..    }.
1f60: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  ...    public ov
1f70: 65 72 72 69 64 65 20 62 6f 6f 6c 20 56 69 73 69  erride bool Visi
1f80: 74 28 44 62 52 65 6c 61 74 69 6f 6e 73 68 69 70  t(DbRelationship
1f90: 4e 61 76 69 67 61 74 69 6f 6e 45 78 70 72 65 73  NavigationExpres
1fa0: 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29  sion expression)
1fb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
1fc0: 65 74 75 72 6e 20 56 69 73 69 74 45 78 70 72 65  eturn VisitExpre
1fd0: 73 73 69 6f 6e 28 65 78 70 72 65 73 73 69 6f 6e  ssion(expression
1fe0: 2e 4e 61 76 69 67 61 74 69 6f 6e 53 6f 75 72 63  .NavigationSourc
1ff0: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
2000: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2010: 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 53  e bool Visit(DbS
2020: 63 61 6e 45 78 70 72 65 73 73 69 6f 6e 20 65 78  canExpression ex
2030: 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b  pression)..    {
2040: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
2050: 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alse;..    }....
2060: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
2070: 69 64 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44  ide bool Visit(D
2080: 62 53 6b 69 70 45 78 70 72 65 73 73 69 6f 6e 20  bSkipExpression 
2090: 65 78 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20  expression)..   
20a0: 20 7b 0d 0a 20 20 20 20 20 20 56 69 73 69 74 45   {..      VisitE
20b0: 78 70 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67  xpressionBinding
20c0: 28 65 78 70 72 65 73 73 69 6f 6e 2e 49 6e 70 75  (expression.Inpu
20d0: 74 29 3b 0d 0a 20 20 20 20 20 20 56 69 73 69 74  t);..      Visit
20e0: 53 6f 72 74 43 6c 61 75 73 65 4c 69 73 74 28 65  SortClauseList(e
20f0: 78 70 72 65 73 73 69 6f 6e 2e 53 6f 72 74 4f 72  xpression.SortOr
2100: 64 65 72 29 3b 0d 0a 20 20 20 20 20 20 56 69 73  der);..      Vis
2110: 69 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70  itExpression(exp
2120: 72 65 73 73 69 6f 6e 2e 43 6f 75 6e 74 29 3b 0d  ression.Count);.
2130: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72  .      return tr
2140: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
2150: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2160: 65 20 62 6f 6f 6c 20 56 69 73 69 74 28 44 62 53  e bool Visit(DbS
2170: 6f 72 74 45 78 70 72 65 73 73 69 6f 6e 20 65 78  ortExpression ex
2180: 70 72 65 73 73 69 6f 6e 29 0d 0a 20 20 20 20 7b  pression)..    {
2190: 0d 0a 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61  ..      bool fla
21a0: 67 31 20 3d 20 56 69 73 69 74 45 78 70 72 65 73  g1 = VisitExpres
21b0: 73 69 6f 6e 42 69 6e 64 69 6e 67 28 65 78 70 72  sionBinding(expr
21c0: 65 73 73 69 6f 6e 2e 49 6e 70 75 74 29 3b 0d 0a  ession.Input);..
21d0: 20 20 20 20 20 20 62 6f 6f 6c 20 66 6c 61 67 32        bool flag2
21e0: 20 3d 20 56 69 73 69 74 53 6f 72 74 43 6c 61 75   = VisitSortClau
21f0: 73 65 4c 69 73 74 28 65 78 70 72 65 73 73 69 6f  seList(expressio
2200: 6e 2e 53 6f 72 74 4f 72 64 65 72 29 3b 0d 0a 20  n.SortOrder);.. 
2210: 20 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c 61       return (fla
2220: 67 31 20 7c 7c 20 66 6c 61 67 32 29 3b 0d 0a 20  g1 || flag2);.. 
2230: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c     }....    publ
2240: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
2250: 20 56 69 73 69 74 28 44 62 54 72 65 61 74 45 78   Visit(DbTreatEx
2260: 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65 73 73  pression express
2270: 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ion)..    {..   
2280: 20 20 20 72 65 74 75 72 6e 20 56 69 73 69 74 55     return VisitU
2290: 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e 28 65  naryExpression(e
22a0: 78 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20  xpression);..   
22b0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63   }....    public
22c0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 56   override bool V
22d0: 69 73 69 74 28 44 62 55 6e 69 6f 6e 41 6c 6c 45  isit(DbUnionAllE
22e0: 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 65 73  xpression expres
22f0: 73 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sion)..    {..  
2300: 20 20 20 20 72 65 74 75 72 6e 20 56 69 73 69 74      return Visit
2310: 42 69 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e  BinaryExpression
2320: 28 65 78 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20  (expression);.. 
2330: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 75 62 6c     }....    publ
2340: 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
2350: 20 56 69 73 69 74 28 44 62 56 61 72 69 61 62 6c   Visit(DbVariabl
2360: 65 52 65 66 65 72 65 6e 63 65 45 78 70 72 65 73  eReferenceExpres
2370: 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 29  sion expression)
2380: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
2390: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
23b0: 74 65 20 62 6f 6f 6c 20 56 69 73 69 74 41 67 67  te bool VisitAgg
23c0: 72 65 67 61 74 65 28 44 62 41 67 67 72 65 67 61  regate(DbAggrega
23d0: 74 65 20 61 67 67 72 65 67 61 74 65 29 0d 0a 20  te aggregate).. 
23e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
23f0: 72 6e 20 56 69 73 69 74 45 78 70 72 65 73 73 69  rn VisitExpressi
2400: 6f 6e 4c 69 73 74 28 61 67 67 72 65 67 61 74 65  onList(aggregate
2410: 2e 41 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20  .Arguments);..  
2420: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
2430: 74 65 20 62 6f 6f 6c 20 56 69 73 69 74 41 67 67  te bool VisitAgg
2440: 72 65 67 61 74 65 4c 69 73 74 28 49 4c 69 73 74  regateList(IList
2450: 3c 44 62 41 67 67 72 65 67 61 74 65 3e 20 6c 69  <DbAggregate> li
2460: 73 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  st)..    {..    
2470: 20 20 72 65 74 75 72 6e 20 56 69 73 69 74 4c 69    return VisitLi
2480: 73 74 3c 44 62 41 67 67 72 65 67 61 74 65 3e 28  st<DbAggregate>(
2490: 6e 65 77 20 4c 69 73 74 45 6c 65 6d 65 6e 74 48  new ListElementH
24a0: 61 6e 64 6c 65 72 3c 44 62 41 67 67 72 65 67 61  andler<DbAggrega
24b0: 74 65 3e 28 56 69 73 69 74 41 67 67 72 65 67 61  te>(VisitAggrega
24c0: 74 65 29 2c 20 6c 69 73 74 29 3b 0d 0a 20 20 20  te), list);..   
24d0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
24e0: 65 20 62 6f 6f 6c 20 56 69 73 69 74 42 69 6e 61  e bool VisitBina
24f0: 72 79 45 78 70 72 65 73 73 69 6f 6e 28 44 62 42  ryExpression(DbB
2500: 69 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e 20  inaryExpression 
2510: 65 78 70 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  expr)..    {..  
2520: 20 20 20 20 62 6f 6f 6c 20 66 6c 61 67 31 20 3d      bool flag1 =
2530: 20 56 69 73 69 74 45 78 70 72 65 73 73 69 6f 6e   VisitExpression
2540: 28 65 78 70 72 2e 4c 65 66 74 29 3b 0d 0a 20 20  (expr.Left);..  
2550: 20 20 20 20 62 6f 6f 6c 20 66 6c 61 67 32 20 3d      bool flag2 =
2560: 20 56 69 73 69 74 45 78 70 72 65 73 73 69 6f 6e   VisitExpression
2570: 28 65 78 70 72 2e 52 69 67 68 74 29 3b 0d 0a 20  (expr.Right);.. 
2580: 20 20 20 20 20 72 65 74 75 72 6e 20 28 66 6c 61       return (fla
2590: 67 31 20 7c 7c 20 66 6c 61 67 32 29 3b 0d 0a 20  g1 || flag2);.. 
25a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
25b0: 61 74 65 20 62 6f 6f 6c 20 56 69 73 69 74 45 78  ate bool VisitEx
25c0: 70 72 65 73 73 69 6f 6e 28 44 62 45 78 70 72 65  pression(DbExpre
25d0: 73 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ssion expression
25e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
25f0: 69 66 20 28 65 78 70 72 65 73 73 69 6f 6e 20 3d  if (expression =
2600: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
2610: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2620: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 7d   false;..      }
2630: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 65  ..      return e
2640: 78 70 72 65 73 73 69 6f 6e 2e 41 63 63 65 70 74  xpression.Accept
2650: 3c 62 6f 6f 6c 3e 28 74 68 69 73 29 3b 0d 0a 20  <bool>(this);.. 
2660: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
2670: 61 74 65 20 62 6f 6f 6c 20 56 69 73 69 74 45 78  ate bool VisitEx
2680: 70 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 28  pressionBinding(
2690: 44 62 45 78 70 72 65 73 73 69 6f 6e 42 69 6e 64  DbExpressionBind
26a0: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 42 69  ing expressionBi
26b0: 6e 64 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20  nding)..    {.. 
26c0: 20 20 20 20 20 72 65 74 75 72 6e 20 56 69 73 69       return Visi
26d0: 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78 70 72  tExpression(expr
26e0: 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67 2e 45 78  essionBinding.Ex
26f0: 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20  pression);..    
2700: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
2710: 20 62 6f 6f 6c 20 56 69 73 69 74 45 78 70 72 65   bool VisitExpre
2720: 73 73 69 6f 6e 42 69 6e 64 69 6e 67 4c 69 73 74  ssionBindingList
2730: 28 49 4c 69 73 74 3c 44 62 45 78 70 72 65 73 73  (IList<DbExpress
2740: 69 6f 6e 42 69 6e 64 69 6e 67 3e 20 6c 69 73 74  ionBinding> list
2750: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2760: 72 65 74 75 72 6e 20 56 69 73 69 74 4c 69 73 74  return VisitList
2770: 3c 44 62 45 78 70 72 65 73 73 69 6f 6e 42 69 6e  <DbExpressionBin
2780: 64 69 6e 67 3e 28 6e 65 77 20 4c 69 73 74 45 6c  ding>(new ListEl
2790: 65 6d 65 6e 74 48 61 6e 64 6c 65 72 3c 44 62 45  ementHandler<DbE
27a0: 78 70 72 65 73 73 69 6f 6e 42 69 6e 64 69 6e 67  xpressionBinding
27b0: 3e 28 56 69 73 69 74 45 78 70 72 65 73 73 69 6f  >(VisitExpressio
27c0: 6e 42 69 6e 64 69 6e 67 29 2c 20 6c 69 73 74 29  nBinding), list)
27d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
27e0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 56 69 73  private bool Vis
27f0: 69 74 45 78 70 72 65 73 73 69 6f 6e 4c 69 73 74  itExpressionList
2800: 28 49 4c 69 73 74 3c 44 62 45 78 70 72 65 73 73  (IList<DbExpress
2810: 69 6f 6e 3e 20 6c 69 73 74 29 0d 0a 20 20 20 20  ion> list)..    
2820: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
2830: 56 69 73 69 74 4c 69 73 74 3c 44 62 45 78 70 72  VisitList<DbExpr
2840: 65 73 73 69 6f 6e 3e 28 6e 65 77 20 4c 69 73 74  ession>(new List
2850: 45 6c 65 6d 65 6e 74 48 61 6e 64 6c 65 72 3c 44  ElementHandler<D
2860: 62 45 78 70 72 65 73 73 69 6f 6e 3e 28 56 69 73  bExpression>(Vis
2870: 69 74 45 78 70 72 65 73 73 69 6f 6e 29 2c 20 6c  itExpression), l
2880: 69 73 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ist);..    }....
2890: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28a0: 69 63 20 62 6f 6f 6c 20 56 69 73 69 74 4c 69 73  ic bool VisitLis
28b0: 74 3c 54 45 6c 65 6d 65 6e 74 54 79 70 65 3e 28  t<TElementType>(
28c0: 4c 69 73 74 45 6c 65 6d 65 6e 74 48 61 6e 64 6c  ListElementHandl
28d0: 65 72 3c 54 45 6c 65 6d 65 6e 74 54 79 70 65 3e  er<TElementType>
28e0: 20 68 61 6e 64 6c 65 72 2c 20 49 4c 69 73 74 3c   handler, IList<
28f0: 54 45 6c 65 6d 65 6e 74 54 79 70 65 3e 20 6c 69  TElementType> li
2900: 73 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  st)..    {..    
2910: 20 20 62 6f 6f 6c 20 66 6c 61 67 20 3d 20 66 61    bool flag = fa
2920: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 66 6f 72 65  lse;..      fore
2930: 61 63 68 20 28 54 45 6c 65 6d 65 6e 74 54 79 70  ach (TElementTyp
2940: 65 20 6c 6f 63 61 6c 20 69 6e 20 6c 69 73 74 29  e local in list)
2950: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2960: 20 20 20 62 6f 6f 6c 20 66 6c 61 67 32 20 3d 20     bool flag2 = 
2970: 68 61 6e 64 6c 65 72 28 6c 6f 63 61 6c 29 3b 0d  handler(local);.
2980: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 20 3d 20  .        flag = 
2990: 66 6c 61 67 20 7c 7c 20 66 6c 61 67 32 3b 0d 0a  flag || flag2;..
29a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72        }..      r
29b0: 65 74 75 72 6e 20 66 6c 61 67 3b 0d 0a 20 20 20  eturn flag;..   
29c0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
29d0: 65 20 62 6f 6f 6c 20 56 69 73 69 74 53 6f 72 74  e bool VisitSort
29e0: 43 6c 61 75 73 65 28 44 62 53 6f 72 74 43 6c 61  Clause(DbSortCla
29f0: 75 73 65 20 73 6f 72 74 43 6c 61 75 73 65 29 0d  use sortClause).
2a00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
2a10: 74 75 72 6e 20 56 69 73 69 74 45 78 70 72 65 73  turn VisitExpres
2a20: 73 69 6f 6e 28 73 6f 72 74 43 6c 61 75 73 65 2e  sion(sortClause.
2a30: 45 78 70 72 65 73 73 69 6f 6e 29 3b 0d 0a 20 20  Expression);..  
2a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
2a50: 74 65 20 62 6f 6f 6c 20 56 69 73 69 74 53 6f 72  te bool VisitSor
2a60: 74 43 6c 61 75 73 65 4c 69 73 74 28 49 4c 69 73  tClauseList(ILis
2a70: 74 3c 44 62 53 6f 72 74 43 6c 61 75 73 65 3e 20  t<DbSortClause> 
2a80: 6c 69 73 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  list)..    {..  
2a90: 20 20 20 20 72 65 74 75 72 6e 20 56 69 73 69 74      return Visit
2aa0: 4c 69 73 74 3c 44 62 53 6f 72 74 43 6c 61 75 73  List<DbSortClaus
2ab0: 65 3e 28 6e 65 77 20 4c 69 73 74 45 6c 65 6d 65  e>(new ListEleme
2ac0: 6e 74 48 61 6e 64 6c 65 72 3c 44 62 53 6f 72 74  ntHandler<DbSort
2ad0: 43 6c 61 75 73 65 3e 28 56 69 73 69 74 53 6f 72  Clause>(VisitSor
2ae0: 74 43 6c 61 75 73 65 29 2c 20 6c 69 73 74 29 3b  tClause), list);
2af0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
2b00: 72 69 76 61 74 65 20 62 6f 6f 6c 20 56 69 73 69  rivate bool Visi
2b10: 74 55 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e  tUnaryExpression
2b20: 28 44 62 55 6e 61 72 79 45 78 70 72 65 73 73 69  (DbUnaryExpressi
2b30: 6f 6e 20 65 78 70 72 29 0d 0a 20 20 20 20 7b 0d  on expr)..    {.
2b40: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 56 69  .      return Vi
2b50: 73 69 74 45 78 70 72 65 73 73 69 6f 6e 28 65 78  sitExpression(ex
2b60: 70 72 2e 41 72 67 75 6d 65 6e 74 29 3b 0d 0a 20  pr.Argument);.. 
2b70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
2b80: 61 74 65 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  ate delegate boo
2b90: 6c 20 4c 69 73 74 45 6c 65 6d 65 6e 74 48 61 6e  l ListElementHan
2ba0: 64 6c 65 72 3c 54 45 6c 65 6d 65 6e 74 54 79 70  dler<TElementTyp
2bb0: 65 3e 28 54 45 6c 65 6d 65 6e 74 54 79 70 65 20  e>(TElementType 
2bc0: 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 7d 0d 0a  element);..  }..
2bd0: 7d 0d 0a                                         }..