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