@@ -1028,4 +1028,200 @@ var FunctionQueryTests = []QueryTest{
10281028 Query : `SELECT SUBSTR(SUBSTRING('0123456789ABCDEF', 1, 10), -4)` ,
10291029 Expected : []sql.Row {{"6789" }},
10301030 },
1031+
1032+ // Math Function Tests
1033+ {
1034+ Query : `SELECT FLOOR(15728640/1024/1030)` ,
1035+ Expected : []sql.Row {
1036+ {"14" },
1037+ },
1038+ },
1039+ {
1040+ Query : `SELECT ROUND(15728640/1024/1030)` ,
1041+ Expected : []sql.Row {
1042+ {"15" },
1043+ },
1044+ },
1045+ {
1046+ Query : `SELECT ROUND(15.00, 1)` ,
1047+ Expected : []sql.Row {
1048+ {"15.0" },
1049+ },
1050+ },
1051+ {
1052+ Query : `SELECT round(15, 1)` ,
1053+ Expected : []sql.Row {
1054+ {int8 (15 )},
1055+ },
1056+ },
1057+ {
1058+ Query : "SELECT POW(2,3) FROM dual" ,
1059+ Expected : []sql.Row {{float64 (8 )}},
1060+ },
1061+
1062+ // JSON Function Tests
1063+ {
1064+ Query : `SELECT JSON_MERGE_PRESERVE('{ "a": 1, "b": 2 }','{ "a": 3, "c": 4 }','{ "a": 5, "d": 6 }')` ,
1065+ Expected : []sql.Row {
1066+ {types .MustJSON (`{"a": [1, 3, 5], "b": 2, "c": 4, "d": 6}` )},
1067+ },
1068+ },
1069+ {
1070+ Query : `SELECT JSON_MERGE_PRESERVE(val1, val2)
1071+ FROM (values
1072+ row('{ "a": 1, "b": 2 }','null'),
1073+ row('{ "a": 1, "b": 2 }','"row one"'),
1074+ row('{ "a": 3, "c": 4 }','4'),
1075+ row('{ "a": 5, "d": 6 }','[true, true]'),
1076+ row('{ "a": 5, "d": 6 }','{ "a": 3, "e": 2 }'))
1077+ test (val1, val2)` ,
1078+ Expected : []sql.Row {
1079+ {types .MustJSON (`[{ "a": 1, "b": 2 }, null]` )},
1080+ {types .MustJSON (`[{ "a": 1, "b": 2 }, "row one"]` )},
1081+ {types .MustJSON (`[{ "a": 3, "c": 4 }, 4]` )},
1082+ {types .MustJSON (`[{ "a": 5, "d": 6 }, true, true]` )},
1083+ {types .MustJSON (`{ "a": [5, 3], "d": 6, "e": 2}` )},
1084+ },
1085+ },
1086+ {
1087+ Query : `SELECT JSON_ARRAY()` ,
1088+ Expected : []sql.Row {
1089+ {types .MustJSON (`[]` )},
1090+ },
1091+ },
1092+ {
1093+ Query : `SELECT JSON_ARRAY('{"b": 2, "a": [1, 8], "c": null}', null, 4, '[true, false]', "do")` ,
1094+ Expected : []sql.Row {
1095+ {types .MustJSON (`["{\"b\": 2, \"a\": [1, 8], \"c\": null}", null, 4, "[true, false]", "do"]` )},
1096+ },
1097+ },
1098+ {
1099+ Query : `SELECT JSON_ARRAY(1, 'say, "hi"', JSON_OBJECT("abc", 22))` ,
1100+ Expected : []sql.Row {
1101+ {types .MustJSON (`[1, "say, \"hi\"", {"abc": 22}]` )},
1102+ },
1103+ },
1104+ {
1105+ Query : `SELECT JSON_ARRAY(JSON_OBJECT("a", JSON_ARRAY(1,2)), JSON_OBJECT("b", 22))` ,
1106+ Expected : []sql.Row {
1107+ {types .MustJSON (`[{"a": [1, 2]}, {"b": 22}]` )},
1108+ },
1109+ },
1110+ {
1111+ Query : `SELECT JSON_ARRAY(pk, c1, c2, c3) FROM jsontable` ,
1112+ Expected : []sql.Row {
1113+ {types .MustJSON (`[1, "one", 1.0, {"a": 2}]` )},
1114+ {types .MustJSON (`[2, "two", 1.5, {"b": 2}]` )},
1115+ {types .MustJSON (`[3, "three", 2.0, {"c": 2}]` )},
1116+ {types .MustJSON (`[4, "four", 2.5, {"d": 2}]` )},
1117+ },
1118+ },
1119+ {
1120+ Query : `SELECT JSON_ARRAY(JSON_OBJECT("id", pk, "name", c1), c2, c3) FROM jsontable` ,
1121+ Expected : []sql.Row {
1122+ {types .MustJSON (`[{"id": 1, "name": "one"}, 1.0, {"a": 2}]` )},
1123+ {types .MustJSON (`[{"id": 2, "name": "two"}, 1.5, {"b": 2}]` )},
1124+ {types .MustJSON (`[{"id": 3, "name": "three"}, 2.0, {"c": 2}]` )},
1125+ {types .MustJSON (`[{"id": 4, "name": "four"}, 2.5, {"d": 2}]` )},
1126+ },
1127+ },
1128+ {
1129+ Query : `SELECT JSON_KEYS(c3) FROM jsontable` ,
1130+ Expected : []sql.Row {
1131+ {types .MustJSON (`["a"]` )},
1132+ {types .MustJSON (`["b"]` )},
1133+ {types .MustJSON (`["c"]` )},
1134+ {types .MustJSON (`["d"]` )},
1135+ },
1136+ },
1137+ {
1138+ Query : `SELECT JSON_OVERLAPS(c3, '{"a": 2, "d": 2}') FROM jsontable` ,
1139+ Expected : []sql.Row {
1140+ {true },
1141+ {false },
1142+ {false },
1143+ {true },
1144+ },
1145+ },
1146+ {
1147+ Query : `SELECT JSON_MERGE(c3, '{"a": 1}') FROM jsontable` ,
1148+ Expected : []sql.Row {
1149+ {types .MustJSON (`{"a": [2, 1]}` )},
1150+ {types .MustJSON (`{"a": 1, "b": 2}` )},
1151+ {types .MustJSON (`{"a": 1, "c": 2}` )},
1152+ {types .MustJSON (`{"a": 1, "d": 2}` )},
1153+ },
1154+ },
1155+ {
1156+ Query : `SELECT JSON_MERGE_PRESERVE(c3, '{"a": 1}') FROM jsontable` ,
1157+ Expected : []sql.Row {
1158+ {types .MustJSON (`{"a": [2, 1]}` )},
1159+ {types .MustJSON (`{"a": 1, "b": 2}` )},
1160+ {types .MustJSON (`{"a": 1, "c": 2}` )},
1161+ {types .MustJSON (`{"a": 1, "d": 2}` )},
1162+ },
1163+ },
1164+ {
1165+ Query : `SELECT JSON_MERGE_PATCH(c3, '{"a": 1}') FROM jsontable` ,
1166+ Expected : []sql.Row {
1167+ {types .MustJSON (`{"a": 1}` )},
1168+ {types .MustJSON (`{"a": 1, "b": 2}` )},
1169+ {types .MustJSON (`{"a": 1, "c": 2}` )},
1170+ {types .MustJSON (`{"a": 1, "d": 2}` )},
1171+ },
1172+ },
1173+ {
1174+ Query : `SELECT CONCAT(JSON_OBJECT('aa', JSON_OBJECT('bb', 123, 'y', 456), 'z', JSON_OBJECT('cc', 321, 'x', 654)), "")` ,
1175+ Expected : []sql.Row {
1176+ {`{"z": {"x": 654, "cc": 321}, "aa": {"y": 456, "bb": 123}}` },
1177+ },
1178+ },
1179+ {
1180+ Query : `SELECT CONCAT(JSON_ARRAY(JSON_OBJECT('aa', 123, 'z', 456), JSON_OBJECT('BB', 321, 'Y', 654)), "")` ,
1181+ Expected : []sql.Row {
1182+ {`[{"z": 456, "aa": 123}, {"Y": 654, "BB": 321}]` },
1183+ },
1184+ },
1185+
1186+ // Conversion Function Tests
1187+ {
1188+ Query : "SELECT CAST(-3 AS UNSIGNED) FROM mytable" ,
1189+ Expected : []sql.Row {
1190+ {uint64 (18446744073709551613 )},
1191+ {uint64 (18446744073709551613 )},
1192+ {uint64 (18446744073709551613 )},
1193+ },
1194+ },
1195+ {
1196+ Query : "SELECT CAST(-3 AS DOUBLE) FROM dual" ,
1197+ Expected : []sql.Row {{- 3.0 }},
1198+ },
1199+ {
1200+ Query : `SELECT CONVERT("-3.9876", FLOAT) FROM dual` ,
1201+ Expected : []sql.Row {{float32 (- 3.9876 )}},
1202+ },
1203+ {
1204+ Query : "SELECT CAST(10.56789 as CHAR(3));" ,
1205+ Expected : []sql.Row {{"10." }},
1206+ },
1207+ {
1208+ Query : "SELECT CAST(10.56789 as CHAR(30));" ,
1209+ Expected : []sql.Row {{"10.56789" }},
1210+ },
1211+ {
1212+ Query : "SELECT CAST('abcdef' as BINARY(10));" ,
1213+ Expected : []sql.Row {{[]byte ("abcdef\x00 \x00 \x00 \x00 " )}},
1214+ },
1215+ {
1216+ Query : `SELECT CONVERT(10.12345, DECIMAL(4,2))` ,
1217+ Expected : []sql.Row {{"10.12" }},
1218+ },
1219+ {
1220+ Query : `SELECT CONVERT(1234567893.1234567893, DECIMAL(20,10))` ,
1221+ Expected : []sql.Row {{"1234567893.1234567893" }},
1222+ },
1223+ {
1224+ Query : `SELECT CONVERT(10, DECIMAL(4,2))` ,
1225+ Expected : []sql.Row {{"10.00" }},
1226+ },
10311227}
0 commit comments