1
1
package org .nlpcn .es4sql ;
2
2
3
+ import com .alibaba .druid .sql .SQLUtils ;
3
4
import com .alibaba .druid .sql .ast .SQLExpr ;
4
5
import com .alibaba .druid .sql .ast .expr .*;
5
6
import com .google .common .base .Joiner ;
@@ -19,7 +20,7 @@ public class SQLFunctions {
19
20
20
21
//Groovy Built In Functions
21
22
public final static Set <String > buildInFunctions = Sets .newHashSet (
22
- "exp" , "log" , "log10" , "sqrt" , "cbrt" , "ceil" , "floor" , "rint" , "pow" , "round" ,
23
+ "exp" , "log" , "log2" , "log10" , " log10" , "sqrt" , "cbrt" , "ceil" , "floor" , "rint" , "pow" , "round" ,
23
24
"random" , "abs" , //nummber operator
24
25
"split" , "concat_ws" , "substring" , "trim" ,//string operator
25
26
"add" , "multiply" , "divide" , "subtract" , "modulus" ,//binary operator
@@ -63,8 +64,6 @@ public static Tuple<String, String> function(String methodName, List<KVValue> pa
63
64
64
65
case "floor" :
65
66
case "round" :
66
- case "log" :
67
- case "log10" :
68
67
case "ceil" :
69
68
case "cbrt" :
70
69
case "rint" :
@@ -107,6 +106,24 @@ public static Tuple<String, String> function(String methodName, List<KVValue> pa
107
106
functionStr = field (Util .expr2Object ((SQLExpr ) paramers .get (0 ).value ).toString ());
108
107
break ;
109
108
109
+ case "log2" :
110
+ functionStr = log (SQLUtils .toSQLExpr ("2" ), (SQLExpr ) paramers .get (0 ).value , name );
111
+ break ;
112
+ case "log10" :
113
+ functionStr = log (SQLUtils .toSQLExpr ("10" ), (SQLExpr ) paramers .get (0 ).value , name );
114
+ break ;
115
+ case "log" :
116
+ List <SQLExpr > logs = Lists .newArrayList ();
117
+ for (int i = 0 ; i < paramers .size (); i ++) {
118
+ logs .add ((SQLExpr ) paramers .get (0 ).value );
119
+ }
120
+ if (logs .size () > 1 ) {
121
+ functionStr = log (logs .get (0 ), logs .get (1 ), name );
122
+ } else {
123
+ functionStr = log (SQLUtils .toSQLExpr ("Math.E" ), logs .get (0 ), name );
124
+ }
125
+ break ;
126
+
110
127
default :
111
128
112
129
}
@@ -252,6 +269,20 @@ public static Tuple<String, String> log10(String strColumn, String valueName) {
252
269
return mathSingleValueTemplate ("log10" , strColumn , valueName );
253
270
254
271
}
272
+ public static Tuple <String , String > log (SQLExpr base , SQLExpr strColumn , String valueName ) {
273
+ String name = "log_" + random ();
274
+ String result ;
275
+ if (valueName == null ) {
276
+ if (isProperty (strColumn )) {
277
+ result = "def " + name + " = Math.log(doc['" + Util .expr2Object (strColumn ).toString () + "'].value)/Math.log(" +Util .expr2Object (base ).toString ()+")" ;
278
+ } else {
279
+ result = "def " + name + " = Math.log(" + Util .expr2Object (strColumn ).toString () + ")/Math.log(" +Util .expr2Object (base ).toString ()+")" ;
280
+ }
281
+ } else {
282
+ result = Util .expr2Object (strColumn ).toString ()+";def " +name +" = Math.log(" +valueName +")/Math.log(" +Util .expr2Object (base ).toString ()+")" ;
283
+ }
284
+ return new Tuple (name , result );
285
+ }
255
286
256
287
public static Tuple <String , String > sqrt (String strColumn , String valueName ) {
257
288
0 commit comments