1 //---------------------------------------------------------------------
2 // <copyright file="BuiltInExpr.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner  Microsoft
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
9 
10 namespace System.Data.Common.EntitySql.AST
11 {
12     using System;
13     using System.Globalization;
14     using System.Collections;
15     using System.Collections.Generic;
16     using System.Diagnostics;
17 
18     /// <summary>
19     /// Defines the function class of builtin expressions.
20     /// </summary>
21     internal enum BuiltInKind
22     {
23         And,
24         Or,
25         Not,
26 
27         Cast,
28         OfType,
29         Treat,
30         IsOf,
31 
32         Union,
33         UnionAll,
34         Intersect,
35         Overlaps,
36         AnyElement,
37         Element,
38         Except,
39         Exists,
40         Flatten,
41         In,
42         NotIn,
43         Distinct,
44 
45         IsNull,
46         IsNotNull,
47 
48         Like,
49 
50         Equal,
51         NotEqual,
52         LessEqual,
53         LessThan,
54         GreaterThan,
55         GreaterEqual,
56 
57         Plus,
58         Minus,
59         Multiply,
60         Divide,
61         Modulus,
62         UnaryMinus,
63         UnaryPlus,
64 
65         Between,
66         NotBetween
67     }
68 
69     /// <summary>
70     /// Represents a builtin expression ast node.
71     /// </summary>
72     internal sealed class BuiltInExpr : Node
73     {
BuiltInExpr(BuiltInKind kind, string name)74         private BuiltInExpr(BuiltInKind kind, string name)
75         {
76             Kind = kind;
77             Name = name.ToUpperInvariant();
78         }
79 
BuiltInExpr(BuiltInKind kind, string name, Node arg1)80         internal BuiltInExpr(BuiltInKind kind, string name, Node arg1)
81             : this(kind, name)
82         {
83             ArgCount = 1;
84             Arg1 = arg1;
85         }
86 
BuiltInExpr(BuiltInKind kind, string name, Node arg1, Node arg2)87         internal BuiltInExpr(BuiltInKind kind, string name, Node arg1, Node arg2)
88             : this(kind, name)
89         {
90             ArgCount = 2;
91             Arg1 = arg1;
92             Arg2 = arg2;
93         }
94 
BuiltInExpr(BuiltInKind kind, string name, Node arg1, Node arg2, Node arg3)95         internal BuiltInExpr(BuiltInKind kind, string name, Node arg1, Node arg2, Node arg3)
96             : this(kind, name)
97         {
98             ArgCount = 3;
99             Arg1 = arg1;
100             Arg2 = arg2;
101             Arg3 = arg3;
102         }
103 
BuiltInExpr(BuiltInKind kind, string name, Node arg1, Node arg2, Node arg3, Node arg4)104         internal BuiltInExpr(BuiltInKind kind, string name, Node arg1, Node arg2, Node arg3, Node arg4)
105             : this(kind, name)
106         {
107             ArgCount = 4;
108             Arg1 = arg1;
109             Arg2 = arg2;
110             Arg3 = arg3;
111             Arg4 = arg4;
112         }
113 
114         internal readonly BuiltInKind Kind;
115         internal readonly string Name;
116 
117         internal readonly int ArgCount;
118         internal readonly Node Arg1;
119         internal readonly Node Arg2;
120         internal readonly Node Arg3;
121         internal readonly Node Arg4;
122     }
123 }
124