Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
UnaryNode.cs
Go to the documentation of this file.
5
6namespace System.Data;
7
8internal sealed class UnaryNode : ExpressionNode
9{
10 internal readonly int _op;
11
13
15 : base(table)
16 {
17 _op = op;
18 _right = right;
19 }
20
21 internal override void Bind(DataTable table, List<DataColumn> list)
22 {
25 }
26
27 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
28 internal override object Eval()
29 {
30 return Eval(null, DataRowVersion.Default);
31 }
32
33 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
34 internal override object Eval(DataRow row, DataRowVersion version)
35 {
36 return EvalUnaryOp(_op, _right.Eval(row, version));
37 }
38
39 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
40 internal override object Eval(int[] recordNos)
41 {
42 return _right.Eval(recordNos);
43 }
44
45 private object EvalUnaryOp(int op, object vl)
46 {
47 object value = DBNull.Value;
49 {
50 return DBNull.Value;
51 }
52 switch (op)
53 {
54 case 0:
55 return vl;
56 case 2:
57 {
60 {
61 return vl;
62 }
64 }
65 case 1:
66 {
69 {
70 return storageType switch
71 {
72 StorageType.Byte => -(byte)vl,
73 StorageType.Int16 => -(short)vl,
74 StorageType.Int32 => -(int)vl,
75 StorageType.Int64 => -(long)vl,
76 StorageType.Single => 0f - (float)vl,
77 StorageType.Double => 0.0 - (double)vl,
78 StorageType.Decimal => -(decimal)vl,
79 StorageType.SqlDecimal => -(SqlDecimal)vl,
80 StorageType.SqlDouble => -(SqlDouble)vl,
81 StorageType.SqlSingle => -(SqlSingle)vl,
82 StorageType.SqlMoney => -(SqlMoney)vl,
83 StorageType.SqlInt64 => -(SqlInt64)vl,
84 StorageType.SqlInt32 => -(SqlInt32)vl,
85 StorageType.SqlInt16 => -(SqlInt16)vl,
86 _ => DBNull.Value,
87 };
88 }
90 }
91 case 3:
93 {
94 if (sqlBoolean.IsFalse)
95 {
96 return SqlBoolean.True;
97 }
98 if (((SqlBoolean)vl).IsTrue)
99 {
100 return SqlBoolean.False;
101 }
103 }
105 {
106 return false;
107 }
108 return true;
109 default:
111 }
112 }
113
114 internal override bool IsConstant()
115 {
116 return _right.IsConstant();
117 }
118
119 internal override bool IsTableConstant()
120 {
121 return _right.IsTableConstant();
122 }
123
124 internal override bool HasLocalAggregate()
125 {
126 return _right.HasLocalAggregate();
127 }
128
129 internal override bool HasRemoteAggregate()
130 {
131 return _right.HasRemoteAggregate();
132 }
133
134 internal override bool DependsOn(DataColumn column)
135 {
136 return _right.DependsOn(column);
137 }
138
139 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Evaluating constant expression is safe")]
140 internal override ExpressionNode Optimize()
141 {
143 if (IsConstant())
144 {
145 object constant = Eval();
146 return new ConstNode(base.table, ValueType.Object, constant, fParseQuotes: false);
147 }
148 return this;
149 }
150}
static readonly DBNull Value
Definition DBNull.cs:8
static StorageType GetStorageType(Type dataType)
static bool ToBoolean(object value)
static bool IsUnknown(object value)
static Exception TypeMismatch(string expr)
static Exception UnsupportedOperator(int op)
static bool IsNumericSql(StorageType type)
void Bind(DataTable table, List< DataColumn > list)
void BindTable(DataTable table)
virtual bool DependsOn(DataColumn column)
ExpressionNode Optimize()
override bool HasRemoteAggregate()
Definition UnaryNode.cs:129
override bool HasLocalAggregate()
Definition UnaryNode.cs:124
UnaryNode(DataTable table, int op, ExpressionNode right)
Definition UnaryNode.cs:14
override object Eval(DataRow row, DataRowVersion version)
Definition UnaryNode.cs:34
override bool IsTableConstant()
Definition UnaryNode.cs:119
override ExpressionNode Optimize()
Definition UnaryNode.cs:140
override bool IsConstant()
Definition UnaryNode.cs:114
override void Bind(DataTable table, List< DataColumn > list)
Definition UnaryNode.cs:21
override object Eval()
Definition UnaryNode.cs:28
ExpressionNode _right
Definition UnaryNode.cs:12
override object Eval(int[] recordNos)
Definition UnaryNode.cs:40
readonly int _op
Definition UnaryNode.cs:10
override bool DependsOn(DataColumn column)
Definition UnaryNode.cs:134
object EvalUnaryOp(int op, object vl)
Definition UnaryNode.cs:45
static readonly SqlBoolean True
Definition SqlBoolean.cs:17
static readonly SqlBoolean False
Definition SqlBoolean.cs:19