chennan 8 gadi atpakaļ
vecāks
revīzija
b90a38f62e
21 mainītis faili ar 175 papildinājumiem un 272 dzēšanām
  1. 3 3
      src/main/java/org/es/sql/bean/ElasticDslContext.java
  2. 2 2
      src/main/java/org/es/sql/bean/SqlArgs.java
  3. 4 4
      src/main/java/org/es/sql/helper/ElasticSqlArgConverter.java
  4. 8 3
      src/main/java/org/es/sql/parser/ElasticSql2DslParser.java
  5. 2 2
      src/main/java/org/es/sql/parser/query/exact/BetweenAndAtomQueryParser.java
  6. 2 2
      src/main/java/org/es/sql/parser/query/exact/BinaryAtomQueryParser.java
  7. 2 2
      src/main/java/org/es/sql/parser/query/exact/InListAtomQueryParser.java
  8. 4 4
      src/main/java/org/es/sql/parser/query/method/MethodInvocation.java
  9. 2 2
      src/main/java/org/es/sql/parser/query/method/fulltext/FullTextAtomQueryParser.java
  10. 61 60
      src/main/java/org/es/sql/parser/query/method/script/ScriptAtomQueryParser.java
  11. 2 2
      src/main/java/org/es/sql/parser/query/method/term/TermLevelAtomQueryParser.java
  12. 10 11
      src/main/java/org/es/sql/parser/sql/AbstractQueryConditionParser.java
  13. 3 3
      src/main/java/org/es/sql/parser/sql/QueryGroupByParser.java
  14. 2 2
      src/main/java/org/es/sql/parser/sql/QueryLimitSizeParser.java
  15. 5 8
      src/main/java/org/es/sql/parser/sql/QueryOrderConditionParser.java
  16. 63 58
      src/main/java/org/es/sql/parser/sql/sort/ScriptMethodSortParser.java
  17. 0 6
      target/classes/log4j2.properties
  18. 0 32
      target/test-classes/application-context.xml
  19. 0 30
      target/test-classes/log4j.properties
  20. 0 17
      target/test-classes/sqlMapConfig.xml
  21. 0 19
      target/test-classes/sqlmap/PRODUCT.xml

+ 3 - 3
src/main/java/org/es/sql/bean/ElasticDslContext.java

@@ -6,17 +6,17 @@ public class ElasticDslContext {
     //SQL
     private SQLQueryExpr queryExpr;
     //SQL Args
-    private SQLArgs SQLArgs;
+    private SQLArgsx SQLArgs;
     //Result
     private ElasticSqlParseResult parseResult;
 
-    public ElasticDslContext(SQLQueryExpr queryExpr, SQLArgs SQLArgs) {
+    public ElasticDslContext(SQLQueryExpr queryExpr, SQLArgsx SQLArgs) {
         this.queryExpr = queryExpr;
         this.SQLArgs = SQLArgs;
         parseResult = new ElasticSqlParseResult();
     }
 
-    public SQLArgs getSQLArgs() {
+    public SQLArgsx getSQLArgs() {
         return SQLArgs;
     }
 

+ 2 - 2
src/main/java/org/es/sql/bean/SqlArgs.java

@@ -1,11 +1,11 @@
 package org.es.sql.bean;
 
 
-public class SQLArgs {
+public class SQLArgsx {
 
     private Object[] args;
 
-    public SQLArgs(Object[] args) {
+    public SQLArgsx(Object[] args) {
         this.args = args;
 
         ensureAllNotNull();

+ 4 - 4
src/main/java/org/es/sql/helper/ElasticSqlArgConverter.java

@@ -2,7 +2,7 @@ package org.es.sql.helper;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.*;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.exception.ElasticSql2DslException;
 
 import java.util.List;
@@ -13,7 +13,7 @@ public class ElasticSqlArgConverter {
 
     }
 
-    public static Object[] convertSqlArgs(List<SQLExpr> exprList, SQLArgs SQLArgs) {
+    public static Object[] convertSqlArgs(List<SQLExpr> exprList, SQLArgsx SQLArgs) {
         Object[] values = new Object[exprList.size()];
         for (int idx = 0; idx < exprList.size(); idx++) {
             values[idx] = convertSqlArg(exprList.get(idx), SQLArgs, true);
@@ -21,11 +21,11 @@ public class ElasticSqlArgConverter {
         return values;
     }
 
-    public static Object convertSqlArg(SQLExpr expr, SQLArgs SQLArgs) {
+    public static Object convertSqlArg(SQLExpr expr, SQLArgsx SQLArgs) {
         return convertSqlArg(expr, SQLArgs, true);
     }
 
-    public static Object convertSqlArg(SQLExpr expr, SQLArgs SQLArgs, boolean recognizeDateArg) {
+    public static Object convertSqlArg(SQLExpr expr, SQLArgsx SQLArgs, boolean recognizeDateArg) {
         if (expr instanceof SQLVariantRefExpr) {
             SQLVariantRefExpr varRefExpr = (SQLVariantRefExpr) expr;
             //parse date

+ 8 - 3
src/main/java/org/es/sql/parser/ElasticSql2DslParser.java

@@ -7,7 +7,7 @@ import com.alibaba.druid.sql.parser.Token;
 import com.google.common.collect.ImmutableList;
 import org.es.sql.bean.ElasticDslContext;
 import org.es.sql.bean.ElasticSqlParseResult;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.druid.ElasticSqlExprParser;
 import org.es.sql.druid.ElasticSqlSelectQueryBlock;
 import org.es.sql.exception.ElasticSql2DslException;
@@ -45,14 +45,19 @@ public class ElasticSql2DslParser {
             throw new ElasticSql2DslException(ex);
         }
 
-        final ElasticDslContext elasticDslContext = new ElasticDslContext(queryExpr, new SQLArgs(sqlArgs));
+        SQLArgsx sqlParamValues = null;
+        if (sqlArgs != null && sqlArgs.length > 0) {
+            sqlParamValues = new SQLArgsx(sqlArgs);
+        }
+
+        ElasticDslContext elasticDslContext = new ElasticDslContext(queryExpr, sqlParamValues);
         if (queryExpr.getSubQuery().getQuery() instanceof ElasticSqlSelectQueryBlock) {
             for (QueryParser sqlParser : buildSqlParserChain(parseActionListener)) {
                 sqlParser.parse(elasticDslContext);
             }
         }
         else {
-            throw new ElasticSql2DslException("[syntax error] Sql only support Select Sql");
+            throw new ElasticSql2DslException("[syntax error] only support Select Sql");
         }
         return elasticDslContext.getParseResult();
     }

+ 2 - 2
src/main/java/org/es/sql/parser/query/exact/BetweenAndAtomQueryParser.java

@@ -4,7 +4,7 @@ import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.es.sql.bean.AtomQuery;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.enums.SQLConditionOperator;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.helper.ElasticSqlArgConverter;
@@ -16,7 +16,7 @@ public class BetweenAndAtomQueryParser extends AbstractAtomExactQueryParser {
         super(parseActionListener);
     }
 
-    public AtomQuery parseBetweenAndQuery(SQLBetweenExpr betweenAndExpr, String queryAs, SQLArgs SQLArgs) {
+    public AtomQuery parseBetweenAndQuery(SQLBetweenExpr betweenAndExpr, String queryAs, SQLArgsx SQLArgs) {
         Object from = ElasticSqlArgConverter.convertSqlArg(betweenAndExpr.getBeginExpr(), SQLArgs);
         Object to = ElasticSqlArgConverter.convertSqlArg(betweenAndExpr.getEndExpr(), SQLArgs);
 

+ 2 - 2
src/main/java/org/es/sql/parser/query/exact/BinaryAtomQueryParser.java

@@ -7,7 +7,7 @@ import org.elasticsearch.index.query.ExistsQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.es.sql.bean.AtomQuery;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.enums.SQLConditionOperator;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.helper.ElasticSqlArgConverter;
@@ -19,7 +19,7 @@ public class BinaryAtomQueryParser extends AbstractAtomExactQueryParser {
         super(parseActionListener);
     }
 
-    public AtomQuery parseBinaryQuery(SQLBinaryOpExpr binQueryExpr, String queryAs, SQLArgs SQLArgs) {
+    public AtomQuery parseBinaryQuery(SQLBinaryOpExpr binQueryExpr, String queryAs, SQLArgsx SQLArgs) {
         SQLBinaryOperator binaryOperator = binQueryExpr.getOperator();
 
         //EQ NEQ

+ 2 - 2
src/main/java/org/es/sql/parser/query/exact/InListAtomQueryParser.java

@@ -5,7 +5,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.es.sql.bean.AtomQuery;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.enums.SQLConditionOperator;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.helper.ElasticSqlArgConverter;
@@ -17,7 +17,7 @@ public class InListAtomQueryParser extends AbstractAtomExactQueryParser {
         super(parseActionListener);
     }
 
-    public AtomQuery parseInListQuery(SQLInListExpr inListQueryExpr, String queryAs, SQLArgs SQLArgs) {
+    public AtomQuery parseInListQuery(SQLInListExpr inListQueryExpr, String queryAs, SQLArgsx SQLArgs) {
         if (CollectionUtils.isEmpty(inListQueryExpr.getTargetList())) {
             throw new ElasticSql2DslException("[syntax error] In list expr target list cannot be blank");
         }

+ 4 - 4
src/main/java/org/es/sql/parser/query/method/MethodInvocation.java

@@ -2,7 +2,7 @@ package org.es.sql.parser.query.method;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.helper.ElasticSqlArgConverter;
 
 import java.util.List;
@@ -10,9 +10,9 @@ import java.util.List;
 public class MethodInvocation {
     private final SQLMethodInvokeExpr methodInvokeExpr;
     private final String queryAs;
-    private final SQLArgs SQLArgs;
+    private final SQLArgsx SQLArgs;
 
-    public MethodInvocation(SQLMethodInvokeExpr methodInvokeExpr, String queryAs, SQLArgs SQLArgs) {
+    public MethodInvocation(SQLMethodInvokeExpr methodInvokeExpr, String queryAs, SQLArgsx SQLArgs) {
         if (methodInvokeExpr == null) {
             throw new IllegalArgumentException("method invoke expression can not be null");
         }
@@ -25,7 +25,7 @@ public class MethodInvocation {
         return queryAs;
     }
 
-    public SQLArgs getSQLArgs() {
+    public SQLArgsx getSQLArgs() {
         return SQLArgs;
     }
 

+ 2 - 2
src/main/java/org/es/sql/parser/query/method/fulltext/FullTextAtomQueryParser.java

@@ -3,7 +3,7 @@ package org.es.sql.parser.query.method.fulltext;
 import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
 import com.google.common.collect.ImmutableList;
 import org.es.sql.bean.AtomQuery;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.listener.ParseActionListener;
 import org.es.sql.parser.query.method.MethodInvocation;
@@ -34,7 +34,7 @@ public class FullTextAtomQueryParser {
         });
     }
 
-    public AtomQuery parseFullTextAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, SQLArgs SQLArgs) {
+    public AtomQuery parseFullTextAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, SQLArgsx SQLArgs) {
         MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, SQLArgs);
         MethodQueryParser matchAtomQueryParser = getQueryParser(methodInvocation);
         return matchAtomQueryParser.parseAtomMethodQuery(methodInvocation);

+ 61 - 60
src/main/java/org/es/sql/parser/query/method/script/ScriptAtomQueryParser.java

@@ -1,60 +1,61 @@
-//package org.es.sql.parser.query.method.script;
-//
-//import com.google.common.collect.ImmutableList;
-//import org.apache.commons.collections.MapUtils;
-//import org.apache.commons.lang.StringUtils;
-//import org.elasticsearch.index.query.QueryBuilders;
-//import org.elasticsearch.script.Script;
-//import org.elasticsearch.script.ScriptService;
-//import org.es.sql.bean.AtomQuery;
-//import org.es.sql.exception.ElasticSql2DslException;
-//import org.es.sql.parser.query.method.MethodInvocation;
-//import org.es.sql.parser.query.method.ParameterizedMethodQueryParser;
-//
-//import java.util.List;
-//import java.util.Map;
-//
-//public class ScriptAtomQueryParser extends ParameterizedMethodQueryParser {
-//
-//    private static List<String> SCRIPT_METHOD = ImmutableList.of("script_query", "scriptQuery");
-//
-//    @Override
-//    public List<String> defineMethodNames() {
-//        return SCRIPT_METHOD;
-//    }
-//
-//    @Override
-//    protected String defineExtraParamString(MethodInvocation invocation) {
-//        int extraParamIdx = 1;
-//
-//        return (invocation.getParameterCount() == extraParamIdx + 1)
-//                ? invocation.getParameterAsString(extraParamIdx) : StringUtils.EMPTY;
-//    }
-//
-//    @Override
-//    public void checkMethodInvocation(MethodInvocation invocation) throws ElasticSql2DslException {
-//        if (invocation.getParameterCount() != 1 && invocation.getParameterCount() != 2) {
-//            throw new ElasticSql2DslException(
-//                    String.format("[syntax error] There's no %s args method named [%s].",
-//                            invocation.getParameterCount(), invocation.getMethodName()));
-//        }
-//
-//        String script = invocation.getParameterAsString(0);
-//        if (StringUtils.isEmpty(script)) {
-//            throw new ElasticSql2DslException("[syntax error] Script can not be blank!");
-//        }
-//    }
-//
-//    @Override
-//    protected AtomQuery parseMethodQueryWithExtraParams(MethodInvocation invocation, Map<String, String> extraParamMap) throws ElasticSql2DslException {
-//        String script = invocation.getParameterAsString(0);
-//
-//        if (MapUtils.isNotEmpty(extraParamMap)) {
-//            Map<String, Object> scriptParamMap = generateRawTypeParameterMap(invocation);
-//            return new AtomQuery(QueryBuilders.scriptQuery(new Script(script, ScriptService.ScriptType.INLINE, null, scriptParamMap)));
-//        }
-//        return new AtomQuery(QueryBuilders.scriptQuery(new Script(script)));
-//    }
-//
-//
-//}
+package org.es.sql.parser.query.method.script;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang.StringUtils;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.script.Script;
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.parser.query.method.MethodInvocation;
+import org.es.sql.parser.query.method.ParameterizedMethodQueryParser;
+
+import java.util.List;
+import java.util.Map;
+
+public class ScriptAtomQueryParser extends ParameterizedMethodQueryParser {
+
+    private static List<String> SCRIPT_METHOD = ImmutableList.of("script_query", "scriptQuery");
+
+    @Override
+    public List<String> defineMethodNames() {
+        return SCRIPT_METHOD;
+    }
+
+    @Override
+    protected String defineExtraParamString(MethodInvocation invocation) {
+        int extraParamIdx = 1;
+
+        return (invocation.getParameterCount() == extraParamIdx + 1)
+                ? invocation.getParameterAsString(extraParamIdx) : StringUtils.EMPTY;
+    }
+
+    @Override
+    public void checkMethodInvocation(MethodInvocation invocation) throws ElasticSql2DslException {
+        if (invocation.getParameterCount() != 1 && invocation.getParameterCount() != 2) {
+            throw new ElasticSql2DslException(
+                    String.format("[syntax error] There's no %s args method named [%s].",
+                            invocation.getParameterCount(), invocation.getMethodName()));
+        }
+
+        String script = invocation.getParameterAsString(0);
+        if (StringUtils.isEmpty(script)) {
+            throw new ElasticSql2DslException("[syntax error] Script can not be blank!");
+        }
+    }
+
+    @Override
+    protected AtomQuery parseMethodQueryWithExtraParams(MethodInvocation invocation, Map<String, String> extraParamMap) throws ElasticSql2DslException {
+        String script = invocation.getParameterAsString(0);
+
+        if (MapUtils.isNotEmpty(extraParamMap)) {
+            Map<String, Object> scriptParamMap = generateRawTypeParameterMap(invocation);
+            Script scriptObject = new Script(Script.DEFAULT_SCRIPT_TYPE, Script.DEFAULT_SCRIPT_LANG, script, scriptParamMap);
+
+            return new AtomQuery(QueryBuilders.scriptQuery(scriptObject));
+        }
+        return new AtomQuery(QueryBuilders.scriptQuery(new Script(script)));
+    }
+
+
+}

+ 2 - 2
src/main/java/org/es/sql/parser/query/method/term/TermLevelAtomQueryParser.java

@@ -3,7 +3,7 @@ package org.es.sql.parser.query.method.term;
 import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
 import com.google.common.collect.ImmutableList;
 import org.es.sql.bean.AtomQuery;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.listener.ParseActionListener;
 import org.es.sql.parser.query.method.MethodInvocation;
@@ -35,7 +35,7 @@ public class TermLevelAtomQueryParser {
         return Boolean.TRUE;
     }
 
-    public AtomQuery parseTermLevelAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, SQLArgs SQLArgs) {
+    public AtomQuery parseTermLevelAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, SQLArgsx SQLArgs) {
         MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, SQLArgs);
         MethodQueryParser matchAtomQueryParser = getQueryParser(methodInvocation);
         return matchAtomQueryParser.parseAtomMethodQuery(methodInvocation);

+ 10 - 11
src/main/java/org/es/sql/parser/sql/AbstractQueryConditionParser.java

@@ -10,8 +10,8 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.es.sql.bean.AtomQuery;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.bean.SQLCondition;
-import org.es.sql.bean.SQLArgs;
 import org.es.sql.enums.SQLBoolOperator;
 import org.es.sql.enums.SQLConditionType;
 import org.es.sql.exception.ElasticSql2DslException;
@@ -21,16 +21,15 @@ import org.es.sql.parser.query.exact.BinaryAtomQueryParser;
 import org.es.sql.parser.query.exact.InListAtomQueryParser;
 import org.es.sql.parser.query.method.MethodInvocation;
 import org.es.sql.parser.query.method.fulltext.FullTextAtomQueryParser;
+import org.es.sql.parser.query.method.script.ScriptAtomQueryParser;
 import org.es.sql.parser.query.method.term.TermLevelAtomQueryParser;
 
 import java.util.List;
 
-//import org.es.sql.parser.query.method.script.ScriptAtomQueryParser;
-
 public abstract class AbstractQueryConditionParser implements QueryParser {
 
     private final TermLevelAtomQueryParser termLevelAtomQueryParser;
-    //    private final ScriptAtomQueryParser scriptAtomQueryParser;
+    private final ScriptAtomQueryParser scriptAtomQueryParser;
     private final FullTextAtomQueryParser fullTextAtomQueryParser;
     private final BinaryAtomQueryParser binaryQueryParser;
     private final InListAtomQueryParser inListQueryParser;
@@ -43,10 +42,10 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
         inListQueryParser = new InListAtomQueryParser(parseActionListener);
         betweenAndQueryParser = new BetweenAndAtomQueryParser(parseActionListener);
 
-//        scriptAtomQueryParser = new ScriptAtomQueryParser();
+        scriptAtomQueryParser = new ScriptAtomQueryParser();
     }
 
-    protected BoolQueryBuilder parseQueryConditionExpr(SQLExpr conditionExpr, String queryAs, SQLArgs SQLArgs) {
+    protected BoolQueryBuilder parseQueryConditionExpr(SQLExpr conditionExpr, String queryAs, SQLArgsx SQLArgs) {
         SQLCondition SQLCondition = recursiveParseQueryCondition(conditionExpr, queryAs, SQLArgs);
         SQLBoolOperator operator = SQLCondition.getOperator();
 
@@ -56,7 +55,7 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
         return mergeAtomQuery(SQLCondition.getQueryList(), operator);
     }
 
-    private SQLCondition recursiveParseQueryCondition(SQLExpr conditionExpr, String queryAs, SQLArgs SQLArgs) {
+    private SQLCondition recursiveParseQueryCondition(SQLExpr conditionExpr, String queryAs, SQLArgsx SQLArgs) {
         if (conditionExpr instanceof SQLBinaryOpExpr) {
             SQLBinaryOpExpr binOpExpr = (SQLBinaryOpExpr) conditionExpr;
             SQLBinaryOperator binOperator = binOpExpr.getOperator();
@@ -91,15 +90,15 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
         return new SQLCondition(parseAtomQueryCondition(conditionExpr, queryAs, SQLArgs), SQLConditionType.Atom);
     }
 
-    private AtomQuery parseAtomQueryCondition(SQLExpr sqlConditionExpr, String queryAs, SQLArgs SQLArgs) {
+    private AtomQuery parseAtomQueryCondition(SQLExpr sqlConditionExpr, String queryAs, SQLArgsx SQLArgs) {
         if (sqlConditionExpr instanceof SQLMethodInvokeExpr) {
             SQLMethodInvokeExpr methodQueryExpr = (SQLMethodInvokeExpr) sqlConditionExpr;
 
             MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, SQLArgs);
 
-//            if (scriptAtomQueryParser.isMatchMethodInvocation(methodInvocation)) {
-//                return scriptAtomQueryParser.parseAtomMethodQuery(methodInvocation);
-//            }
+            if (scriptAtomQueryParser.isMatchMethodInvocation(methodInvocation)) {
+                return scriptAtomQueryParser.parseAtomMethodQuery(methodInvocation);
+            }
 
             if (fullTextAtomQueryParser.isFulltextAtomQuery(methodInvocation)) {
                 return fullTextAtomQueryParser.parseFullTextAtomQuery(methodQueryExpr, queryAs, SQLArgs);

+ 3 - 3
src/main/java/org/es/sql/parser/sql/QueryGroupByParser.java

@@ -15,7 +15,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilde
 import org.es.sql.bean.ElasticDslContext;
 import org.es.sql.bean.ElasticSqlQueryField;
 import org.es.sql.bean.RangeSegment;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.druid.ElasticSqlSelectQueryBlock;
 import org.es.sql.enums.QueryFieldType;
 import org.es.sql.exception.ElasticSql2DslException;
@@ -91,7 +91,7 @@ public class QueryGroupByParser implements QueryParser {
 
     }
 
-    private AggregationBuilder parseTermsAggregation(String queryAs, SQLArgs args, SQLExpr termsFieldExpr, SQLExpr shardSizeExpr) {
+    private AggregationBuilder parseTermsAggregation(String queryAs, SQLArgsx args, SQLExpr termsFieldExpr, SQLExpr shardSizeExpr) {
         QueryFieldParser queryFieldParser = new QueryFieldParser();
 
         ElasticSqlQueryField queryField = queryFieldParser.parseConditionQueryField(termsFieldExpr, queryAs);
@@ -118,7 +118,7 @@ public class QueryGroupByParser implements QueryParser {
         return createRangeBuilder(queryField.getQueryFieldFullName(), rangeSegments);
     }
 
-    private List<RangeSegment> parseRangeSegments(SQLMethodInvokeExpr rangeMethodExpr, SQLArgs args) {
+    private List<RangeSegment> parseRangeSegments(SQLMethodInvokeExpr rangeMethodExpr, SQLArgsx args) {
         List<RangeSegment> rangeSegmentList = Lists.newArrayList();
         for (int pIdx = 1; pIdx < rangeMethodExpr.getParameters().size(); pIdx++) {
             SQLMethodInvokeExpr segMethodExpr = (SQLMethodInvokeExpr) rangeMethodExpr.getParameters().get(pIdx);

+ 2 - 2
src/main/java/org/es/sql/parser/sql/QueryLimitSizeParser.java

@@ -4,7 +4,7 @@ import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
 import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
 import org.es.sql.bean.ElasticDslContext;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.druid.ElasticSqlSelectQueryBlock;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.helper.ElasticSqlArgConverter;
@@ -36,7 +36,7 @@ public class QueryLimitSizeParser implements QueryParser {
         }
     }
 
-    public Integer parseLimitInteger(SQLExpr limitInt, SQLArgs args) {
+    public Integer parseLimitInteger(SQLExpr limitInt, SQLArgsx args) {
         if (limitInt instanceof SQLIntegerExpr) {
             return ((SQLIntegerExpr) limitInt).getNumber().intValue();
         }

+ 5 - 8
src/main/java/org/es/sql/parser/sql/QueryOrderConditionParser.java

@@ -13,15 +13,12 @@ import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortOrder;
 import org.es.sql.bean.ElasticDslContext;
 import org.es.sql.bean.ElasticSqlQueryField;
-import org.es.sql.bean.SQLArgs;
+import org.es.sql.bean.SQLArgsx;
 import org.es.sql.druid.ElasticSqlSelectQueryBlock;
 import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.listener.ParseActionListener;
 import org.es.sql.parser.query.method.MethodInvocation;
-import org.es.sql.parser.sql.sort.ConditionSortBuilder;
-import org.es.sql.parser.sql.sort.MethodSortParser;
-import org.es.sql.parser.sql.sort.NvlMethodSortParser;
-import org.es.sql.parser.sql.sort.ParseSortBuilderHelper;
+import org.es.sql.parser.sql.sort.*;
 
 import java.util.List;
 
@@ -35,8 +32,8 @@ public class QueryOrderConditionParser implements QueryParser {
         this.parseActionListener = parseActionListener;
 
         methodSortParsers = ImmutableList.of(
-                new NvlMethodSortParser()
-//                , new ScriptMethodSortParser()
+                new NvlMethodSortParser(),
+                new ScriptMethodSortParser()
         );
     }
 
@@ -56,7 +53,7 @@ public class QueryOrderConditionParser implements QueryParser {
         }
     }
 
-    private SortBuilder parseOrderCondition(SQLSelectOrderByItem orderByItem, String queryAs, SQLArgs SQLArgs) {
+    private SortBuilder parseOrderCondition(SQLSelectOrderByItem orderByItem, String queryAs, SQLArgsx SQLArgs) {
 
         SortOrder order = orderByItem.getType() == SQLOrderingSpecification.ASC ? SortOrder.ASC : SortOrder.DESC;
 

+ 63 - 58
src/main/java/org/es/sql/parser/sql/sort/ScriptMethodSortParser.java

@@ -1,58 +1,63 @@
-//package org.es.sql.parser.sql.sort;
-//
-//import com.google.common.collect.ImmutableList;
-//import org.apache.commons.collections.MapUtils;
-//import org.apache.commons.lang.StringUtils;
-//import org.elasticsearch.search.sort.SortBuilder;
-//import org.elasticsearch.search.sort.SortBuilders;
-//import org.elasticsearch.search.sort.SortOrder;
-//import org.es.sql.exception.ElasticSql2DslException;
-//import org.es.sql.parser.query.method.MethodInvocation;
-//
-//import java.util.List;
-//import java.util.Map;
-//
-//public class ScriptMethodSortParser extends AbstractMethodSortParser {
-//
-//    public static final List<String> SCRIPT_SORT_METHOD = ImmutableList.of("script_sort", "scriptSort");
-//
-//    @Override
-//    public List<String> defineMethodNames() {
-//        return SCRIPT_SORT_METHOD;
-//    }
-//
-//    @Override
-//    protected String defineExtraParamString(MethodInvocation invocation) {
-//        if (invocation.getParameterCount() == 3) {
-//            return invocation.getParameterAsString(2);
-//        }
-//        return StringUtils.EMPTY;
-//    }
-//
-//    @Override
-//    public void checkMethodInvocation(MethodInvocation nvlMethodInvocation) throws ElasticSql2DslException {
-//        if (!isMatchMethodInvocation(nvlMethodInvocation)) {
-//            throw new ElasticSql2DslException("[syntax error] Sql sort condition only support script_query method invoke");
-//        }
-//
-//        int methodParameterCount = nvlMethodInvocation.getParameterCount();
-//        if (methodParameterCount != 2 && methodParameterCount != 3) {
-//            throw new ElasticSql2DslException(String.format("[syntax error] There is no %s args method named script_sort", methodParameterCount));
-//        }
-//    }
-//
-//    @Override
-//    protected SortBuilder parseMethodSortBuilderWithExtraParams(
-//            MethodInvocation scriptSortMethodInvocation, SortOrder order, Map<String, Object> extraParamMap) throws ElasticSql2DslException {
-//
-//        String script = scriptSortMethodInvocation.getParameterAsString(0);
-//        String type = scriptSortMethodInvocation.getParameterAsString(1);
-//
-//        if (MapUtils.isNotEmpty(extraParamMap)) {
-//            Map<String, Object> scriptParamMap = generateRawTypeParameterMap(scriptSortMethodInvocation);
-//            return SortBuilders.scriptSort(script, type).order(order).setParams(scriptParamMap);
-//        }
-//
-//        return SortBuilders.scriptSort(script, type).order(order);
-//    }
-//}
+package org.es.sql.parser.sql.sort;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang.StringUtils;
+import org.elasticsearch.script.Script;
+import org.elasticsearch.search.sort.ScriptSortBuilder;
+import org.elasticsearch.search.sort.SortBuilder;
+import org.elasticsearch.search.sort.SortBuilders;
+import org.elasticsearch.search.sort.SortOrder;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.parser.query.method.MethodInvocation;
+
+import java.util.List;
+import java.util.Map;
+
+public class ScriptMethodSortParser extends AbstractMethodSortParser {
+
+    public static final List<String> SCRIPT_SORT_METHOD = ImmutableList.of("script_sort", "scriptSort");
+
+    @Override
+    public List<String> defineMethodNames() {
+        return SCRIPT_SORT_METHOD;
+    }
+
+    @Override
+    protected String defineExtraParamString(MethodInvocation invocation) {
+        if (invocation.getParameterCount() == 3) {
+            return invocation.getParameterAsString(2);
+        }
+        return StringUtils.EMPTY;
+    }
+
+    @Override
+    public void checkMethodInvocation(MethodInvocation nvlMethodInvocation) throws ElasticSql2DslException {
+        if (!isMatchMethodInvocation(nvlMethodInvocation)) {
+            throw new ElasticSql2DslException("[syntax error] Sql sort condition only support script_query method invoke");
+        }
+
+        int methodParameterCount = nvlMethodInvocation.getParameterCount();
+        if (methodParameterCount != 2 && methodParameterCount != 3) {
+            throw new ElasticSql2DslException(String.format("[syntax error] There is no %s args method named script_sort", methodParameterCount));
+        }
+    }
+
+    @Override
+    protected SortBuilder parseMethodSortBuilderWithExtraParams(
+            MethodInvocation scriptSortMethodInvocation, SortOrder order, Map<String, Object> extraParamMap) throws ElasticSql2DslException {
+
+        String script = scriptSortMethodInvocation.getParameterAsString(0);
+        String type = scriptSortMethodInvocation.getParameterAsString(1);
+        ScriptSortBuilder.ScriptSortType scriptSortType = ScriptSortBuilder.ScriptSortType.fromString(type);
+
+        if (MapUtils.isNotEmpty(extraParamMap)) {
+            Map<String, Object> scriptParamMap = generateRawTypeParameterMap(scriptSortMethodInvocation);
+            Script scriptObject = new Script(Script.DEFAULT_SCRIPT_TYPE, Script.DEFAULT_SCRIPT_LANG, script, scriptParamMap);
+
+            return SortBuilders.scriptSort(scriptObject, scriptSortType).order(order);
+        }
+
+        return SortBuilders.scriptSort(new Script(script), scriptSortType).order(order);
+    }
+}

+ 0 - 6
target/classes/log4j2.properties

@@ -1,6 +0,0 @@
-appender.console.type = Console
-appender.console.name = console
-appender.console.layout.type = PatternLayout
-
-rootLogger.level = info
-rootLogger.appenderRef.console.ref = console

+ 0 - 32
target/test-classes/application-context.xml

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns="http://www.springframework.org/schema/beans"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans
-     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-
-
-
-
-     http://www.springframework.org/schema/context
-     http://www.springframework.org/schema/context/spring-context-2.5.xsd">
-
-
-    <context:component-scan base-package="org.es"/>
-
-    <bean id="elasticDataSource" class="org.es.jdbc.api.ElasticSingleConnectionDataSource" destroy-method="destroy">
-        <property name="driverClassName" value="org.es.jdbc.api.ElasticDriver"/>
-        <property name="url" value="jdbc:elastic:192.168.0.108:9300/lu-search-cluster"/>
-        <property name="suppressClose" value="true"/>
-    </bean>
-
-
-    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
-        <property name="dataSource" ref="elasticDataSource"/>
-        <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
-    </bean>
-
-    <bean id="sqlMapClientTemplate" class="org.es.spring.ElasticSqlMapClientTemplate">
-        <property name="sqlMapClient" ref="sqlMapClient"/>
-    </bean>
-</beans>

+ 0 - 30
target/test-classes/log4j.properties

@@ -1,30 +0,0 @@
-LOG_HOME=/tmp/logs/elasticsearch-query-spring
-
-log4j.appender.reporterAppender=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.reporterAppender.Threshold=DEBUG
-log4j.appender.reporterAppender.File=${LOG_HOME}/elasticsearch-query-spring.log
-log4j.appender.reporterAppender.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.reporterAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.reporterAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss SSS} [%-3p] [%t] %c{3} - %m%n
-
-log4j.appender.warnAppender=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.warnAppender.Threshold=WARN
-log4j.appender.warnAppender.File=${LOG_HOME}/warn.log
-log4j.appender.warnAppender.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.warnAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.warnAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss SSS} [%-3p] [%t] %c{3} - %m%n
-
-log4j.appender.3rdPartyAppender=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.3rdPartyAppender.Threshold=INFO
-log4j.appender.3rdPartyAppender.File=${LOG_HOME}/3rd-party.log
-log4j.appender.3rdPartyAppender.DatePattern='.'yyyy-MM-dd'.log'
-log4j.appender.3rdPartyAppender.layout=org.apache.log4j.PatternLayout
-log4j.appender.3rdPartyAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss SSS} [%-3p] [%t] %c{3} - %m%n
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.Target=System.out
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%c]-[%p]%m%n
-
-log4j.rootLogger=INFO,reporterAppender,console
-#log4j.logger.org.elasticsearch.jdbc.search=DEBUG,remoteAppender

+ 0 - 17
target/test-classes/sqlMapConfig.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
-        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
-
-<sqlMapConfig>
-    <settings
-            cacheModelsEnabled="true"
-            lazyLoadingEnabled="true"
-            enhancementEnabled="true"
-            maxSessions="64"
-            maxTransactions="20"
-            maxRequests="128"
-            useStatementNamespaces="true"/>
-
-    <sqlMap resource="sqlmap/PRODUCT.xml"/>
-
-</sqlMapConfig>

+ 0 - 19
target/test-classes/sqlmap/PRODUCT.xml

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE sqlMap
-        PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
-        "http://ibatis.apache.org/dtd/sql-map-2.dtd">
-<sqlMap namespace="PRODUCT">
-    <select id="getProductByCodeAndMatchWord" parameterClass="java.util.Map" resultClass="java.lang.String">
-        SELECT *
-        FROM index.product
-        QUERY match(productName, #matchWord#) or prefix(productName, #prefixWord#, 'boost:2.0f')
-        WHERE productCode = #productCode#
-        AND advicePrice > #advicePrice#
-        AND $$buyers.buyerName IN ('china', 'usa')
-        ROUTING BY #routingVal#
-    </select>
-
-    <select id="getAllProduct" resultClass="java.lang.String">
-        SELECT * FROM index.product
-    </select>
-</sqlMap>