@@ -986,6 +986,131 @@ public void caseWhenTestWithouhtElseExpr() throws SqlParseException {
986
986
987
987
}
988
988
989
+ @ Test
990
+ public void castToIntTest () throws Exception {
991
+ String query = "select cast(age as int) from " + TestsConstants .TEST_INDEX + "/account limit 10" ;
992
+ SQLExpr sqlExpr = queryToExpr (query );
993
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
994
+ Field castField = select .getFields ().get (0 );
995
+ Assert .assertTrue (castField instanceof MethodField );
996
+
997
+ MethodField methodField = (MethodField ) castField ;
998
+ Assert .assertEquals ("script" ,castField .getName ());
999
+
1000
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1001
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1002
+ Assert .assertEquals ("cast_age" ,alias );
1003
+ Assert .assertTrue (scriptCode .contains ("doc['age'].value" ));
1004
+ Assert .assertTrue (scriptCode .contains ("Double.parseDouble(doc['age'].value.toString()).intValue()" ));
1005
+ }
1006
+
1007
+ @ Test
1008
+ public void castToLongTest () throws Exception {
1009
+ String query = "select cast(insert_time as long) from " + TestsConstants .TEST_INDEX + " limit 10" ;
1010
+ SQLExpr sqlExpr = queryToExpr (query );
1011
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
1012
+ Field castField = select .getFields ().get (0 );
1013
+ Assert .assertTrue (castField instanceof MethodField );
1014
+
1015
+ MethodField methodField = (MethodField ) castField ;
1016
+ Assert .assertEquals ("script" ,castField .getName ());
1017
+
1018
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1019
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1020
+ Assert .assertEquals ("cast_insert_time" ,alias );
1021
+ Assert .assertTrue (scriptCode .contains ("doc['insert_time'].value" ));
1022
+ Assert .assertTrue (scriptCode .contains ("Double.parseDouble(doc['insert_time'].value.toString()).longValue()" ));
1023
+ }
1024
+
1025
+ @ Test
1026
+ public void castToFloatTest () throws Exception {
1027
+ String query = "select cast(age as float) from " + TestsConstants .TEST_INDEX + " limit 10" ;
1028
+ SQLExpr sqlExpr = queryToExpr (query );
1029
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
1030
+ Field castField = select .getFields ().get (0 );
1031
+ Assert .assertTrue (castField instanceof MethodField );
1032
+
1033
+ MethodField methodField = (MethodField ) castField ;
1034
+ Assert .assertEquals ("script" ,castField .getName ());
1035
+
1036
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1037
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1038
+ Assert .assertEquals ("cast_age" ,alias );
1039
+ Assert .assertTrue (scriptCode .contains ("doc['age'].value" ));
1040
+ Assert .assertTrue (scriptCode .contains ("Double.parseDouble(doc['age'].value.toString()).floatValue()" ));
1041
+ }
1042
+
1043
+ @ Test
1044
+ public void castToDoubleTest () throws Exception {
1045
+ String query = "select cast(age as double) from " + TestsConstants .TEST_INDEX + "/account limit 10" ;
1046
+ SQLExpr sqlExpr = queryToExpr (query );
1047
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
1048
+ Field castField = select .getFields ().get (0 );
1049
+ Assert .assertTrue (castField instanceof MethodField );
1050
+
1051
+ MethodField methodField = (MethodField ) castField ;
1052
+ Assert .assertEquals ("script" ,castField .getName ());
1053
+
1054
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1055
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1056
+ Assert .assertEquals ("cast_age" ,alias );
1057
+ Assert .assertTrue (scriptCode .contains ("doc['age'].value" ));
1058
+ Assert .assertTrue (scriptCode .contains ("Double.parseDouble(doc['age'].value.toString()).doubleValue()" ));
1059
+ }
1060
+
1061
+ @ Test
1062
+ public void castToStringTest () throws Exception {
1063
+ String query = "select cast(age as string) from " + TestsConstants .TEST_INDEX + "/account limit 10" ;
1064
+ SQLExpr sqlExpr = queryToExpr (query );
1065
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
1066
+ Field castField = select .getFields ().get (0 );
1067
+ Assert .assertTrue (castField instanceof MethodField );
1068
+
1069
+ MethodField methodField = (MethodField ) castField ;
1070
+ Assert .assertEquals ("script" ,castField .getName ());
1071
+
1072
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1073
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1074
+ Assert .assertEquals ("cast_age" ,alias );
1075
+ Assert .assertTrue (scriptCode .contains ("doc['age'].value.toString()" ));
1076
+ }
1077
+
1078
+ @ Test
1079
+ public void castToDateTimeTest () throws Exception {
1080
+ String query = "select cast(age as datetime) from " + TestsConstants .TEST_INDEX + "/account limit 10" ;
1081
+ SQLExpr sqlExpr = queryToExpr (query );
1082
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
1083
+ Field castField = select .getFields ().get (0 );
1084
+ Assert .assertTrue (castField instanceof MethodField );
1085
+
1086
+ MethodField methodField = (MethodField ) castField ;
1087
+ Assert .assertEquals ("script" ,castField .getName ());
1088
+
1089
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1090
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1091
+ Assert .assertEquals ("cast_age" ,alias );
1092
+ Assert .assertTrue (scriptCode .contains ("doc['age'].value" ));
1093
+ Assert .assertTrue (scriptCode .contains ("new Date(Double.parseDouble(doc['age'].value.toString()).longValue())" ));
1094
+ }
1095
+
1096
+ @ Test
1097
+ public void castToDoubleThenDivideTest () throws Exception {
1098
+ String query = "select cast(age as double)/2 from " + TestsConstants .TEST_INDEX + "/account limit 10" ;
1099
+ SQLExpr sqlExpr = queryToExpr (query );
1100
+ Select select = parser .parseSelect ((SQLQueryExpr ) sqlExpr );
1101
+ Field castField = select .getFields ().get (0 );
1102
+ Assert .assertTrue (castField instanceof MethodField );
1103
+
1104
+ MethodField methodField = (MethodField ) castField ;
1105
+ Assert .assertEquals ("script" ,castField .getName ());
1106
+
1107
+ String alias = (String ) methodField .getParams ().get (0 ).value ;
1108
+ String scriptCode = (String ) methodField .getParams ().get (1 ).value ;
1109
+ Assert .assertTrue (scriptCode .contains ("doc['age'].value" ));
1110
+ Assert .assertTrue (scriptCode .contains ("Double.parseDouble(doc['age'].value.toString()).doubleValue()" ));
1111
+ Assert .assertTrue (scriptCode .contains ("/ 2" ));
1112
+ }
1113
+
989
1114
990
1115
@ Test
991
1116
public void multiSelectMinusOperationCheckIndices () throws SqlParseException {
0 commit comments