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

◆ Eval()

int System.Data.Select.Eval ( BinaryNode expr,
DataRow row,
DataRowVersion version )
inlineprivate

Definition at line 605 of file Select.cs.

606 {
607 if (expr._op == 26)
608 {
609 int num = Eval((BinaryNode)expr._left, row, version);
610 if (num != 0)
611 {
612 return num;
613 }
614 int num2 = Eval((BinaryNode)expr._right, row, version);
615 if (num2 != 0)
616 {
617 return num2;
618 }
619 return 0;
620 }
621 long num3 = 0L;
622 object obj = expr._left.Eval(row, version);
623 if (expr._op != 13 && expr._op != 39)
624 {
625 object obj2 = expr._right.Eval(row, version);
626 bool flag = expr._left is ConstNode;
627 bool flag2 = expr._right is ConstNode;
628 if (obj == DBNull.Value || (expr._left.IsSqlColumn && DataStorage.IsObjectSqlNull(obj)))
629 {
630 return -1;
631 }
632 if (obj2 == DBNull.Value || (expr._right.IsSqlColumn && DataStorage.IsObjectSqlNull(obj2)))
633 {
634 return 1;
635 }
637 if (StorageType.Char == storageType)
638 {
639 obj2 = ((!flag2 && expr._right.IsSqlColumn) ? SqlConvert.ChangeType2(obj2, StorageType.Char, typeof(char), _table.FormatProvider) : ((object)Convert.ToChar(obj2, _table.FormatProvider)));
640 }
642 StorageType storageType3 = ((!expr._left.IsSqlColumn && !expr._right.IsSqlColumn) ? expr.ResultType(storageType, storageType2, flag, flag2, expr._op) : expr.ResultSqlType(storageType, storageType2, flag, flag2, expr._op));
643 if (storageType3 == StorageType.Empty)
644 {
645 expr.SetTypeMismatchError(expr._op, obj.GetType(), obj2.GetType());
646 }
647 NameNode nameNode = null;
648 CompareInfo comparer = (((flag && !flag2 && storageType == StorageType.String && storageType2 == StorageType.Guid && expr._right is NameNode nameNode2 && nameNode2._column.DataType == typeof(Guid)) || (flag2 && !flag && storageType2 == StorageType.String && storageType == StorageType.Guid && expr._left is NameNode nameNode3 && nameNode3._column.DataType == typeof(Guid))) ? CultureInfo.InvariantCulture.CompareInfo : null);
649 num3 = expr.BinaryCompare(obj, obj2, storageType3, expr._op, comparer);
650 }
651 switch (expr._op)
652 {
653 case 7:
654 num3 = ((num3 != 0L) ? ((num3 >= 0) ? 1 : (-1)) : 0);
655 break;
656 case 8:
657 num3 = ((num3 <= 0) ? (-1) : 0);
658 break;
659 case 9:
660 num3 = ((num3 >= 0) ? 1 : 0);
661 break;
662 case 10:
663 num3 = ((num3 < 0) ? (-1) : 0);
664 break;
665 case 11:
666 num3 = ((num3 > 0) ? 1 : 0);
667 break;
668 case 13:
669 num3 = ((obj != DBNull.Value) ? (-1) : 0);
670 break;
671 case 39:
672 num3 = ((obj == DBNull.Value) ? 1 : 0);
673 break;
674 }
675 return (int)num3;
676 }
static bool IsObjectSqlNull(object value)
static StorageType GetStorageType(Type dataType)
static object ChangeType2(object value, StorageType stype, Type type, IFormatProvider formatProvider)
IFormatProvider FormatProvider
Definition DataTable.cs:435
int Eval(BinaryNode expr, DataRow row, DataRowVersion version)
Definition Select.cs:605
readonly DataTable _table
Definition Select.cs:19

References System.Data.BinaryNode._left, System.Data.BinaryNode._op, System.Data.BinaryNode._right, System.Data.Select._table, System.Data.BinaryNode.BinaryCompare(), System.Data.Common.SqlConvert.ChangeType2(), System.comparer, System.Data.ExpressionNode.Eval(), System.Data.Select.Eval(), System.Data.DataTable.FormatProvider, System.Data.Common.DataStorage.GetStorageType(), System.Data.Common.DataStorage.IsObjectSqlNull(), System.Data.ExpressionNode.IsSqlColumn, System.L, System.obj, System.Data.BinaryNode.ResultSqlType(), System.Data.BinaryNode.ResultType(), System.Data.BinaryNode.SetTypeMismatchError(), System.Convert.ToChar(), and System.DBNull.Value.

Referenced by System.Data.Select.Eval(), and System.Data.Select.Evaluate().