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

◆ ResultType()

StorageType System.Data.BinaryNode.ResultType ( StorageType left,
StorageType right,
bool lc,
bool rc,
int op )
inlinepackageinherited

Definition at line 1006 of file BinaryNode.cs.

1007 {
1008 if (left == StorageType.Guid && right == StorageType.Guid && Operators.IsRelational(op))
1009 {
1010 return left;
1011 }
1012 if (left == StorageType.String && right == StorageType.Guid && Operators.IsRelational(op))
1013 {
1014 return left;
1015 }
1016 if (left == StorageType.Guid && right == StorageType.String && Operators.IsRelational(op))
1017 {
1018 return right;
1019 }
1020 int precedence = (int)GetPrecedence(left);
1021 if (precedence == 0)
1022 {
1023 return StorageType.Empty;
1024 }
1025 int precedence2 = (int)GetPrecedence(right);
1026 if (precedence2 == 0)
1027 {
1028 return StorageType.Empty;
1029 }
1030 if (Operators.IsLogical(op))
1031 {
1032 if (left == StorageType.Boolean && right == StorageType.Boolean)
1033 {
1034 return StorageType.Boolean;
1035 }
1036 return StorageType.Empty;
1037 }
1038 if (left == StorageType.DateTimeOffset || right == StorageType.DateTimeOffset)
1039 {
1040 if (Operators.IsRelational(op) && left == StorageType.DateTimeOffset && right == StorageType.DateTimeOffset)
1041 {
1042 return StorageType.DateTimeOffset;
1043 }
1044 return StorageType.Empty;
1045 }
1046 if (op == 15 && (left == StorageType.String || right == StorageType.String))
1047 {
1048 return StorageType.String;
1049 }
1052 if (Operators.IsArithmetical(op) && precedenceType != StorageType.String && precedenceType != StorageType.Char)
1053 {
1054 if (!ExpressionNode.IsNumeric(left))
1055 {
1056 return StorageType.Empty;
1057 }
1058 if (!ExpressionNode.IsNumeric(right))
1059 {
1060 return StorageType.Empty;
1061 }
1062 }
1063 if (op == 18 && ExpressionNode.IsInteger(precedenceType))
1064 {
1065 return StorageType.Double;
1066 }
1067 if (IsMixed(left, right))
1068 {
1069 if (lc && !rc)
1070 {
1071 return right;
1072 }
1073 if (!lc && rc)
1074 {
1075 return left;
1076 }
1077 if (ExpressionNode.IsUnsigned(precedenceType))
1078 {
1080 {
1081 throw ExprException.AmbiguousBinop(op, DataStorage.GetTypeStorage(left), DataStorage.GetTypeStorage(right));
1082 }
1084 }
1085 }
1086 return precedenceType;
1087 }
DataTypePrecedence GetPrecedence(StorageType storageType)
bool IsMixed(StorageType left, StorageType right)
static StorageType GetPrecedenceType(DataTypePrecedence code)
static Type GetTypeStorage(StorageType storageType)
ExpressionNode(DataTable table)

References System.Data.ExprException.AmbiguousBinop(), System.Data.BinaryNode.GetPrecedence(), System.Data.BinaryNode.GetPrecedenceType(), System.Data.Common.DataStorage.GetTypeStorage(), System.Data.Operators.IsArithmetical(), System.Data.ExpressionNode.IsInteger(), System.Data.Operators.IsLogical(), System.Data.BinaryNode.IsMixed(), System.Data.ExpressionNode.IsNumeric(), System.Data.Operators.IsRelational(), System.Data.ExpressionNode.IsUnsigned(), and System.Math.Max().

Referenced by System.Data.Select.Eval(), and System.Data.BinaryNode.EvalBinaryOp().