Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Eval() [2/3]

override object System.Data.FunctionNode.Eval ( DataRow row,
DataRowVersion version )
inlinepackage

Definition at line 127 of file FunctionNode.cs.

128 {
129 object[] array = new object[_argumentCount];
130 if (s_funcs[_info]._id == FunctionId.Convert)
131 {
132 if (_argumentCount != 2)
133 {
134 throw ExprException.FunctionArgumentCount(_name);
135 }
136 array[0] = _arguments[0].Eval(row, version);
138 }
139 else if (s_funcs[_info]._id != FunctionId.Iif)
140 {
141 for (int i = 0; i < _argumentCount; i++)
142 {
143 array[i] = _arguments[i].Eval(row, version);
144 if (!s_funcs[_info]._isValidateArguments)
145 {
146 continue;
147 }
148 if (array[i] == DBNull.Value || typeof(object) == s_funcs[_info]._parameters[i])
149 {
150 return DBNull.Value;
151 }
152 if (!(array[i].GetType() != s_funcs[_info]._parameters[i]))
153 {
154 continue;
155 }
156 if (s_funcs[_info]._parameters[i] == typeof(int) && ExpressionNode.IsInteger(DataStorage.GetStorageType(array[i].GetType())))
157 {
158 array[i] = Convert.ToInt32(array[i], base.FormatProvider);
159 continue;
160 }
161 if (s_funcs[_info]._id == FunctionId.Trim || s_funcs[_info]._id == FunctionId.Substring || s_funcs[_info]._id == FunctionId.Len)
162 {
163 if (typeof(string) != array[i].GetType() && typeof(SqlString) != array[i].GetType())
164 {
165 throw ExprException.ArgumentType(s_funcs[_info]._name, i + 1, s_funcs[_info]._parameters[i]);
166 }
167 continue;
168 }
169 throw ExprException.ArgumentType(s_funcs[_info]._name, i + 1, s_funcs[_info]._parameters[i]);
170 }
171 }
172 return EvalFunction(s_funcs[_info]._id, array, row, version);
173 }
static StorageType GetStorageType(Type dataType)
ExpressionNode(DataTable table)
object EvalFunction(FunctionId id, object[] argumentValues, DataRow row, DataRowVersion version)
Type GetDataType(ExpressionNode node)
static readonly Function[] s_funcs
readonly string _name
ExpressionNode[] _arguments

References System.Data.FunctionNode._argumentCount, System.Data.FunctionNode._arguments, System.Data.FunctionNode._info, System.Data.FunctionNode._name, System.Data.ExprException.ArgumentType(), System.array, System.Runtime.Serialization.Dictionary, System.Data.ExpressionNode.Eval(), System.Data.FunctionNode.EvalFunction(), System.Data.ExprException.FunctionArgumentCount(), System.Data.FunctionNode.GetDataType(), System.Data.Common.DataStorage.GetStorageType(), System.Data.ExpressionNode.IsInteger(), System.Data.FunctionNode.s_funcs, System.Convert.ToInt32(), and System.DBNull.Value.