1 using System;
2 using System.Collections.Generic;
3 using System.Data;
4 using System.Data.SqlClient;
5 using System.Linq.Expressions;
6 using System.Linq;
7 using System.Reflection;
8 using System.Text;
9 using System.Data.Linq;
10 
11 namespace System.Data.Linq.SqlClient {
12 
13     // SQL Client extensions to ExpressionType
14     internal enum InternalExpressionType {
15         Known = 2000,
16         LinkedTable = 2001
17     }
18 
19     abstract internal class InternalExpression : Expression {
20 #pragma warning disable 618 // Disable the 'obsolete' warning.
InternalExpression(InternalExpressionType nt, Type type)21         internal InternalExpression(InternalExpressionType nt, Type type)
22             : base ((ExpressionType)nt, type) {
23         }
24 #pragma warning restore 618
Known(SqlExpression expr)25         internal static KnownExpression Known(SqlExpression expr) {
26             return new KnownExpression(expr, expr.ClrType);
27         }
Known(SqlNode node, Type type)28         internal static KnownExpression Known(SqlNode node, Type type) {
29             return new KnownExpression(node, type);
30         }
31     }
32 
33     internal sealed class KnownExpression : InternalExpression {
34         SqlNode node;
KnownExpression(SqlNode node, Type type)35         internal KnownExpression(SqlNode node, Type type)
36             : base(InternalExpressionType.Known, type) {
37             this.node = node;
38         }
39         internal SqlNode Node {
40             get { return this.node; }
41         }
42     }
43 
44     internal sealed class LinkedTableExpression : InternalExpression {
45         private SqlLink link;
46         private ITable table;
LinkedTableExpression(SqlLink link, ITable table, Type type)47         internal LinkedTableExpression(SqlLink link, ITable table, Type type)
48             : base(InternalExpressionType.LinkedTable, type) {
49             this.link = link;
50             this.table = table;
51         }
52         internal SqlLink Link {
53             get {return this.link;}
54         }
55         internal ITable Table {
56             get {return this.table;}
57         }
58     }
59 
60 }
61