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

◆ ResultSqlType()

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

Definition at line 1089 of file BinaryNode.cs.

1090 {
1091 int precedence = (int)GetPrecedence(left);
1092 if (precedence == 0)
1093 {
1094 return StorageType.Empty;
1095 }
1096 int precedence2 = (int)GetPrecedence(right);
1097 if (precedence2 == 0)
1098 {
1099 return StorageType.Empty;
1100 }
1101 if (Operators.IsLogical(op))
1102 {
1103 if ((left != StorageType.Boolean && left != StorageType.SqlBoolean) || (right != StorageType.Boolean && right != StorageType.SqlBoolean))
1104 {
1105 return StorageType.Empty;
1106 }
1107 if (left == StorageType.Boolean && right == StorageType.Boolean)
1108 {
1109 return StorageType.Boolean;
1110 }
1111 return StorageType.SqlBoolean;
1112 }
1113 if (op == 15)
1114 {
1115 if (left == StorageType.SqlString || right == StorageType.SqlString)
1116 {
1117 return StorageType.SqlString;
1118 }
1119 if (left == StorageType.String || right == StorageType.String)
1120 {
1121 return StorageType.String;
1122 }
1123 }
1124 if ((left == StorageType.SqlBinary && right != StorageType.SqlBinary) || (left != StorageType.SqlBinary && right == StorageType.SqlBinary))
1125 {
1126 return StorageType.Empty;
1127 }
1128 if ((left == StorageType.SqlGuid && right != StorageType.SqlGuid) || (left != StorageType.SqlGuid && right == StorageType.SqlGuid))
1129 {
1130 return StorageType.Empty;
1131 }
1132 if (precedence > 19 && precedence2 < 20)
1133 {
1134 return StorageType.Empty;
1135 }
1137 {
1138 return StorageType.Empty;
1139 }
1140 if (precedence > 19)
1141 {
1142 if (op == 15 || op == 16)
1143 {
1144 if (left == StorageType.TimeSpan)
1145 {
1146 return right;
1147 }
1148 if (right == StorageType.TimeSpan)
1149 {
1150 return left;
1151 }
1152 return StorageType.Empty;
1153 }
1154 if (!Operators.IsRelational(op))
1155 {
1156 return StorageType.Empty;
1157 }
1158 return left;
1159 }
1163 if (Operators.IsArithmetical(op) && precedenceType != StorageType.String && precedenceType != StorageType.Char && precedenceType != StorageType.SqlString)
1164 {
1165 if (!ExpressionNode.IsNumericSql(left))
1166 {
1167 return StorageType.Empty;
1168 }
1169 if (!ExpressionNode.IsNumericSql(right))
1170 {
1171 return StorageType.Empty;
1172 }
1173 }
1174 if (op == 18 && ExpressionNode.IsIntegerSql(precedenceType))
1175 {
1176 return StorageType.SqlDouble;
1177 }
1178 if (precedenceType == StorageType.SqlMoney && left != StorageType.SqlMoney && right != StorageType.SqlMoney)
1179 {
1180 precedenceType = StorageType.SqlDecimal;
1181 }
1182 if (IsMixedSql(left, right) && ExpressionNode.IsUnsignedSql(precedenceType))
1183 {
1185 {
1186 throw ExprException.AmbiguousBinop(op, DataStorage.GetTypeStorage(left), DataStorage.GetTypeStorage(right));
1187 }
1189 }
1190 return precedenceType;
1191 }
DataTypePrecedence GetPrecedence(StorageType storageType)
bool IsMixedSql(StorageType left, StorageType right)
int SqlResultType(int typeCode)
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.IsIntegerSql(), System.Data.Operators.IsLogical(), System.Data.BinaryNode.IsMixedSql(), System.Data.ExpressionNode.IsNumericSql(), System.Data.Operators.IsRelational(), System.Data.ExpressionNode.IsUnsignedSql(), System.Math.Max(), and System.Data.BinaryNode.SqlResultType().

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