Ver código fonte

Merge branch '5.x'

chennan 8 anos atrás
pai
commit
671e30e43f
100 arquivos alterados com 826 adições e 1291 exclusões
  1. 0 59
      elasticsearch-query-core/pom.xml
  2. 0 32
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/AtomQuery.java
  3. 0 15
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/listener/ParseActionListener.java
  4. 0 27
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/listener/ParseActionListenerAdapter.java
  5. 0 9
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/MethodQueryParser.java
  6. 0 60
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/script/ScriptAtomQueryParser.java
  7. 0 58
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/sort/ScriptMethodSortParser.java
  8. 0 27
      elasticsearch-query-jdbc/pom.xml
  9. 0 51
      elasticsearch-query-spring/pom.xml
  10. 0 330
      help-docs/help.md
  11. 154 152
      pom.xml
  12. 14 16
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractConnection.java
  13. 0 0
      src/main/java/org/es/jdbc/api/AbstractDataSource.java
  14. 6 6
      src/main/java/org/es/jdbc/api/AbstractDriverBasedDataSource.java
  15. 5 5
      src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedConnection.java
  16. 0 0
      src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedPreparedStatement.java
  17. 0 0
      src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedResultSet.java
  18. 4 1
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedStatement.java
  19. 0 0
      src/main/java/org/es/jdbc/api/AbstractResultSet.java
  20. 8 9
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractStatement.java
  21. 0 0
      src/main/java/org/es/jdbc/api/ConnectionProxy.java
  22. 10 12
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/DriverManagerDataSource.java
  23. 0 0
      src/main/java/org/es/jdbc/api/ElasticConnection.java
  24. 0 0
      src/main/java/org/es/jdbc/api/ElasticDatabaseMetaData.java
  25. 3 4
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticDriver.java
  26. 0 0
      src/main/java/org/es/jdbc/api/ElasticPreparedStatement.java
  27. 0 0
      src/main/java/org/es/jdbc/api/ElasticResultSet.java
  28. 0 0
      src/main/java/org/es/jdbc/api/ElasticResultSetMetaData.java
  29. 15 21
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticSingleConnectionDataSource.java
  30. 2 2
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticStatement.java
  31. 0 0
      src/main/java/org/es/jdbc/api/SmartDataSource.java
  32. 0 0
      src/main/java/org/es/jdbc/es/ElasticClientProvider.java
  33. 0 0
      src/main/java/org/es/jdbc/es/ElasticClientProxy.java
  34. 4 2
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/ElasticClientProxyProviderImpl.java
  35. 11 8
      elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/JdbcSearchActionExecutor.java
  36. 0 0
      src/main/java/org/es/jdbc/es/JdbcSearchResponse.java
  37. 0 0
      src/main/java/org/es/jdbc/es/JdbcSearchResponseExtractor.java
  38. 0 0
      src/main/java/org/es/jdbc/es/JdbcSearchResponseResolver.java
  39. 0 0
      src/main/java/org/es/jdbc/exception/BuildElasticClientException.java
  40. 0 0
      src/main/java/org/es/jdbc/exception/ResolveSearchResponseException.java
  41. 0 0
      src/main/java/org/es/spring/ElasticSqlMapClientTemplate.java
  42. 0 0
      src/main/java/org/es/spring/ElasticSqlMapExecutor.java
  43. 32 0
      src/main/java/org/es/sql/bean/AtomQuery.java
  44. 6 6
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticDslContext.java
  45. 13 10
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticSqlParseResult.java
  46. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticSqlQueryField.java
  47. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticSqlQueryFields.java
  48. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/QueryFieldReferenceNode.java
  49. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/QueryFieldReferencePath.java
  50. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/RangeSegment.java
  51. 3 3
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/SQLCondition.java
  52. 58 0
      src/main/java/org/es/sql/bean/SqlArgs.java
  53. 0 0
      src/main/java/org/es/sql/druid/ElasticSqlExprParser.java
  54. 0 0
      src/main/java/org/es/sql/druid/ElasticSqlLexer.java
  55. 2 1
      elasticsearch-query-core/src/main/java/org/es/sql/druid/ElasticSqlSelectParser.java
  56. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/druid/ElasticSqlSelectQueryBlock.java
  57. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/QueryFieldType.java
  58. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SQLBoolOperator.java
  59. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SQLConditionOperator.java
  60. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SQLConditionType.java
  61. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SortOption.java
  62. 1 1
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/exception/ElasticSql2DslException.java
  63. 22 20
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/helper/ElasticSqlArgTransferHelper.java
  64. 6 4
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/helper/ElasticSqlDateParseHelper.java
  65. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/helper/ElasticSqlMethodInvokeHelper.java
  66. 19 0
      src/main/java/org/es/sql/listener/ParseActionListener.java
  67. 34 0
      src/main/java/org/es/sql/listener/ParseActionListenerAdapter.java
  68. 9 8
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/ElasticSql2DslParser.java
  69. 12 27
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/AbstractAtomExactQueryParser.java
  70. 10 9
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/BetweenAndAtomQueryParser.java
  71. 10 9
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/BinaryAtomQueryParser.java
  72. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/IConditionExactQueryBuilder.java
  73. 9 8
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/InListAtomQueryParser.java
  74. 9 23
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/AbstractFieldSpecificMethodQueryParser.java
  75. 10 9
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/MethodInvocation.java
  76. 9 0
      src/main/java/org/es/sql/parser/query/method/MethodQueryParser.java
  77. 5 5
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/ParameterizedMethodQueryParser.java
  78. 3 3
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/AbstractParameterizedMethodExpression.java
  79. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/FieldSpecificMethodExpression.java
  80. 3 3
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/MethodExpression.java
  81. 2 2
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/ParameterizedMethodExpression.java
  82. 9 8
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/FullTextAtomQueryParser.java
  83. 14 12
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/MatchAtomQueryParser.java
  84. 14 13
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/MultiMatchAtomQueryParser.java
  85. 16 16
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/QueryStringAtomQueryParser.java
  86. 17 17
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/SimpleQueryStringAtomQueryParser.java
  87. 60 0
      src/main/java/org/es/sql/parser/query/method/script/ScriptAtomQueryParser.java
  88. 5 5
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/FuzzyAtomQueryParser.java
  89. 5 5
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/PrefixAtomQueryParser.java
  90. 5 6
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/RegexpAtomQueryParser.java
  91. 5 5
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/TermAtomQueryParser.java
  92. 9 8
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/TermLevelAtomQueryParser.java
  93. 13 13
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/TermsAtomQueryParser.java
  94. 5 5
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/WildcardAtomQueryParser.java
  95. 51 48
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/AbstractQueryConditionParser.java
  96. 6 6
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryFieldParser.java
  97. 4 4
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryFromParser.java
  98. 33 34
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryGroupByParser.java
  99. 12 9
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryLimitSizeParser.java
  100. 0 0
      elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryMatchConditionParser.java

+ 0 - 59
elasticsearch-query-core/pom.xml

@@ -1,59 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-		<groupId>org.elasticsearch</groupId>
-		<artifactId>elasticsearch-query</artifactId>
-		<version>2.4.4</version>
-	</parent>
-	
-    <artifactId>elasticsearch-query-core</artifactId>
-	<packaging>jar</packaging>
-	<name>${project.artifactId}</name>
-	
-	<dependencies>
-		<dependency>
-			<groupId>org.elasticsearch</groupId>
-			<artifactId>elasticsearch</artifactId>
-		</dependency>
-	
-		<dependency>
-			 <groupId>com.alibaba</groupId>
-			 <artifactId>druid</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>joda-time</groupId>
-			<artifactId>joda-time</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-collections</groupId>
-			<artifactId>commons-collections</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-		</dependency>
-	</dependencies>
-</project>

+ 0 - 32
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/AtomQuery.java

@@ -1,32 +0,0 @@
-package org.es.sql.dsl.bean;
-
-import org.elasticsearch.index.query.QueryBuilder;
-
-public class AtomQuery {
-    private QueryBuilder query;
-    private Boolean isNestedQuery;
-    private String nestedQueryPathContext;
-
-    public AtomQuery(QueryBuilder query) {
-        this.query = query;
-        this.isNestedQuery = Boolean.FALSE;
-    }
-
-    public AtomQuery(QueryBuilder query, String nestedQueryPathContext) {
-        this.query = query;
-        this.isNestedQuery = Boolean.TRUE;
-        this.nestedQueryPathContext = nestedQueryPathContext;
-    }
-
-    public QueryBuilder getQuery() {
-        return query;
-    }
-
-    public Boolean getNestedQuery() {
-        return isNestedQuery;
-    }
-
-    public String getNestedQueryPathContext() {
-        return nestedQueryPathContext;
-    }
-}

+ 0 - 15
elasticsearch-query-core/src/main/java/org/es/sql/dsl/listener/ParseActionListener.java

@@ -1,15 +0,0 @@
-package org.es.sql.dsl.listener;
-
-import org.es.sql.dsl.bean.ElasticSqlQueryField;
-import org.es.sql.dsl.enums.SQLConditionOperator;
-
-public interface ParseActionListener {
-
-    void onSelectFieldParse(ElasticSqlQueryField field);
-
-    void onAtomExactQueryConditionParse(ElasticSqlQueryField paramName, Object[] paramValues, SQLConditionOperator operator);
-
-    void onAtomMethodQueryConditionParse(ElasticSqlQueryField paramName, Object[] parameters);
-
-    void onFailure(Throwable t);
-}

+ 0 - 27
elasticsearch-query-core/src/main/java/org/es/sql/dsl/listener/ParseActionListenerAdapter.java

@@ -1,27 +0,0 @@
-package org.es.sql.dsl.listener;
-
-import org.es.sql.dsl.bean.ElasticSqlQueryField;
-import org.es.sql.dsl.enums.SQLConditionOperator;
-
-public class ParseActionListenerAdapter implements ParseActionListener {
-
-    @Override
-    public void onSelectFieldParse(ElasticSqlQueryField field) {
-
-    }
-
-    @Override
-    public void onAtomExactQueryConditionParse(ElasticSqlQueryField paramName, Object[] paramValues, SQLConditionOperator operator) {
-
-    }
-
-    @Override
-    public void onAtomMethodQueryConditionParse(ElasticSqlQueryField paramName, Object[] parameters) {
-
-    }
-
-    @Override
-    public void onFailure(Throwable t) {
-
-    }
-}

+ 0 - 9
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/MethodQueryParser.java

@@ -1,9 +0,0 @@
-package org.es.sql.dsl.parser.query.method;
-
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.expr.MethodExpression;
-
-public interface MethodQueryParser extends MethodExpression {
-    AtomQuery parseAtomMethodQuery(MethodInvocation invocation) throws ElasticSql2DslException;
-}

+ 0 - 60
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/script/ScriptAtomQueryParser.java

@@ -1,60 +0,0 @@
-package org.es.sql.dsl.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.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.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)));
-    }
-
-
-}

+ 0 - 58
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/sort/ScriptMethodSortParser.java

@@ -1,58 +0,0 @@
-package org.es.sql.dsl.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.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.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);
-    }
-}

+ 0 - 27
elasticsearch-query-jdbc/pom.xml

@@ -1,27 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-		<groupId>org.elasticsearch</groupId>
-		<artifactId>elasticsearch-query</artifactId>
-		<version>2.4.4</version>
-	</parent>
-	
-    <artifactId>elasticsearch-query-jdbc</artifactId>
-	<packaging>jar</packaging>
-	<name>${project.artifactId}</name>
-	
-	<dependencies>
-		<dependency>
-			<groupId>org.elasticsearch</groupId>
-			<artifactId>elasticsearch-query-core</artifactId>
-			<version>${project.parent.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.12</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-</project>

+ 0 - 51
elasticsearch-query-spring/pom.xml

@@ -1,51 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-		<groupId>org.elasticsearch</groupId>
-		<artifactId>elasticsearch-query</artifactId>
-		<version>2.4.4</version>
-	</parent>
-	
-    <artifactId>elasticsearch-query-spring</artifactId>
-	<packaging>jar</packaging>
-	<name>${project.artifactId}</name>
-	
-	<dependencies>
-		<dependency>
-			<groupId>org.elasticsearch</groupId>
-			<artifactId>elasticsearch-query-core</artifactId>
-			<version>${project.parent.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.elasticsearch</groupId>
-			<artifactId>elasticsearch-query-jdbc</artifactId>
-			<version>${project.parent.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-orm</artifactId>
-			<version>${spring.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.ibatis</groupId>
-			<artifactId>ibatis-sqlmap</artifactId>
-			<version>${ibatis.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-			<version>1.2.16</version>
-		</dependency>
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.12</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-</project>

+ 0 - 330
help-docs/help.md

@@ -1,330 +0,0 @@
-# elasticsearch-query-toolkit 使用手册
-
----
-### 一、SQL基本结构
-```bash
-## 搜索请求SQL结构
-SELECT [fields] FROM [index.type] QUERY [score query condition] WHERE [bool query condition] ORDER BY [sort field] LIMIT [0, 10]
-
-## 聚合查询SQL结构
-SELECT [MIN(field),MAX(field),SUM(field),AVG(field)] from [index.type] QUERY [score query condition] WHERE [bool query condition] GROUP BY [agg methods]
-```
-
-以上两种SQL结构分别对应ES的搜索请求和聚合请求,下面大概看看这两种结构,后续会详细介绍。
-1、搜索请求SQL
-
- - SELECT项,可以是通配符`*` 也可以是具体指定需要返回的字段(针对inner/nested文档直接通过`.`引用)
- - FROM项,后面跟的是索引名和文档类型如:product.car 表示查询product这个索引下的car类型
- - QUERY项,关键字QUERY和WHERE是同级的,不同之处是QUERY后面跟的查询条件会进行`打分`
- - WHERE项,和QUERY同级,后面跟的查询条件不会参与打分,只是进行简单的`bool匹配`
- - ORDER BY项,跟SQL一样后面跟排序条件
- - LIMIT 项,指定分页参数对应ES的from,size参数
-
-2、 聚合请求SQL
-
- - SELECT/FROM/QUERY/WHERE 项同上
- - GROUP BY项,后面跟的是需要分组查询的条件,如前支持只支持:terms、range
-
---------
-
-为了能更好的说明SQL语法的使用,我们假设已经存在一个名叫`product`的索引,索引下有一个`apple`的类型,具体的mapping像下面这样,其中provider是一个inner doc表示供应商,buyers是一个nested doc表示购买者。
-```bash
-"mappings": {
-	"apple": {
-		"properties": {
-			"productName": {
-				"type": "string",
-				"index": "not_analyzed"
-			},
-			"productCode": {
-				"type": "string",
-				"index": "not_analyzed"
-			},
-			"minPrice": {
-				"type": "double"
-			},
-			"advicePrice": {
-				"type": "double"
-			},
-			"provider": {
-				"type": "object",
-				"properties": {
-					"providerName": {
-						"type": "string",
-						"index": "not_analyzed"
-					},
-					"providerLevel" : {
-						"type": "integer"
-					}
-				}
-			},
-			"buyers": {
-				"type": "nested",
-				"properties": {
-					"buyerName": {
-						"type": "string",
-						"index": "not_analyzed"
-					},
-					"productPrice": {
-						"type": "double"
-					}
-				}
-			}
-		}
-	}
-}
-```
-
-### 二、搜索请求SQL查询语法
-**注意:由于Inner Doc和Root Doc的对应关系是一对一,Nested Doc和Root Doc的对应关系是多对一,所以为了区分这种关系在引用Nesetd Doc时需要在类型前加上 \$ 符号,如:\$buyers.buyerName(Nested Doc引用需要加 \$ 符号),provider.privideName(Inner Doc直接引用)**
-
-#### 1. SELECT的使用
-```bash
-# 支持通配符
-SELECT * FROM product.apple
-
-# 指定具体返回的字段
-SELECT productName,productCode FROM product.apple
-
-# 对Inner Doc字段的引用直接通过 “.”
-SELECT provider.providerName FROM product.apple
-# 当然也可对Inner Doc字段通配
-SELECT productName,provider.* FROM product.apple
-
-# 对于Nested Doc的引用需要需要在类型名前加上 “$”
-SELECT $buyers.buyerName FROM product.apple
-```
-
-#### 2. WHERE条件的使用
-在SQL中WHERE项后面指定的是bool条件,不会参与打分,这些条件最终会被放到`bool query`中的`filter`中提交给ES指定
-
-##### 1) 基本条件支持 <、>、<=、>=、between...and、in、not in、is null、not null
-```bash
-SELECT * FROM product.apple WHERE minPrice >= 100 and minPrice <= 200
-SELECT * FROM product.apple WHERE minPrice BETWEEN 100 AND 200
-
-SELECT * FROM product.apple WHERE provider.providerLevel in (1, 2, 3) and provider.providerLevel not in (4, 5)
-
-SELECT * FROM product.apple WHERE productName is not null and productCode is null
-```
-
-**注意:上面SQL中`WHERE`可以完全替换成`QUERY`返回的结果一模一样,唯一不同的是`QUERY`会计算得分,`WHERE`只是单纯的bool匹配**
-
-
-##### 2) 内嵌查询patch_context自动识别
-我们都知道在针对nested doc做查询时有专门的nest查询语法,且必须指定一个nested_path才能将多个子查询放到同一个nested query context中,在使用SQL对nested doc查询时不需要显示指定某个或多个条件是存在同一个context中,程序会自动识别,看下面例子:
-
-两个条件同级都是针对内嵌文档的,会被识别存在于同一个neste context里
-```bash
-SELECT * FROM product.apple WHERE $buyers.buyerName = 'usa' and $buyers.productPrice < 200
-{
-  "query" : {
-    "bool" : {
-      "filter" : {
-        "bool" : {
-          "must" : {
-            "nested" : {
-              "query" : {
-                "bool" : {
-                  "must" : [ {
-                    "term" : {
-                      "buyers.buyerName" : "usa"
-                    }
-                  }, {
-                    "range" : {
-                      "buyers.productPrice" : {
-                        "from" : null,
-                        "to" : 200,
-                        "include_lower" : true,
-                        "include_upper" : false
-                      }
-                    }
-                  } ]
-                }
-              },
-              "path" : "buyers"
-            }
-          }
-        }
-      }
-    }
-  }
-}
-```
-两个内嵌条件不同级放到不同nested context里面 
-
-```bash
-SELECT * FROM product.apple WHERE ($buyers.buyerName = 'usa' or minPrice > 100)  and $buyers.productPrice < 200
-
-{
-  "query" : {
-    "bool" : {
-      "filter" : {
-        "bool" : {
-          "must" : [ {
-            "bool" : {
-              "should" : [ {
-                "range" : {
-                  "minPrice" : {
-                    "from" : 100,
-                    "to" : null,
-                    "include_lower" : false,
-                    "include_upper" : true
-                  }
-                }
-              }, {
-                "nested" : {
-                  "query" : {
-                    "term" : {
-                      "buyers.buyerName" : "usa"
-                    }
-                  },
-                  "path" : "buyers"
-                }
-              } ]
-            }
-          }, {
-            "nested" : {
-              "query" : {
-                "range" : {
-                  "buyers.productPrice" : {
-                    "from" : null,
-                    "to" : 200,
-                    "include_lower" : true,
-                    "include_upper" : false
-                  }
-                }
-              },
-              "path" : "buyers"
-            }
-          } ]
-        }
-      }
-    }
-  }
-}
-
-```
-##### 3) Inner Doc查询直接引用即可
-```bash
-SELECT * FROM product.apple WHERE provider.providerLevel in (1, 2, 3)
-SELECT * FROM product.apple WHERE provider.providerName = 'usa'
-```
-##### 4) term 查询
-```bash
-# 在WHERE条件中指定仅仅作为bool查询
-SELECT * FROM product.apple WHERE term(productName, 'iphone6s')
-
-{
-  "query" : {
-    "bool" : {
-      "filter" : {
-        "bool" : {
-          "must" : {
-            "term" : {
-              "productName" : "iphone6s"
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-# 在QUERY条件中指定根据文档打分排序,并能指定可选参数, 指定权重
-SELECT * FROM product.apple QUERY term(productName, 'iphone6s', 'boost:2.0f')
-{
-  "query" : {
-    "bool" : {
-      "must" : {
-        "term" : {
-          "productName" : {
-            "value" : "iphone6s",
-            "boost" : 2.0
-          }
-        }
-      }
-    }
-  }
-}
-```
-**注意1:这里的可选参数是一个以key:value组成的键值对,多个键值对之间用逗号隔开**
-**注意2:terms查询和term类似,这里不再赘述**
-**注意3:term查询其实和SQL中的 “=” 操作一样**
-
-##### 5) match query使用
-```bash
-SELECT * FROM product.apple QUERY match(productName, 'iphone6s', 'boost:2.0f,type:boolean,operator:or,minimum_should_match:75%') WHERE minPrice > 100
-
-{
-  "query" : {
-    "bool" : {
-      "must" : {
-        "match" : {
-          "productName" : {
-            "query" : "iphone6s",
-            "type" : "boolean",
-            "operator" : "OR",
-            "boost" : 2.0,
-            "minimum_should_match" : "75%"
-          }
-        }
-      },
-      "filter" : {
-        "bool" : {
-          "must" : {
-            "range" : {
-              "minPrice" : {
-                "from" : 100,
-                "to" : null,
-                "include_lower" : false,
-                "include_upper" : true
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
-```
-**注意1:这里使用了QUERY和WHERE两种条件配合使用, WHERE达到过滤的效果, QUERY在过滤结果基础上再进行match匹配**
-**注意2: match查询所有的可选参数请参看官网的参数说明:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-match-query.html**
-**注意3:match查询支持多个函数名:match、match_query、matchQuery**
-
-##### 6) multi match使用
-```bash
-SELECT * FROM product.apple QUERY multiMatch('productName^3, productCode', 'iphone6s') WHERE minPrice > 100
-
-{
-  "query" : {
-    "bool" : {
-      "must" : {
-        "multi_match" : {
-          "query" : "iphone6s",
-          "fields" : [ "productName^3", " productCode" ]
-        }
-      },
-      "filter" : {
-        "bool" : {
-          "must" : {
-            "range" : {
-              "minPrice" : {
-                "from" : 100,
-                "to" : null,
-                "include_lower" : false,
-                "include_upper" : true
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
-```
-
-##### 7) 
-```bash
-SELECT * FROM product.apple QUERY  WHERE minPrice > 100
-```

+ 154 - 152
pom.xml

@@ -1,141 +1,15 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <name>elasticsearch-query-toolkit</name>
     <modelVersion>4.0.0</modelVersion>
-    <groupId>org.elasticsearch</groupId>
-    <artifactId>elasticsearch-query</artifactId>
-    <version>2.4.4</version>
-    <packaging>pom</packaging>
-	<name>${project.artifactId}</name>
-	
-	<modules>
-        <module>elasticsearch-query-core</module>
-        <module>elasticsearch-query-jdbc</module>
-		<module>elasticsearch-query-spring</module>
-    </modules>
-	
-	<properties>
-		<maven.compiler.target>1.8</maven.compiler.target>
-
-        <elasticsearch.version>2.4.4</elasticsearch.version>
-        <druid.version>1.0.24</druid.version>
-		<guava.version>18.0</guava.version>
-		<gson.version>2.3.1</gson.version>
-		<spring.version>3.0.5.RELEASE</spring.version>
-		<joda.time.version>2.3</joda.time.version>
-		<ibatis.version>2.3.4.726</ibatis.version>
-		<junit.version>4.12</junit.version>
-		<slf4j.version>1.6.1</slf4j.version>
-		<common.lang.version>2.6</common.lang.version>
-		<common.colletion.version>3.2.1</common.colletion.version>
-
-    </properties>
-	
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>org.apache.ibatis</groupId>
-				<artifactId>ibatis-sqlmap</artifactId>
-				<version>${ibatis.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.elasticsearch</groupId>
-				<artifactId>elasticsearch</artifactId>
-				<version>${elasticsearch.version}</version>
-				<scope>compile</scope>
-			</dependency>
-		
-			<dependency>
-				 <groupId>com.alibaba</groupId>
-				 <artifactId>druid</artifactId>
-				 <version>${druid.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>com.google.guava</groupId>
-				<artifactId>guava</artifactId>
-				<version>${guava.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>com.google.code.gson</groupId>
-				<artifactId>gson</artifactId>
-				<version>${gson.version}</version>
-			</dependency>
-			
-			<dependency>
-				<groupId>joda-time</groupId>
-				<artifactId>joda-time</artifactId>
-				<version>${joda.time.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>commons-collections</groupId>
-				<artifactId>commons-collections</artifactId>
-				<version>${common.colletion.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>commons-lang</groupId>
-				<artifactId>commons-lang</artifactId>
-				<version>${common.lang.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.slf4j</groupId>
-				<artifactId>slf4j-log4j12</artifactId>
-				<version>${slf4j.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>junit</groupId>
-				<artifactId>junit</artifactId>
-				<version>${junit.version}</version>
-				<scope>test</scope>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
-
-    <build>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-compiler-plugin</artifactId>
-					<version>2.3.2</version>
-					<configuration>
-						<encoding>utf-8</encoding>
-						<source>1.8</source>
-						<target>1.8</target>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-surefire-plugin</artifactId>
-					<version>2.11</version>
-					<configuration>
-						<includes>
-							<include>**/*Test.java</include>
-							<include>**/Test*.java</include>
-						</includes>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-source-plugin</artifactId>
-					<version>2.1.2</version>
-					<executions>
-						<execution>
-							<id>attach-sources</id>
-							<goals>
-								<goal>jar</goal>
-							</goals>
-						</execution>
-					</executions>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-    </build>
-	
+    <groupId>org.es</groupId>
+    <artifactId>elasticsearch-query-toolkit</artifactId>
+    <version>${elasticsearch.version}</version>
+    <packaging>jar</packaging>
+    <description>elasticsearch-query-toolkit</description>
+    <inceptionYear>2017</inceptionYear>
     <licenses>
         <license>
             <name>The Apache Software License, Version 2.0</name>
@@ -144,6 +18,12 @@
         </license>
     </licenses>
 
+    <properties>
+        <elasticsearch.version>5.4.1</elasticsearch.version>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <skip.unit.tests>false</skip.unit.tests>
+    </properties>
+
     <repositories>
         <repository>
             <id>uk.maven.org</id>
@@ -158,19 +38,141 @@
         </repository>
     </repositories>
 
-	<mailingLists>
-        <mailingList>
-            <name>chennan</name>
-            <post>465360798@qq.com</post>
-        </mailingList>
-    </mailingLists>
-    
-    <developers>
-        <developer>
-            <id>chennan</id>
-            <name>chennan</name>
-            <email>465360798@qq.com</email>
-            <timezone>8</timezone>
-        </developer>
-    </developers>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>2.8.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>2.8.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-orm</artifactId>
+            <version>3.0.5.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ibatis</groupId>
+            <artifactId>ibatis-sqlmap</artifactId>
+            <version>2.3.4.726</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.0.24</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>18.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>transport</artifactId>
+            <version>${elasticsearch.version}</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>2.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <encoding>utf-8</encoding>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.11</version>
+                <configuration>
+                    <includes>
+                        <include>**/*Test.java</include>
+                        <include>**/Test*.java</include>
+                    </includes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>2.1.2</version>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <outputDirectory>${project.build.directory}/releases/</outputDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 14 - 16
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractConnection.java

@@ -4,11 +4,10 @@ import java.sql.*;
 import java.util.Properties;
 
 public abstract class AbstractConnection extends AbstractFeatureNotSupportedConnection {
-    private boolean closed = false;
-    private int transactionIsolation;
-
     protected String url;
     protected Properties info;
+    private boolean closed = false;
+    private int transactionIsolation;
 
     public AbstractConnection(String url, Properties info) {
         this.url = url;
@@ -70,10 +69,9 @@ public abstract class AbstractConnection extends AbstractFeatureNotSupportedConn
         return false;
     }
 
-
     @Override
-    public void setTransactionIsolation(int level) throws SQLException {
-        this.transactionIsolation = level;
+    public void setAutoCommit(boolean autoCommit) throws SQLException {
+        // ignore
     }
 
     @Override
@@ -82,11 +80,21 @@ public abstract class AbstractConnection extends AbstractFeatureNotSupportedConn
     }
 
     @Override
+    public void setTransactionIsolation(int level) throws SQLException {
+        this.transactionIsolation = level;
+    }
+
+    @Override
     public boolean isReadOnly() throws SQLException {
         return true;
     }
 
     @Override
+    public void setReadOnly(boolean readOnly) throws SQLException {
+        // ignore
+    }
+
+    @Override
     public void close() throws SQLException {
         closed = true;
     }
@@ -97,11 +105,6 @@ public abstract class AbstractConnection extends AbstractFeatureNotSupportedConn
     }
 
     @Override
-    public void setReadOnly(boolean readOnly) throws SQLException {
-        // ignore
-    }
-
-    @Override
     public void commit() throws SQLException {
         // ignore
     }
@@ -112,11 +115,6 @@ public abstract class AbstractConnection extends AbstractFeatureNotSupportedConn
     }
 
     @Override
-    public void setAutoCommit(boolean autoCommit) throws SQLException {
-        // ignore
-    }
-
-    @Override
     public SQLWarning getWarnings() throws SQLException {
         return null;
     }

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractDataSource.java → src/main/java/org/es/jdbc/api/AbstractDataSource.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractDriverBasedDataSource.java → src/main/java/org/es/jdbc/api/AbstractDriverBasedDataSource.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedConnection.java → src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedConnection.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedPreparedStatement.java → src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedPreparedStatement.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedResultSet.java → src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedResultSet.java


+ 4 - 1
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractFeatureNotSupportedStatement.java

@@ -1,7 +1,10 @@
 package org.es.jdbc.api;
 
 
-import java.sql.*;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.sql.Statement;
 
 public abstract class AbstractFeatureNotSupportedStatement implements Statement {
 

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractResultSet.java → src/main/java/org/es/jdbc/api/AbstractResultSet.java


+ 8 - 9
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/AbstractStatement.java

@@ -64,13 +64,13 @@ public abstract class AbstractStatement extends AbstractFeatureNotSupportedState
     }
 
     @Override
-    public void setFetchSize(int rows) throws SQLException {
-        // ignore
+    public int getFetchSize() throws SQLException {
+        return 0;
     }
 
     @Override
-    public int getFetchSize() throws SQLException {
-        return 0;
+    public void setFetchSize(int rows) throws SQLException {
+        // ignore
     }
 
     @Override
@@ -99,15 +99,14 @@ public abstract class AbstractStatement extends AbstractFeatureNotSupportedState
         return isClosed;
     }
 
-
     @Override
-    public void setPoolable(boolean poolable) throws SQLException {
-        // ignore
+    public boolean isPoolable() throws SQLException {
+        return false;
     }
 
     @Override
-    public boolean isPoolable() throws SQLException {
-        return false;
+    public void setPoolable(boolean poolable) throws SQLException {
+        // ignore
     }
 
     @Override

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ConnectionProxy.java → src/main/java/org/es/jdbc/api/ConnectionProxy.java


+ 10 - 12
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/DriverManagerDataSource.java

@@ -26,18 +26,6 @@ public class DriverManagerDataSource extends AbstractDriverBasedDataSource {
         setUrl(url);
     }
 
-
-    public void setDriverClassName(String driverClassName) {
-        String driverClassNameToUse = driverClassName.trim();
-        try {
-            Class.forName(driverClassNameToUse, true, getDefaultClassLoader());
-        }
-        catch (ClassNotFoundException ex) {
-            throw new IllegalStateException("Could not load JDBC driver class [" + driverClassNameToUse + "]", ex);
-        }
-    }
-
-
     public static ClassLoader getDefaultClassLoader() {
         ClassLoader cl = null;
         try {
@@ -62,6 +50,16 @@ public class DriverManagerDataSource extends AbstractDriverBasedDataSource {
         return cl;
     }
 
+    public void setDriverClassName(String driverClassName) {
+        String driverClassNameToUse = driverClassName.trim();
+        try {
+            Class.forName(driverClassNameToUse, true, getDefaultClassLoader());
+        }
+        catch (ClassNotFoundException ex) {
+            throw new IllegalStateException("Could not load JDBC driver class [" + driverClassNameToUse + "]", ex);
+        }
+    }
+
     @Override
     protected Connection getConnectionFromDriver(Properties props) throws SQLException {
         return getConnectionFromDriverManager(getUrl(), props);

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticConnection.java → src/main/java/org/es/jdbc/api/ElasticConnection.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticDatabaseMetaData.java → src/main/java/org/es/jdbc/api/ElasticDatabaseMetaData.java


+ 3 - 4
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticDriver.java

@@ -12,10 +12,6 @@ public class ElasticDriver implements Driver {
 
     private static final String ELASTIC_SEARCH_DRIVER_PREFIX = "jdbc:elastic:";
 
-    private ElasticClientProxy elasticClientProxy = null;
-
-    private ElasticClientProvider elasticClientProvider;
-
     static {
         try {
             DriverManager.registerDriver(new ElasticDriver());
@@ -25,6 +21,9 @@ public class ElasticDriver implements Driver {
         }
     }
 
+    private ElasticClientProxy elasticClientProxy = null;
+    private ElasticClientProvider elasticClientProvider;
+
     private ElasticDriver() {
 
     }

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticPreparedStatement.java → src/main/java/org/es/jdbc/api/ElasticPreparedStatement.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticResultSet.java → src/main/java/org/es/jdbc/api/ElasticResultSet.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticResultSetMetaData.java → src/main/java/org/es/jdbc/api/ElasticResultSetMetaData.java


+ 15 - 21
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticSingleConnectionDataSource.java

@@ -3,7 +3,7 @@ package org.es.jdbc.api;
 
 import org.elasticsearch.client.Client;
 import org.es.jdbc.es.ElasticClientProvider;
-import org.es.sql.utils.Logger;
+import org.es.sql.utils.PersistLogger;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
@@ -13,18 +13,13 @@ import java.sql.Connection;
 import java.sql.SQLException;
 
 public class ElasticSingleConnectionDataSource extends DriverManagerDataSource implements SmartDataSource {
+    private final Object connectionMonitor = new Object();
     private boolean suppressClose;
-
     private Connection target;
-
     private Connection connection;
-
     private Client client;
-
     private ElasticClientProvider elasticClientProvider;
 
-    private final Object connectionMonitor = new Object();
-
     public ElasticSingleConnectionDataSource() {
 
     }
@@ -38,14 +33,14 @@ public class ElasticSingleConnectionDataSource extends DriverManagerDataSource i
         this.elasticClientProvider = elasticClientProvider;
     }
 
-    public void setSuppressClose(boolean suppressClose) {
-        this.suppressClose = suppressClose;
-    }
-
     protected boolean isSuppressClose() {
         return this.suppressClose;
     }
 
+    public void setSuppressClose(boolean suppressClose) {
+        this.suppressClose = suppressClose;
+    }
+
     @Override
     public Connection getConnection() throws SQLException {
         synchronized (this.connectionMonitor) {
@@ -132,7 +127,7 @@ public class ElasticSingleConnectionDataSource extends DriverManagerDataSource i
                 this.target.close();
             }
             catch (Throwable ex) {
-                Logger.warn(this, "Could not close shared JDBC Connection", ex);
+                PersistLogger.warn(this, "Could not close shared JDBC Connection", ex);
             }
         }
 
@@ -141,7 +136,7 @@ public class ElasticSingleConnectionDataSource extends DriverManagerDataSource i
                 client.close();
             }
             catch (Exception ex) {
-                Logger.error(this, "Could not close elasticsearch client", ex);
+                PersistLogger.error(this, "Could not close elasticsearch client", ex);
             }
         }
     }
@@ -154,6 +149,13 @@ public class ElasticSingleConnectionDataSource extends DriverManagerDataSource i
                 new CloseSuppressingInvocationHandler(target));
     }
 
+    protected Boolean getAutoCommitValue() {
+        return Boolean.FALSE;
+    }
+
+    public void setAutoCommit(boolean autoCommit) {
+        // ignore
+    }
 
     private static class CloseSuppressingInvocationHandler implements InvocationHandler {
         private final Connection target;
@@ -204,12 +206,4 @@ public class ElasticSingleConnectionDataSource extends DriverManagerDataSource i
             }
         }
     }
-
-    protected Boolean getAutoCommitValue() {
-        return Boolean.FALSE;
-    }
-
-    public void setAutoCommit(boolean autoCommit) {
-        // ignore
-    }
 }

+ 2 - 2
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/ElasticStatement.java

@@ -4,8 +4,8 @@ import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.action.search.SearchResponse;
 import org.es.jdbc.es.JdbcSearchActionExecutor;
 import org.es.jdbc.es.JdbcSearchResponseExtractor;
-import org.es.sql.dsl.bean.ElasticSqlParseResult;
-import org.es.sql.dsl.parser.ElasticSql2DslParser;
+import org.es.sql.bean.ElasticSqlParseResult;
+import org.es.sql.parser.ElasticSql2DslParser;
 
 import java.sql.Connection;
 import java.sql.ResultSet;

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/api/SmartDataSource.java → src/main/java/org/es/jdbc/api/SmartDataSource.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/ElasticClientProvider.java → src/main/java/org/es/jdbc/es/ElasticClientProvider.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/ElasticClientProxy.java → src/main/java/org/es/jdbc/es/ElasticClientProxy.java


+ 4 - 2
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/ElasticClientProxyProviderImpl.java

@@ -6,6 +6,7 @@ import org.elasticsearch.client.Client;
 import org.elasticsearch.client.transport.TransportClient;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.transport.InetSocketTransportAddress;
+import org.elasticsearch.transport.client.PreBuiltTransportClient;
 import org.es.jdbc.exception.BuildElasticClientException;
 import org.es.sql.utils.Constants;
 
@@ -46,7 +47,7 @@ public class ElasticClientProxyProviderImpl implements ElasticClientProvider {
     private ElasticClientProxy internalBuildElasticClient(String url) {
         String ipUrl = url.substring(ELASTIC_SEARCH_DRIVER_PREFIX.length());
 
-        Settings.Builder settingBuilder = Settings.settingsBuilder();
+        Settings.Builder settingBuilder = Settings.builder();
         settingBuilder.put("client.transport.sniff", true);
 
         String hostListString = ipUrl;
@@ -71,7 +72,8 @@ public class ElasticClientProxyProviderImpl implements ElasticClientProvider {
             }
         }
 
-        TransportClient transportClient = TransportClient.builder().settings(settingBuilder).build()
+
+        TransportClient transportClient = new PreBuiltTransportClient(settingBuilder.build())
                 .addTransportAddresses(addressList.toArray(new InetSocketTransportAddress[addressList.size()]));
 
         return (ElasticClientProxy) Proxy.newProxyInstance(ElasticClientProxy.class.getClassLoader(),

+ 11 - 8
elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/JdbcSearchActionExecutor.java

@@ -1,7 +1,7 @@
 package org.es.jdbc.es;
 
 import org.elasticsearch.action.*;
-import org.es.sql.utils.Logger;
+import org.es.sql.utils.PersistLogger;
 
 public class JdbcSearchActionExecutor {
 
@@ -15,13 +15,15 @@ public class JdbcSearchActionExecutor {
         return JDBC_SEARCH_ACTION_EXECUTOR;
     }
 
-    public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>> Response syncExecuteWithException(RequestBuilder requestBuilder) {
+    public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>>
+    Response syncExecuteWithException(RequestBuilder requestBuilder) {
         ListenableActionFuture<Response> searchActionFuture = requestBuilder.execute();
         searchActionFuture.addListener(defaultActionListener(requestBuilder));
         return searchActionFuture.actionGet();
     }
 
-    public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>> Response syncExecute(RequestBuilder requestBuilder) {
+    public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>>
+    Response syncExecute(RequestBuilder requestBuilder) {
         try {
             ListenableActionFuture<Response> searchActionFuture = requestBuilder.execute();
             searchActionFuture.addListener(defaultActionListener(requestBuilder));
@@ -32,7 +34,8 @@ public class JdbcSearchActionExecutor {
         }
     }
 
-    public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>> void asyncExecute(RequestBuilder requestBuilder) {
+    public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>>
+    void asyncExecute(RequestBuilder requestBuilder) {
         ListenableActionFuture<Response> searchActionFuture = requestBuilder.execute();
         searchActionFuture.addListener(defaultActionListener(requestBuilder));
     }
@@ -41,13 +44,13 @@ public class JdbcSearchActionExecutor {
         return new ActionListener<Response>() {
             @Override
             public void onResponse(Response response) {
-                Logger.debug(this, String.format("[Search_Request] %s", requestBuilder.toString()));
-                Logger.debug(this, String.format("[Search_Response] %s", response.toString()));
+                PersistLogger.debug(this, String.format("[Search_Request] %s", requestBuilder.toString()));
+                PersistLogger.debug(this, String.format("[Search_Response] %s", response.toString()));
             }
 
             @Override
-            public void onFailure(Throwable throwable) {
-                Logger.error(this, "Execute es req error!", throwable);
+            public void onFailure(Exception ex) {
+                PersistLogger.error(this, "Execute es req error!", ex);
             }
         };
     }

elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/JdbcSearchResponse.java → src/main/java/org/es/jdbc/es/JdbcSearchResponse.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/JdbcSearchResponseExtractor.java → src/main/java/org/es/jdbc/es/JdbcSearchResponseExtractor.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/es/JdbcSearchResponseResolver.java → src/main/java/org/es/jdbc/es/JdbcSearchResponseResolver.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/exception/BuildElasticClientException.java → src/main/java/org/es/jdbc/exception/BuildElasticClientException.java


elasticsearch-query-jdbc/src/main/java/org/es/jdbc/exception/ResolveSearchResponseException.java → src/main/java/org/es/jdbc/exception/ResolveSearchResponseException.java


elasticsearch-query-spring/src/main/java/org/es/spring/ElasticSqlMapClientTemplate.java → src/main/java/org/es/spring/ElasticSqlMapClientTemplate.java


elasticsearch-query-spring/src/main/java/org/es/spring/ElasticSqlMapExecutor.java → src/main/java/org/es/spring/ElasticSqlMapExecutor.java


+ 32 - 0
src/main/java/org/es/sql/bean/AtomQuery.java

@@ -0,0 +1,32 @@
+package org.es.sql.bean;
+
+import org.elasticsearch.index.query.QueryBuilder;
+
+public class AtomQuery {
+    private QueryBuilder query;
+    private boolean isNestedQuery;
+    private String nestedQueryPath;
+
+    public AtomQuery(QueryBuilder query) {
+        this.query = query;
+        this.isNestedQuery = false;
+    }
+
+    public AtomQuery(QueryBuilder query, String nestedQueryPath) {
+        this.query = query;
+        this.isNestedQuery = true;
+        this.nestedQueryPath = nestedQueryPath;
+    }
+
+    public QueryBuilder getQuery() {
+        return query;
+    }
+
+    public boolean getNestedQuery() {
+        return isNestedQuery;
+    }
+
+    public String getNestedQueryPath() {
+        return nestedQueryPath;
+    }
+}

+ 6 - 6
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticDslContext.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
 import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
 
@@ -6,18 +6,18 @@ public class ElasticDslContext {
     //SQL
     private SQLQueryExpr queryExpr;
     //SQL Args
-    private Object[] sqlArgs;
+    private SQLArgs SQLArgs;
     //Result
     private ElasticSqlParseResult parseResult;
 
-    public ElasticDslContext(SQLQueryExpr queryExpr, Object[] sqlArgs) {
+    public ElasticDslContext(SQLQueryExpr queryExpr, SQLArgs SQLArgs) {
         this.queryExpr = queryExpr;
-        this.sqlArgs = sqlArgs;
+        this.SQLArgs = SQLArgs;
         parseResult = new ElasticSqlParseResult();
     }
 
-    public Object[] getSqlArgs() {
-        return sqlArgs;
+    public SQLArgs getSQLArgs() {
+        return SQLArgs;
     }
 
     public SQLQueryExpr getQueryExpr() {

+ 13 - 10
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticSqlParseResult.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
@@ -7,7 +7,6 @@ import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
 import org.elasticsearch.search.aggregations.AggregationBuilder;
 import org.elasticsearch.search.sort.SortBuilder;
 import org.es.sql.utils.ElasticMockClient;
@@ -39,7 +38,7 @@ public class ElasticSqlParseResult {
 
     private transient boolean isTopStatsAgg = false;
 
-    private transient List<AbstractAggregationBuilder> groupBy;
+    private transient List<AggregationBuilder> groupBy;
 
     public List<String> getQueryFieldList() {
         return queryFieldList;
@@ -121,11 +120,11 @@ public class ElasticSqlParseResult {
         this.routingBy = routingBy;
     }
 
-    public List<AbstractAggregationBuilder> getGroupBy() {
+    public List<AggregationBuilder> getGroupBy() {
         return groupBy;
     }
 
-    public void setGroupBy(List<AbstractAggregationBuilder> groupBy) {
+    public void setGroupBy(List<AggregationBuilder> groupBy) {
         this.groupBy = groupBy;
     }
 
@@ -183,18 +182,18 @@ public class ElasticSqlParseResult {
         if (CollectionUtils.isNotEmpty(groupBy)) {
             if (!getIsTopStatsAgg()) {
                 AggregationBuilder preAgg = null;
-                for (AbstractAggregationBuilder aggItem : groupBy) {
+                for (AggregationBuilder aggItem : groupBy) {
                     if (preAgg == null) {
-                        preAgg = (AggregationBuilder) aggItem;
+                        preAgg = aggItem;
                         continue;
                     }
                     preAgg.subAggregation(aggItem);
-                    preAgg = (AggregationBuilder) aggItem;
+                    preAgg = aggItem;
                 }
                 requestBuilder.addAggregation(groupBy.get(0));
             }
             else {
-                for (AbstractAggregationBuilder aggItem : groupBy) {
+                for (AggregationBuilder aggItem : groupBy) {
                     requestBuilder.addAggregation(aggItem);
                 }
             }
@@ -214,6 +213,10 @@ public class ElasticSqlParseResult {
     @Override
     public String toString() {
         String ptn = "index:%s,type:%s,query_as:%s,from:%s,size:%s,routing:%s,dsl:%s";
-        return String.format(ptn, indices, type, queryAs, from, size, routingBy != null ? routingBy.toString() : "[]", toDsl());
+
+        return String.format(
+                ptn, indices, type, queryAs, from, size,
+                (routingBy != null ? routingBy.toString() : "[]"), toDsl()
+        );
     }
 }

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticSqlQueryField.java

@@ -1,6 +1,6 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
-import org.es.sql.dsl.enums.QueryFieldType;
+import org.es.sql.enums.QueryFieldType;
 
 public class ElasticSqlQueryField {
     /*[内嵌文档]的上下文路径*/

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/ElasticSqlQueryFields.java

@@ -1,6 +1,6 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
-import org.es.sql.dsl.enums.QueryFieldType;
+import org.es.sql.enums.QueryFieldType;
 
 public class ElasticSqlQueryFields {
     private ElasticSqlQueryFields() {

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/QueryFieldReferenceNode.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
 public class QueryFieldReferenceNode {
 

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/QueryFieldReferencePath.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/RangeSegment.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
 public class RangeSegment {
     private Object from;

+ 3 - 3
elasticsearch-query-core/src/main/java/org/es/sql/dsl/bean/SQLCondition.java

@@ -1,8 +1,8 @@
-package org.es.sql.dsl.bean;
+package org.es.sql.bean;
 
 import com.google.common.collect.Lists;
-import org.es.sql.dsl.enums.SQLBoolOperator;
-import org.es.sql.dsl.enums.SQLConditionType;
+import org.es.sql.enums.SQLBoolOperator;
+import org.es.sql.enums.SQLConditionType;
 
 import java.util.List;
 

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

@@ -0,0 +1,58 @@
+package org.es.sql.bean;
+
+
+public class SQLArgs {
+
+    private Object[] args;
+
+    public SQLArgs(Object[] args) {
+        this.args = args;
+
+        ensureAllNotNull();
+    }
+
+    private void ensureAllNotNull() {
+        if (args == null) {
+            throw new IllegalArgumentException("Sql args is null");
+        }
+
+        for (int idx = 0; idx < args.length; idx++) {
+            if (args[idx] == null) {
+                throw new IllegalArgumentException(
+                        String.format("The sql arg[%s] is null", idx));
+            }
+        }
+    }
+
+    public Object[] getArgs() {
+        return args;
+    }
+
+    public int getArgCount() {
+        return args.length;
+    }
+
+    public Object get(int index) {
+        if (index >= getArgCount()) {
+            throw new IndexOutOfBoundsException(
+                    String.format("Index[%s] Size[%s]", index, getArgCount()));
+        }
+        return args[index];
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> T get(int index, Class<T> argClass) {
+        if (index >= getArgCount()) {
+            throw new IndexOutOfBoundsException(
+                    String.format("Index[%s] Size[%s]", index, getArgCount()));
+        }
+
+        if (args[index].getClass().isAssignableFrom(argClass)) {
+            return (T) get(index);
+        }
+
+        throw new IllegalArgumentException(
+                String.format("Arg[%s] can not match type[%s]",
+                        index, argClass.getName()));
+    }
+}

elasticsearch-query-core/src/main/java/org/es/sql/druid/ElasticSqlExprParser.java → src/main/java/org/es/sql/druid/ElasticSqlExprParser.java


elasticsearch-query-core/src/main/java/org/es/sql/druid/ElasticSqlLexer.java → src/main/java/org/es/sql/druid/ElasticSqlLexer.java


+ 2 - 1
elasticsearch-query-core/src/main/java/org/es/sql/druid/ElasticSqlSelectParser.java

@@ -75,7 +75,8 @@ public class ElasticSqlSelectParser extends SQLSelectParser {
     @Override
     public SQLTableSource parseTableSource() {
         if (lexer.token() != Token.IDENTIFIER) {
-            throw new ParserException("[syntax error] from table source should be a identifier");
+            throw new ParserException(
+                    "[syntax error] from table source is not a identifier");
         }
 
         SQLExprTableSource tableReference = new SQLExprTableSource();

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/druid/ElasticSqlSelectQueryBlock.java

@@ -55,7 +55,7 @@ public class ElasticSqlSelectQueryBlock extends SQLSelectQueryBlock implements S
 
         @Override
         protected void accept0(SQLASTVisitor visitor) {
-            throw new UnsupportedOperationException("ElasticSql un-support method : accept0(SQLASTVisitor visitor)");
+            throw new UnsupportedOperationException("accept0(SQLASTVisitor visitor)");
         }
 
         public List<SQLExpr> getRoutingValues() {
@@ -91,7 +91,7 @@ public class ElasticSqlSelectQueryBlock extends SQLSelectQueryBlock implements S
 
         @Override
         protected void accept0(SQLASTVisitor visitor) {
-            throw new UnsupportedOperationException("ElasticSql un-support method : accept0(SQLASTVisitor visitor)");
+            throw new UnsupportedOperationException("accept0(SQLASTVisitor visitor)");
         }
 
     }

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/QueryFieldType.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.enums;
+package org.es.sql.enums;
 
 public enum QueryFieldType {
     MatchAllField,

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SQLBoolOperator.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.enums;
+package org.es.sql.enums;
 
 public enum SQLBoolOperator {
     AND, OR

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SQLConditionOperator.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.enums;
+package org.es.sql.enums;
 
 public enum SQLConditionOperator {
     Equality,

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SQLConditionType.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.enums;
+package org.es.sql.enums;
 
 
 public enum SQLConditionType {

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/enums/SortOption.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.enums;
+package org.es.sql.enums;
 
 public enum SortOption {
     SUM {

+ 1 - 1
elasticsearch-query-core/src/main/java/org/es/sql/dsl/exception/ElasticSql2DslException.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.exception;
+package org.es.sql.exception;
 
 import com.alibaba.druid.sql.parser.ParserException;
 

+ 22 - 20
elasticsearch-query-core/src/main/java/org/es/sql/dsl/helper/ElasticSqlArgTransferHelper.java

@@ -1,39 +1,38 @@
-package org.es.sql.dsl.helper;
+package org.es.sql.helper;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.*;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
+import org.es.sql.bean.SQLArgs;
+import org.es.sql.exception.ElasticSql2DslException;
 
 import java.util.List;
 
-public class ElasticSqlArgTransferHelper {
+public class ElasticSqlArgConverter {
 
-    public static Object[] transferSqlArgs(List<SQLExpr> exprList, Object[] sqlArgs) {
+    private ElasticSqlArgConverter() {
+
+    }
+
+    public static Object[] convertSqlArgs(List<SQLExpr> exprList, SQLArgs SQLArgs) {
         Object[] values = new Object[exprList.size()];
         for (int idx = 0; idx < exprList.size(); idx++) {
-            values[idx] = transferSqlArg(exprList.get(idx), sqlArgs, true);
+            values[idx] = convertSqlArg(exprList.get(idx), SQLArgs, true);
         }
         return values;
     }
 
-    public static Object transferSqlArg(SQLExpr expr, Object[] sqlArgs) {
-        return transferSqlArg(expr, sqlArgs, true);
+    public static Object convertSqlArg(SQLExpr expr, SQLArgs SQLArgs) {
+        return convertSqlArg(expr, SQLArgs, true);
     }
 
-    public static Object transferSqlArg(SQLExpr expr, Object[] sqlArgs, boolean recognizeDateArg) {
+    public static Object convertSqlArg(SQLExpr expr, SQLArgs SQLArgs, boolean recognizeDateArg) {
         if (expr instanceof SQLVariantRefExpr) {
             SQLVariantRefExpr varRefExpr = (SQLVariantRefExpr) expr;
-            if (sqlArgs == null || sqlArgs.length == 0) {
-                throw new ElasticSql2DslException("[syntax error] Sql args cannot be blank");
-            }
-            if (varRefExpr.getIndex() >= sqlArgs.length) {
-                throw new ElasticSql2DslException("[syntax error] Sql args out of index: " + varRefExpr.getIndex());
-            }
             //parse date
-            if (recognizeDateArg && ElasticSqlDateParseHelper.isDateArgObjectValue(sqlArgs[varRefExpr.getIndex()])) {
-                return ElasticSqlDateParseHelper.formatDefaultEsDateObjectValue(sqlArgs[varRefExpr.getIndex()]);
+            if (recognizeDateArg && ElasticSqlDateParseHelper.isDateArgObjectValue(SQLArgs.get(varRefExpr.getIndex()))) {
+                return ElasticSqlDateParseHelper.formatDefaultEsDateObjectValue(SQLArgs.get(varRefExpr.getIndex()));
             }
-            return sqlArgs[varRefExpr.getIndex()];
+            return SQLArgs.get(varRefExpr.getIndex());
         }
 
         //numbers
@@ -61,11 +60,14 @@ public class ElasticSqlArgTransferHelper {
             //parse date method
             if (ElasticSqlDateParseHelper.isDateMethod(methodExpr)) {
                 ElasticSqlMethodInvokeHelper.checkDateMethod(methodExpr);
-                String patternArg = (String) ElasticSqlArgTransferHelper.transferSqlArg(methodExpr.getParameters().get(0), sqlArgs, false);
-                String timeValArg = (String) ElasticSqlArgTransferHelper.transferSqlArg(methodExpr.getParameters().get(1), sqlArgs, false);
+                String patternArg = (String) ElasticSqlArgConverter.convertSqlArg(methodExpr.getParameters().get(0), SQLArgs, false);
+                String timeValArg = (String) ElasticSqlArgConverter.convertSqlArg(methodExpr.getParameters().get(1), SQLArgs, false);
                 return ElasticSqlDateParseHelper.formatDefaultEsDate(patternArg, timeValArg);
             }
         }
-        throw new ElasticSql2DslException("[syntax error] Can not support arg type: " + expr.toString());
+
+        throw new ElasticSql2DslException(
+                String.format("[syntax error] Arg type[%s] can not support.",
+                        expr.toString()));
     }
 }

+ 6 - 4
elasticsearch-query-core/src/main/java/org/es/sql/dsl/helper/ElasticSqlDateParseHelper.java

@@ -1,7 +1,7 @@
-package org.es.sql.dsl.helper;
+package org.es.sql.helper;
 
 import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
+import org.es.sql.exception.ElasticSql2DslException;
 import org.es.sql.utils.Constants;
 
 import java.text.ParseException;
@@ -39,7 +39,8 @@ public class ElasticSqlDateParseHelper {
         if (SqlDateRegex.DATE_REGEX_03.getPattern().matcher(date).matches()) {
             return formatDefaultEsDate(SqlDateRegex.DATE_REGEX_03.getPatternString(), date);
         }
-        throw new ElasticSql2DslException("[syntax error] Sql cannot support such date type: " + date);
+        throw new ElasticSql2DslException(
+                String.format("[syntax error] Can't support such date type: %s", date));
     }
 
     public static String formatDefaultEsDateObjectValue(Object date) {
@@ -47,7 +48,8 @@ public class ElasticSqlDateParseHelper {
             SimpleDateFormat dateFormat = new SimpleDateFormat(Constants.DEFAULT_ES_DATE_FORMAT);
             return dateFormat.format(date);
         }
-        throw new ElasticSql2DslException("[syntax error] Sql cannot support such date type: " + date.getClass());
+        throw new ElasticSql2DslException(
+                String.format("[syntax error] Sql cannot support such date type: %s", date.getClass()));
     }
 
     public static String formatDefaultEsDate(String patternArg, String timeValArg) {

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/dsl/helper/ElasticSqlMethodInvokeHelper.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.helper;
+package org.es.sql.helper;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr;
@@ -8,7 +8,7 @@ import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
+import org.es.sql.exception.ElasticSql2DslException;
 
 import java.util.List;
 

+ 19 - 0
src/main/java/org/es/sql/listener/ParseActionListener.java

@@ -0,0 +1,19 @@
+package org.es.sql.listener;
+
+import org.es.sql.bean.ElasticSqlQueryField;
+import org.es.sql.enums.SQLConditionOperator;
+
+import java.util.List;
+
+public interface ParseActionListener {
+
+    void onSelectFieldParse(ElasticSqlQueryField field);
+
+    void onAtomExactQueryConditionParse(ElasticSqlQueryField paramName, Object[] params, SQLConditionOperator operator);
+
+    void onAtomMethodQueryConditionParse(ElasticSqlQueryField paramName, Object[] params);
+
+    void onRoutingValuesParse(List<String> routingValues);
+
+    void onLimitSizeParse(int from, int size);
+}

+ 34 - 0
src/main/java/org/es/sql/listener/ParseActionListenerAdapter.java

@@ -0,0 +1,34 @@
+package org.es.sql.listener;
+
+import org.es.sql.bean.ElasticSqlQueryField;
+import org.es.sql.enums.SQLConditionOperator;
+
+import java.util.List;
+
+public class ParseActionListenerAdapter implements ParseActionListener {
+
+    @Override
+    public void onSelectFieldParse(ElasticSqlQueryField field) {
+
+    }
+
+    @Override
+    public void onAtomExactQueryConditionParse(ElasticSqlQueryField paramName, Object[] params, SQLConditionOperator operator) {
+
+    }
+
+    @Override
+    public void onAtomMethodQueryConditionParse(ElasticSqlQueryField paramName, Object[] params) {
+
+    }
+
+    @Override
+    public void onRoutingValuesParse(List<String> routingValues) {
+
+    }
+
+    @Override
+    public void onLimitSizeParse(int from, int size) {
+
+    }
+}

+ 9 - 8
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/ElasticSql2DslParser.java

@@ -1,18 +1,19 @@
-package org.es.sql.dsl.parser;
+package org.es.sql.parser;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
 import com.alibaba.druid.sql.parser.ParserException;
 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.druid.ElasticSqlExprParser;
 import org.es.sql.druid.ElasticSqlSelectQueryBlock;
-import org.es.sql.dsl.bean.ElasticDslContext;
-import org.es.sql.dsl.bean.ElasticSqlParseResult;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.listener.ParseActionListenerAdapter;
-import org.es.sql.dsl.parser.sql.*;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.listener.ParseActionListenerAdapter;
+import org.es.sql.parser.sql.*;
 
 import java.lang.reflect.Array;
 import java.util.Collection;
@@ -44,7 +45,7 @@ public class ElasticSql2DslParser {
             throw new ElasticSql2DslException(ex);
         }
 
-        final ElasticDslContext elasticDslContext = new ElasticDslContext(queryExpr, sqlArgs);
+        final ElasticDslContext elasticDslContext = new ElasticDslContext(queryExpr, new SQLArgs(sqlArgs));
         if (queryExpr.getSubQuery().getQuery() instanceof ElasticSqlSelectQueryBlock) {
             for (QueryParser sqlParser : buildSqlParserChain(parseActionListener)) {
                 sqlParser.parse(elasticDslContext);

+ 12 - 27
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/AbstractAtomExactQueryParser.java

@@ -1,14 +1,14 @@
-package org.es.sql.dsl.parser.query.exact;
+package org.es.sql.parser.query.exact;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.bean.ElasticSqlQueryField;
-import org.es.sql.dsl.enums.QueryFieldType;
-import org.es.sql.dsl.enums.SQLConditionOperator;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.sql.QueryFieldParser;
 import org.elasticsearch.index.query.QueryBuilder;
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.bean.ElasticSqlQueryField;
+import org.es.sql.enums.QueryFieldType;
+import org.es.sql.enums.SQLConditionOperator;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.sql.QueryFieldParser;
 
 public abstract class AbstractAtomExactQueryParser {
 
@@ -18,18 +18,18 @@ public abstract class AbstractAtomExactQueryParser {
         this.parseActionListener = parseActionListener;
     }
 
-    protected AtomQuery parseCondition(SQLExpr queryFieldExpr, SQLConditionOperator operator, Object[] rightParamValues, String queryAs, IConditionExactQueryBuilder queryBuilder) {
+    protected AtomQuery parseCondition(SQLExpr queryFieldExpr, SQLConditionOperator operator, Object[] params, String queryAs, IConditionExactQueryBuilder queryBuilder) {
         QueryFieldParser queryFieldParser = new QueryFieldParser();
         ElasticSqlQueryField queryField = queryFieldParser.parseConditionQueryField(queryFieldExpr, queryAs);
 
         AtomQuery atomQuery = null;
         if (queryField.getQueryFieldType() == QueryFieldType.RootDocField || queryField.getQueryFieldType() == QueryFieldType.InnerDocField) {
-            QueryBuilder originalQuery = queryBuilder.buildQuery(queryField.getQueryFieldFullName(), operator, rightParamValues);
+            QueryBuilder originalQuery = queryBuilder.buildQuery(queryField.getQueryFieldFullName(), operator, params);
             atomQuery = new AtomQuery(originalQuery);
         }
 
         if (queryField.getQueryFieldType() == QueryFieldType.NestedDocField) {
-            QueryBuilder originalQuery = queryBuilder.buildQuery(queryField.getQueryFieldFullName(), operator, rightParamValues);
+            QueryBuilder originalQuery = queryBuilder.buildQuery(queryField.getQueryFieldFullName(), operator, params);
             atomQuery = new AtomQuery(originalQuery, queryField.getNestedDocContextPath());
         }
 
@@ -37,23 +37,8 @@ public abstract class AbstractAtomExactQueryParser {
             throw new ElasticSql2DslException(String.format("[syntax error] where condition field can not support type[%s]", queryField.getQueryFieldType()));
         }
 
-        onExactAtomQueryConditionParse(queryField, rightParamValues, operator);
+        parseActionListener.onAtomExactQueryConditionParse(queryField, params, operator);
 
         return atomQuery;
     }
-
-    private void onExactAtomQueryConditionParse(ElasticSqlQueryField paramName, Object[] paramValues, SQLConditionOperator operator) {
-        try {
-            parseActionListener.onAtomExactQueryConditionParse(paramName, paramValues, operator);
-        }
-        catch (Exception ex) {
-            try {
-                parseActionListener.onFailure(ex);
-            }
-            catch (Exception exp) {
-                //ignore;
-            }
-        }
-    }
-
 }

+ 10 - 9
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/BetweenAndAtomQueryParser.java

@@ -1,13 +1,14 @@
-package org.es.sql.dsl.parser.query.exact;
+package org.es.sql.parser.query.exact;
 
 import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.enums.SQLConditionOperator;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.helper.ElasticSqlArgTransferHelper;
-import org.es.sql.dsl.listener.ParseActionListener;
 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.enums.SQLConditionOperator;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.helper.ElasticSqlArgConverter;
+import org.es.sql.listener.ParseActionListener;
 
 public class BetweenAndAtomQueryParser extends AbstractAtomExactQueryParser {
 
@@ -15,9 +16,9 @@ public class BetweenAndAtomQueryParser extends AbstractAtomExactQueryParser {
         super(parseActionListener);
     }
 
-    public AtomQuery parseBetweenAndQuery(SQLBetweenExpr betweenAndExpr, String queryAs, Object[] sqlArgs) {
-        Object from = ElasticSqlArgTransferHelper.transferSqlArg(betweenAndExpr.getBeginExpr(), sqlArgs);
-        Object to = ElasticSqlArgTransferHelper.transferSqlArg(betweenAndExpr.getEndExpr(), sqlArgs);
+    public AtomQuery parseBetweenAndQuery(SQLBetweenExpr betweenAndExpr, String queryAs, SQLArgs SQLArgs) {
+        Object from = ElasticSqlArgConverter.convertSqlArg(betweenAndExpr.getBeginExpr(), SQLArgs);
+        Object to = ElasticSqlArgConverter.convertSqlArg(betweenAndExpr.getEndExpr(), SQLArgs);
 
         if (from == null || to == null) {
             throw new ElasticSql2DslException("[syntax error] Between Expr only support one of [number,date] arg type");

+ 10 - 9
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/BinaryAtomQueryParser.java

@@ -1,16 +1,17 @@
-package org.es.sql.dsl.parser.query.exact;
+package org.es.sql.parser.query.exact;
 
 import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
 import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
 import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.enums.SQLConditionOperator;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.helper.ElasticSqlArgTransferHelper;
-import org.es.sql.dsl.listener.ParseActionListener;
 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.enums.SQLConditionOperator;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.helper.ElasticSqlArgConverter;
+import org.es.sql.listener.ParseActionListener;
 
 public class BinaryAtomQueryParser extends AbstractAtomExactQueryParser {
 
@@ -18,12 +19,12 @@ public class BinaryAtomQueryParser extends AbstractAtomExactQueryParser {
         super(parseActionListener);
     }
 
-    public AtomQuery parseBinaryQuery(SQLBinaryOpExpr binQueryExpr, String queryAs, Object[] sqlArgs) {
+    public AtomQuery parseBinaryQuery(SQLBinaryOpExpr binQueryExpr, String queryAs, SQLArgs SQLArgs) {
         SQLBinaryOperator binaryOperator = binQueryExpr.getOperator();
 
         //EQ NEQ
         if (SQLBinaryOperator.Equality == binaryOperator || SQLBinaryOperator.LessThanOrGreater == binaryOperator || SQLBinaryOperator.NotEqual == binaryOperator) {
-            Object targetVal = ElasticSqlArgTransferHelper.transferSqlArg(binQueryExpr.getRight(), sqlArgs);
+            Object targetVal = ElasticSqlArgConverter.convertSqlArg(binQueryExpr.getRight(), SQLArgs);
 
             SQLConditionOperator operator = SQLBinaryOperator.Equality == binaryOperator ? SQLConditionOperator.Equality : SQLConditionOperator.NotEqual;
 
@@ -59,7 +60,7 @@ public class BinaryAtomQueryParser extends AbstractAtomExactQueryParser {
                 operator = SQLConditionOperator.LessThanOrEqual;
             }
 
-            Object targetVal = ElasticSqlArgTransferHelper.transferSqlArg(binQueryExpr.getRight(), sqlArgs);
+            Object targetVal = ElasticSqlArgConverter.convertSqlArg(binQueryExpr.getRight(), SQLArgs);
             return parseCondition(binQueryExpr.getLeft(), operator, new Object[]{targetVal}, queryAs, new IConditionExactQueryBuilder() {
                 @Override
                 public QueryBuilder buildQuery(String queryFieldName, SQLConditionOperator operator, Object[] rightParamValues) {

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/IConditionExactQueryBuilder.java

@@ -1,7 +1,7 @@
-package org.es.sql.dsl.parser.query.exact;
+package org.es.sql.parser.query.exact;
 
-import org.es.sql.dsl.enums.SQLConditionOperator;
 import org.elasticsearch.index.query.QueryBuilder;
+import org.es.sql.enums.SQLConditionOperator;
 
 @FunctionalInterface
 public interface IConditionExactQueryBuilder {

+ 9 - 8
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/exact/InListAtomQueryParser.java

@@ -1,14 +1,15 @@
-package org.es.sql.dsl.parser.query.exact;
+package org.es.sql.parser.query.exact;
 
 import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
 import org.apache.commons.collections.CollectionUtils;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.enums.SQLConditionOperator;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.helper.ElasticSqlArgTransferHelper;
-import org.es.sql.dsl.listener.ParseActionListener;
 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.enums.SQLConditionOperator;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.helper.ElasticSqlArgConverter;
+import org.es.sql.listener.ParseActionListener;
 
 public class InListAtomQueryParser extends AbstractAtomExactQueryParser {
 
@@ -16,12 +17,12 @@ public class InListAtomQueryParser extends AbstractAtomExactQueryParser {
         super(parseActionListener);
     }
 
-    public AtomQuery parseInListQuery(SQLInListExpr inListQueryExpr, String queryAs, Object[] sqlArgs) {
+    public AtomQuery parseInListQuery(SQLInListExpr inListQueryExpr, String queryAs, SQLArgs SQLArgs) {
         if (CollectionUtils.isEmpty(inListQueryExpr.getTargetList())) {
             throw new ElasticSql2DslException("[syntax error] In list expr target list cannot be blank");
         }
 
-        Object[] targetInList = ElasticSqlArgTransferHelper.transferSqlArgs(inListQueryExpr.getTargetList(), sqlArgs);
+        Object[] targetInList = ElasticSqlArgConverter.convertSqlArgs(inListQueryExpr.getTargetList(), SQLArgs);
         SQLConditionOperator operator = inListQueryExpr.isNot() ? SQLConditionOperator.NotIn : SQLConditionOperator.In;
 
         return parseCondition(inListQueryExpr.getExpr(), operator, targetInList, queryAs, new IConditionExactQueryBuilder() {

+ 9 - 23
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/AbstractFieldSpecificMethodQueryParser.java

@@ -1,13 +1,13 @@
-package org.es.sql.dsl.parser.query.method;
+package org.es.sql.parser.query.method;
 
 import org.elasticsearch.index.query.QueryBuilder;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.bean.ElasticSqlQueryField;
-import org.es.sql.dsl.enums.QueryFieldType;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.expr.FieldSpecificMethodExpression;
-import org.es.sql.dsl.parser.sql.QueryFieldParser;
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.bean.ElasticSqlQueryField;
+import org.es.sql.enums.QueryFieldType;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.expr.FieldSpecificMethodExpression;
+import org.es.sql.parser.sql.QueryFieldParser;
 
 import java.util.Map;
 
@@ -48,22 +48,8 @@ public abstract class AbstractFieldSpecificMethodQueryParser extends Parameteriz
                     String.format("[syntax error] query field can not support type[%s]", queryField.getQueryFieldType()));
         }
 
-        onAtomMethodQueryConditionParse(queryField, invocation.getSqlArgs());
+        parseActionListener.onAtomMethodQueryConditionParse(queryField, invocation.getSQLArgs().getArgs());
 
         return atomQuery;
     }
-
-    private void onAtomMethodQueryConditionParse(ElasticSqlQueryField paramName, Object[] parameters) {
-        try {
-            parseActionListener.onAtomMethodQueryConditionParse(paramName, parameters);
-        }
-        catch (Exception ex) {
-            try {
-                parseActionListener.onFailure(ex);
-            }
-            catch (Exception exp) {
-                //ignore;
-            }
-        }
-    }
 }

+ 10 - 9
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/MethodInvocation.java

@@ -1,31 +1,32 @@
-package org.es.sql.dsl.parser.query.method;
+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.dsl.helper.ElasticSqlArgTransferHelper;
+import org.es.sql.bean.SQLArgs;
+import org.es.sql.helper.ElasticSqlArgConverter;
 
 import java.util.List;
 
 public class MethodInvocation {
     private final SQLMethodInvokeExpr methodInvokeExpr;
     private final String queryAs;
-    private final Object[] sqlArgs;
+    private final SQLArgs SQLArgs;
 
-    public MethodInvocation(SQLMethodInvokeExpr methodInvokeExpr, String queryAs, Object[] sqlArgs) {
+    public MethodInvocation(SQLMethodInvokeExpr methodInvokeExpr, String queryAs, SQLArgs SQLArgs) {
         if (methodInvokeExpr == null) {
             throw new IllegalArgumentException("method invoke expression can not be null");
         }
         this.methodInvokeExpr = methodInvokeExpr;
         this.queryAs = queryAs;
-        this.sqlArgs = sqlArgs;
+        this.SQLArgs = SQLArgs;
     }
 
     public String getQueryAs() {
         return queryAs;
     }
 
-    public Object[] getSqlArgs() {
-        return sqlArgs;
+    public SQLArgs getSQLArgs() {
+        return SQLArgs;
     }
 
     public String getMethodName() {
@@ -50,12 +51,12 @@ public class MethodInvocation {
 
     public Object getParameterAsObject(int index) {
         SQLExpr paramExpr = methodInvokeExpr.getParameters().get(index);
-        return ElasticSqlArgTransferHelper.transferSqlArg(paramExpr, sqlArgs, false);
+        return ElasticSqlArgConverter.convertSqlArg(paramExpr, SQLArgs, false);
     }
 
     public String getParameterAsFormatDate(int index) {
         SQLExpr paramExpr = methodInvokeExpr.getParameters().get(index);
-        return ElasticSqlArgTransferHelper.transferSqlArg(paramExpr, sqlArgs, true).toString();
+        return ElasticSqlArgConverter.convertSqlArg(paramExpr, SQLArgs, true).toString();
     }
 
     public String getParameterAsString(int index) {

+ 9 - 0
src/main/java/org/es/sql/parser/query/method/MethodQueryParser.java

@@ -0,0 +1,9 @@
+package org.es.sql.parser.query.method;
+
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.parser.query.method.expr.MethodExpression;
+
+public interface MethodQueryParser extends MethodExpression {
+    AtomQuery parseAtomMethodQuery(MethodInvocation invocation) throws ElasticSql2DslException;
+}

+ 5 - 5
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/ParameterizedMethodQueryParser.java

@@ -1,9 +1,9 @@
-package org.es.sql.dsl.parser.query.method;
+package org.es.sql.parser.query.method;
 
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.helper.ElasticSqlMethodInvokeHelper;
-import org.es.sql.dsl.parser.query.method.expr.AbstractParameterizedMethodExpression;
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.helper.ElasticSqlMethodInvokeHelper;
+import org.es.sql.parser.query.method.expr.AbstractParameterizedMethodExpression;
 
 import java.util.Map;
 

+ 3 - 3
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/AbstractParameterizedMethodExpression.java

@@ -1,11 +1,11 @@
-package org.es.sql.dsl.parser.query.method.expr;
+package org.es.sql.parser.query.method.expr;
 
 import com.google.common.collect.Maps;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.Collections;
 import java.util.Map;

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/FieldSpecificMethodExpression.java

@@ -1,7 +1,7 @@
-package org.es.sql.dsl.parser.query.method.expr;
+package org.es.sql.parser.query.method.expr;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 public interface FieldSpecificMethodExpression extends MethodExpression {
     SQLExpr defineFieldExpr(MethodInvocation invocation);

+ 3 - 3
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/MethodExpression.java

@@ -1,7 +1,7 @@
-package org.es.sql.dsl.parser.query.method.expr;
+package org.es.sql.parser.query.method.expr;
 
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 

+ 2 - 2
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/expr/ParameterizedMethodExpression.java

@@ -1,6 +1,6 @@
-package org.es.sql.dsl.parser.query.method.expr;
+package org.es.sql.parser.query.method.expr;
 
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.Map;
 

+ 9 - 8
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/FullTextAtomQueryParser.java

@@ -1,12 +1,13 @@
-package org.es.sql.dsl.parser.query.method.fulltext;
+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.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.parser.query.method.MethodQueryParser;
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.bean.SQLArgs;
+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.query.method.MethodQueryParser;
 
 import java.util.List;
 import java.util.function.Predicate;
@@ -33,8 +34,8 @@ public class FullTextAtomQueryParser {
         });
     }
 
-    public AtomQuery parseFullTextAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, Object[] sqlArgs) {
-        MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, sqlArgs);
+    public AtomQuery parseFullTextAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, SQLArgs SQLArgs) {
+        MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, SQLArgs);
         MethodQueryParser matchAtomQueryParser = getQueryParser(methodInvocation);
         return matchAtomQueryParser.parseAtomMethodQuery(methodInvocation);
     }

+ 14 - 12
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/MatchAtomQueryParser.java

@@ -1,17 +1,19 @@
-package org.es.sql.dsl.parser.query.method.fulltext;
+package org.es.sql.parser.query.method.fulltext;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.common.unit.Fuzziness;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
 import org.elasticsearch.index.query.MatchQueryBuilder;
+import org.elasticsearch.index.query.Operator;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.search.MatchQuery;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;
@@ -79,23 +81,23 @@ public class MatchAtomQueryParser extends AbstractFieldSpecificMethodQueryParser
         if (extraParamMap.containsKey("type")) {
             String val = extraParamMap.get("type");
             if ("BOOLEAN".equalsIgnoreCase(val)) {
-                matchQuery.type(MatchQueryBuilder.Type.BOOLEAN);
+                matchQuery.type(MatchQuery.Type.BOOLEAN);
             }
             if ("PHRASE".equalsIgnoreCase(val)) {
-                matchQuery.type(MatchQueryBuilder.Type.PHRASE);
+                matchQuery.type(MatchQuery.Type.PHRASE);
             }
             if ("PHRASE_PREFIX".equalsIgnoreCase(val)) {
-                matchQuery.type(MatchQueryBuilder.Type.PHRASE_PREFIX);
+                matchQuery.type(MatchQuery.Type.PHRASE_PREFIX);
             }
         }
 
         if (extraParamMap.containsKey("operator")) {
             String val = extraParamMap.get("operator");
             if ("AND".equalsIgnoreCase(val)) {
-                matchQuery.operator(MatchQueryBuilder.Operator.AND);
+                matchQuery.operator(Operator.AND);
             }
             if ("OR".equalsIgnoreCase(val)) {
-                matchQuery.operator(MatchQueryBuilder.Operator.OR);
+                matchQuery.operator(Operator.OR);
             }
         }
 
@@ -148,10 +150,10 @@ public class MatchAtomQueryParser extends AbstractFieldSpecificMethodQueryParser
         if (extraParamMap.containsKey("zero_terms_query")) {
             String val = extraParamMap.get("zero_terms_query");
             if ("NONE".equalsIgnoreCase(val)) {
-                matchQuery.zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE);
+                matchQuery.zeroTermsQuery(MatchQuery.ZeroTermsQuery.NONE);
             }
             if ("ALL".equalsIgnoreCase(val)) {
-                matchQuery.zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.ALL);
+                matchQuery.zeroTermsQuery(MatchQuery.ZeroTermsQuery.ALL);
             }
         }
 

+ 14 - 13
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/MultiMatchAtomQueryParser.java

@@ -1,16 +1,17 @@
-package org.es.sql.dsl.parser.query.method.fulltext;
+package org.es.sql.parser.query.method.fulltext;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.common.unit.Fuzziness;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.parser.query.method.ParameterizedMethodQueryParser;
-import org.elasticsearch.index.query.MatchQueryBuilder;
 import org.elasticsearch.index.query.MultiMatchQueryBuilder;
+import org.elasticsearch.index.query.Operator;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.search.MatchQuery;
+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;
@@ -69,23 +70,23 @@ public class MultiMatchAtomQueryParser extends ParameterizedMethodQueryParser {
         if (extraParamMap.containsKey("type")) {
             String val = extraParamMap.get("type");
             if ("BOOLEAN".equalsIgnoreCase(val)) {
-                multiMatchQuery.type(MatchQueryBuilder.Type.BOOLEAN);
+                multiMatchQuery.type(MatchQuery.Type.BOOLEAN);
             }
             if ("PHRASE".equalsIgnoreCase(val)) {
-                multiMatchQuery.type(MatchQueryBuilder.Type.PHRASE);
+                multiMatchQuery.type(MatchQuery.Type.PHRASE);
             }
             if ("PHRASE_PREFIX".equalsIgnoreCase(val)) {
-                multiMatchQuery.type(MatchQueryBuilder.Type.PHRASE_PREFIX);
+                multiMatchQuery.type(MatchQuery.Type.PHRASE_PREFIX);
             }
         }
 
         if (extraParamMap.containsKey("operator")) {
             String val = extraParamMap.get("operator");
             if ("AND".equalsIgnoreCase(val)) {
-                multiMatchQuery.operator(MatchQueryBuilder.Operator.AND);
+                multiMatchQuery.operator(Operator.AND);
             }
             if ("OR".equalsIgnoreCase(val)) {
-                multiMatchQuery.operator(MatchQueryBuilder.Operator.OR);
+                multiMatchQuery.operator(Operator.OR);
             }
         }
 
@@ -138,10 +139,10 @@ public class MultiMatchAtomQueryParser extends ParameterizedMethodQueryParser {
         if (extraParamMap.containsKey("zero_terms_query")) {
             String val = extraParamMap.get("zero_terms_query");
             if ("NONE".equalsIgnoreCase(val)) {
-                multiMatchQuery.zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE);
+                multiMatchQuery.zeroTermsQuery(MatchQuery.ZeroTermsQuery.NONE);
             }
             if ("ALL".equalsIgnoreCase(val)) {
-                multiMatchQuery.zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.ALL);
+                multiMatchQuery.zeroTermsQuery(MatchQuery.ZeroTermsQuery.ALL);
             }
         }
 

+ 16 - 16
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/QueryStringAtomQueryParser.java

@@ -1,18 +1,18 @@
-package org.es.sql.dsl.parser.query.method.fulltext;
+package org.es.sql.parser.query.method.fulltext;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.common.unit.Fuzziness;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.parser.query.method.ParameterizedMethodQueryParser;
+import org.elasticsearch.index.query.Operator;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.QueryStringQueryBuilder;
+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.Locale;
 import java.util.Map;
 
 public class QueryStringAtomQueryParser extends ParameterizedMethodQueryParser {
@@ -125,10 +125,10 @@ public class QueryStringAtomQueryParser extends ParameterizedMethodQueryParser {
             queryStringQuery.allowLeadingWildcard(Boolean.parseBoolean(val));
         }
 
-        if (extraParamMap.containsKey("lowercase_expanded_terms")) {
-            String val = extraParamMap.get("lowercase_expanded_terms");
-            queryStringQuery.lowercaseExpandedTerms(Boolean.parseBoolean(val));
-        }
+//        if (extraParamMap.containsKey("lowercase_expanded_terms")) {
+//            String val = extraParamMap.get("lowercase_expanded_terms");
+//            queryStringQuery.lowercaseExpandedTerms(Boolean.parseBoolean(val));
+//        }
 
         if (extraParamMap.containsKey("enable_position_increments")) {
             String val = extraParamMap.get("enable_position_increments");
@@ -195,19 +195,19 @@ public class QueryStringAtomQueryParser extends ParameterizedMethodQueryParser {
             queryStringQuery.escape(Boolean.parseBoolean(val));
         }
 
-        if (extraParamMap.containsKey("locale")) {
-            String val = extraParamMap.get("locale");
-            queryStringQuery.locale(Locale.forLanguageTag(val));
-        }
+//        if (extraParamMap.containsKey("locale")) {
+//            String val = extraParamMap.get("locale");
+//            queryStringQuery.locale(Locale.forLanguageTag(val));
+//        }
 
         if (extraParamMap.containsKey("default_operator")) {
             String val = extraParamMap.get("default_operator");
 
             if ("AND".equalsIgnoreCase(val)) {
-                queryStringQuery.defaultOperator(QueryStringQueryBuilder.Operator.AND);
+                queryStringQuery.defaultOperator(Operator.AND);
             }
             if ("OR".equalsIgnoreCase(val)) {
-                queryStringQuery.defaultOperator(QueryStringQueryBuilder.Operator.OR);
+                queryStringQuery.defaultOperator(Operator.OR);
             }
         }
 

+ 17 - 17
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/fulltext/SimpleQueryStringAtomQueryParser.java

@@ -1,19 +1,19 @@
-package org.es.sql.dsl.parser.query.method.fulltext;
+package org.es.sql.parser.query.method.fulltext;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.parser.query.method.ParameterizedMethodQueryParser;
+import org.elasticsearch.index.query.Operator;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.SimpleQueryStringBuilder;
 import org.elasticsearch.index.query.SimpleQueryStringFlag;
+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.Locale;
 import java.util.Map;
 
 public class SimpleQueryStringAtomQueryParser extends ParameterizedMethodQueryParser {
@@ -50,7 +50,7 @@ public class SimpleQueryStringAtomQueryParser extends ParameterizedMethodQueryPa
             }
         }
 
-        if(MapUtils.isNotEmpty(extraParamMap)) {
+        if (MapUtils.isNotEmpty(extraParamMap)) {
             setExtraMatchQueryParam(simpleQueryString, extraParamMap);
         }
 
@@ -105,10 +105,10 @@ public class SimpleQueryStringAtomQueryParser extends ParameterizedMethodQueryPa
             simpleStringQuery.analyzer(val);
         }
 
-        if (extraParamMap.containsKey("lowercase_expanded_terms")) {
-            String val = extraParamMap.get("lowercase_expanded_terms");
-            simpleStringQuery.lowercaseExpandedTerms(Boolean.parseBoolean(val));
-        }
+//        if (extraParamMap.containsKey("lowercase_expanded_terms")) {
+//            String val = extraParamMap.get("lowercase_expanded_terms");
+//            simpleStringQuery.lowercaseExpandedTerms(Boolean.parseBoolean(val));
+//        }
 
         if (extraParamMap.containsKey("boost")) {
             String val = extraParamMap.get("boost");
@@ -120,10 +120,10 @@ public class SimpleQueryStringAtomQueryParser extends ParameterizedMethodQueryPa
             simpleStringQuery.analyzeWildcard(Boolean.parseBoolean(val));
         }
 
-        if (extraParamMap.containsKey("locale")) {
-            String val = extraParamMap.get("locale");
-            simpleStringQuery.locale(Locale.forLanguageTag(val));
-        }
+//        if (extraParamMap.containsKey("locale")) {
+//            String val = extraParamMap.get("locale");
+//            simpleStringQuery.locale(Locale.forLanguageTag(val));
+//        }
 
         if (extraParamMap.containsKey("flags")) {
             String[] flags = extraParamMap.get("flags").split("\\|");
@@ -139,10 +139,10 @@ public class SimpleQueryStringAtomQueryParser extends ParameterizedMethodQueryPa
             String val = extraParamMap.get("default_operator");
 
             if ("AND".equalsIgnoreCase(val)) {
-                simpleStringQuery.defaultOperator(SimpleQueryStringBuilder.Operator.AND);
+                simpleStringQuery.defaultOperator(Operator.AND);
             }
             if ("OR".equalsIgnoreCase(val)) {
-                simpleStringQuery.defaultOperator(SimpleQueryStringBuilder.Operator.OR);
+                simpleStringQuery.defaultOperator(Operator.OR);
             }
         }
     }

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

@@ -0,0 +1,60 @@
+//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)));
+//    }
+//
+//
+//}

+ 5 - 5
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/FuzzyAtomQueryParser.java

@@ -1,17 +1,17 @@
-package org.es.sql.dsl.parser.query.method.term;
+package org.es.sql.parser.query.method.term;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.common.unit.Fuzziness;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
 import org.elasticsearch.index.query.FuzzyQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;

+ 5 - 5
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/PrefixAtomQueryParser.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.parser.query.method.term;
+package org.es.sql.parser.query.method.term;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
@@ -7,10 +7,10 @@ import org.apache.commons.lang.StringUtils;
 import org.elasticsearch.index.query.PrefixQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;

+ 5 - 6
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/RegexpAtomQueryParser.java

@@ -1,18 +1,18 @@
-package org.es.sql.dsl.parser.query.method.term;
+package org.es.sql.parser.query.method.term;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.RegexpFlag;
 import org.elasticsearch.index.query.RegexpQueryBuilder;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;
@@ -74,7 +74,6 @@ public class RegexpAtomQueryParser extends AbstractFieldSpecificMethodQueryParse
     }
 
 
-
     private void setExtraMatchQueryParam(RegexpQueryBuilder regexpQuery, Map<String, String> extraParamMap) {
         if (MapUtils.isEmpty(extraParamMap)) {
             return;

+ 5 - 5
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/TermAtomQueryParser.java

@@ -1,16 +1,16 @@
-package org.es.sql.dsl.parser.query.method.term;
+package org.es.sql.parser.query.method.term;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.TermQueryBuilder;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;

+ 9 - 8
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/TermLevelAtomQueryParser.java

@@ -1,12 +1,13 @@
-package org.es.sql.dsl.parser.query.method.term;
+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.dsl.bean.AtomQuery;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.parser.query.method.MethodQueryParser;
+import org.es.sql.bean.AtomQuery;
+import org.es.sql.bean.SQLArgs;
+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.query.method.MethodQueryParser;
 
 import java.util.List;
 
@@ -34,8 +35,8 @@ public class TermLevelAtomQueryParser {
         return Boolean.TRUE;
     }
 
-    public AtomQuery parseTermLevelAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, Object[] sqlArgs) {
-        MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, sqlArgs);
+    public AtomQuery parseTermLevelAtomQuery(SQLMethodInvokeExpr methodQueryExpr, String queryAs, SQLArgs SQLArgs) {
+        MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, SQLArgs);
         MethodQueryParser matchAtomQueryParser = getQueryParser(methodInvocation);
         return matchAtomQueryParser.parseAtomMethodQuery(methodInvocation);
     }

+ 13 - 13
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/TermsAtomQueryParser.java

@@ -1,17 +1,17 @@
-package org.es.sql.dsl.parser.query.method.term;
+package org.es.sql.parser.query.method.term;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.TermsQueryBuilder;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;
@@ -89,14 +89,14 @@ public class TermsAtomQueryParser extends AbstractFieldSpecificMethodQueryParser
             String val = extraParamMap.get("boost");
             termsQuery.boost(Float.valueOf(val));
         }
-        if (extraParamMap.containsKey("minimum_should_match")) {
-            String val = extraParamMap.get("minimum_should_match");
-            termsQuery.minimumShouldMatch(val);
-        }
-        if (extraParamMap.containsKey("disable_coord")) {
-            String val = extraParamMap.get("disable_coord");
-            termsQuery.disableCoord(Boolean.parseBoolean(val));
-        }
+//        if (extraParamMap.containsKey("minimum_should_match")) {
+//            String val = extraParamMap.get("minimum_should_match");
+//            termsQuery.minimumShouldMatch(val);
+//        }
+//        if (extraParamMap.containsKey("disable_coord")) {
+//            String val = extraParamMap.get("disable_coord");
+//            termsQuery.disableCoord(Boolean.parseBoolean(val));
+//        }
 
 
     }

+ 5 - 5
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/query/method/term/WildcardAtomQueryParser.java

@@ -1,16 +1,16 @@
-package org.es.sql.dsl.parser.query.method.term;
+package org.es.sql.parser.query.method.term;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.method.AbstractFieldSpecificMethodQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.WildcardQueryBuilder;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.method.AbstractFieldSpecificMethodQueryParser;
+import org.es.sql.parser.query.method.MethodInvocation;
 
 import java.util.List;
 import java.util.Map;

+ 51 - 48
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/AbstractQueryConditionParser.java

@@ -1,33 +1,36 @@
-package org.es.sql.dsl.parser.sql;
+package org.es.sql.parser.sql;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.*;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
-import org.es.sql.dsl.bean.AtomQuery;
-import org.es.sql.dsl.bean.SQLCondition;
-import org.es.sql.dsl.enums.SQLBoolOperator;
-import org.es.sql.dsl.enums.SQLConditionType;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.es.sql.dsl.parser.query.exact.BetweenAndAtomQueryParser;
-import org.es.sql.dsl.parser.query.exact.BinaryAtomQueryParser;
-import org.es.sql.dsl.parser.query.exact.InListAtomQueryParser;
-import org.es.sql.dsl.parser.query.method.MethodInvocation;
-import org.es.sql.dsl.parser.query.method.fulltext.FullTextAtomQueryParser;
-import org.es.sql.dsl.parser.query.method.script.ScriptAtomQueryParser;
-import org.es.sql.dsl.parser.query.method.term.TermLevelAtomQueryParser;
+import org.apache.lucene.search.join.ScoreMode;
 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.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;
+import org.es.sql.listener.ParseActionListener;
+import org.es.sql.parser.query.exact.BetweenAndAtomQueryParser;
+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.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;
@@ -40,20 +43,20 @@ 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, Object[] sqlArgs) {
-        SQLCondition sqlCondition = recursiveParseQueryCondition(conditionExpr, queryAs, sqlArgs);
-        SQLBoolOperator operator = sqlCondition.getOperator();
+    protected BoolQueryBuilder parseQueryConditionExpr(SQLExpr conditionExpr, String queryAs, SQLArgs SQLArgs) {
+        SQLCondition SQLCondition = recursiveParseQueryCondition(conditionExpr, queryAs, SQLArgs);
+        SQLBoolOperator operator = SQLCondition.getOperator();
 
-        if (SQLConditionType.Atom == sqlCondition.getSQLConditionType()) {
+        if (SQLConditionType.Atom == SQLCondition.getSQLConditionType()) {
             operator = SQLBoolOperator.AND;
         }
-        return mergeAtomQuery(sqlCondition.getQueryList(), operator);
+        return mergeAtomQuery(SQLCondition.getQueryList(), operator);
     }
 
-    private SQLCondition recursiveParseQueryCondition(SQLExpr conditionExpr, String queryAs, Object[] sqlArgs) {
+    private SQLCondition recursiveParseQueryCondition(SQLExpr conditionExpr, String queryAs, SQLArgs SQLArgs) {
         if (conditionExpr instanceof SQLBinaryOpExpr) {
             SQLBinaryOpExpr binOpExpr = (SQLBinaryOpExpr) conditionExpr;
             SQLBinaryOperator binOperator = binOpExpr.getOperator();
@@ -61,8 +64,8 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
             if (SQLBinaryOperator.BooleanAnd == binOperator || SQLBinaryOperator.BooleanOr == binOperator) {
                 SQLBoolOperator operator = SQLBinaryOperator.BooleanAnd == binOperator ? SQLBoolOperator.AND : SQLBoolOperator.OR;
 
-                SQLCondition leftCondition = recursiveParseQueryCondition(binOpExpr.getLeft(), queryAs, sqlArgs);
-                SQLCondition rightCondition = recursiveParseQueryCondition(binOpExpr.getRight(), queryAs, sqlArgs);
+                SQLCondition leftCondition = recursiveParseQueryCondition(binOpExpr.getLeft(), queryAs, SQLArgs);
+                SQLCondition rightCondition = recursiveParseQueryCondition(binOpExpr.getRight(), queryAs, SQLArgs);
 
                 List<AtomQuery> mergedQueryList = Lists.newArrayList();
                 combineQueryBuilder(mergedQueryList, leftCondition, operator);
@@ -72,58 +75,58 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
             }
         }
         else if (conditionExpr instanceof SQLNotExpr) {
-            SQLCondition innerSqlCondition = recursiveParseQueryCondition(((SQLNotExpr) conditionExpr).getExpr(), queryAs, sqlArgs);
+            SQLCondition innerSQLCondition = recursiveParseQueryCondition(((SQLNotExpr) conditionExpr).getExpr(), queryAs, SQLArgs);
 
-            SQLBoolOperator operator = innerSqlCondition.getOperator();
-            if (SQLConditionType.Atom == innerSqlCondition.getSQLConditionType()) {
+            SQLBoolOperator operator = innerSQLCondition.getOperator();
+            if (SQLConditionType.Atom == innerSQLCondition.getSQLConditionType()) {
                 operator = SQLBoolOperator.AND;
             }
 
-            BoolQueryBuilder boolQuery = mergeAtomQuery(innerSqlCondition.getQueryList(), operator);
+            BoolQueryBuilder boolQuery = mergeAtomQuery(innerSQLCondition.getQueryList(), operator);
             boolQuery = QueryBuilders.boolQuery().mustNot(boolQuery);
 
             return new SQLCondition(new AtomQuery(boolQuery), SQLConditionType.Atom);
         }
 
-        return new SQLCondition(parseAtomQueryCondition(conditionExpr, queryAs, sqlArgs), SQLConditionType.Atom);
+        return new SQLCondition(parseAtomQueryCondition(conditionExpr, queryAs, SQLArgs), SQLConditionType.Atom);
     }
 
-    private AtomQuery parseAtomQueryCondition(SQLExpr sqlConditionExpr, String queryAs, Object[] sqlArgs) {
+    private AtomQuery parseAtomQueryCondition(SQLExpr sqlConditionExpr, String queryAs, SQLArgs SQLArgs) {
         if (sqlConditionExpr instanceof SQLMethodInvokeExpr) {
             SQLMethodInvokeExpr methodQueryExpr = (SQLMethodInvokeExpr) sqlConditionExpr;
 
-            MethodInvocation methodInvocation = new MethodInvocation(methodQueryExpr, queryAs, sqlArgs);
+            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);
+                return fullTextAtomQueryParser.parseFullTextAtomQuery(methodQueryExpr, queryAs, SQLArgs);
             }
 
             if (termLevelAtomQueryParser.isTermLevelAtomQuery(methodInvocation)) {
-                return termLevelAtomQueryParser.parseTermLevelAtomQuery(methodQueryExpr, queryAs, sqlArgs);
+                return termLevelAtomQueryParser.parseTermLevelAtomQuery(methodQueryExpr, queryAs, SQLArgs);
             }
         }
         else if (sqlConditionExpr instanceof SQLBinaryOpExpr) {
-            return binaryQueryParser.parseBinaryQuery((SQLBinaryOpExpr) sqlConditionExpr, queryAs, sqlArgs);
+            return binaryQueryParser.parseBinaryQuery((SQLBinaryOpExpr) sqlConditionExpr, queryAs, SQLArgs);
         }
         else if (sqlConditionExpr instanceof SQLInListExpr) {
-            return inListQueryParser.parseInListQuery((SQLInListExpr) sqlConditionExpr, queryAs, sqlArgs);
+            return inListQueryParser.parseInListQuery((SQLInListExpr) sqlConditionExpr, queryAs, SQLArgs);
         }
         else if (sqlConditionExpr instanceof SQLBetweenExpr) {
-            return betweenAndQueryParser.parseBetweenAndQuery((SQLBetweenExpr) sqlConditionExpr, queryAs, sqlArgs);
+            return betweenAndQueryParser.parseBetweenAndQuery((SQLBetweenExpr) sqlConditionExpr, queryAs, SQLArgs);
         }
         throw new ElasticSql2DslException(String.format("[syntax error] Can not support query condition type[%s]", sqlConditionExpr.toString()));
     }
 
-    private void combineQueryBuilder(List<AtomQuery> combiner, SQLCondition sqlCondition, SQLBoolOperator binOperator) {
-        if (SQLConditionType.Atom == sqlCondition.getSQLConditionType() || sqlCondition.getOperator() == binOperator) {
-            combiner.addAll(sqlCondition.getQueryList());
+    private void combineQueryBuilder(List<AtomQuery> combiner, SQLCondition SQLCondition, SQLBoolOperator binOperator) {
+        if (SQLConditionType.Atom == SQLCondition.getSQLConditionType() || SQLCondition.getOperator() == binOperator) {
+            combiner.addAll(SQLCondition.getQueryList());
         }
         else {
-            BoolQueryBuilder boolQuery = mergeAtomQuery(sqlCondition.getQueryList(), sqlCondition.getOperator());
+            BoolQueryBuilder boolQuery = mergeAtomQuery(SQLCondition.getQueryList(), SQLCondition.getOperator());
             combiner.add(new AtomQuery(boolQuery));
         }
     }
@@ -142,7 +145,7 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
                 }
             }
             else {
-                String nestedDocPrefix = atomQuery.getNestedQueryPathContext();
+                String nestedDocPrefix = atomQuery.getNestedQueryPath();
                 listMultiMap.put(nestedDocPrefix, atomQuery.getQuery());
             }
         }
@@ -152,10 +155,10 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
 
             if (nestedQueryList.size() == 1) {
                 if (operator == SQLBoolOperator.AND) {
-                    subBoolQuery.must(QueryBuilders.nestedQuery(nestedDocPrefix, nestedQueryList.get(0)));
+                    subBoolQuery.must(QueryBuilders.nestedQuery(nestedDocPrefix, nestedQueryList.get(0), ScoreMode.None));
                 }
                 if (operator == SQLBoolOperator.OR) {
-                    subBoolQuery.should(QueryBuilders.nestedQuery(nestedDocPrefix, nestedQueryList.get(0)));
+                    subBoolQuery.should(QueryBuilders.nestedQuery(nestedDocPrefix, nestedQueryList.get(0), ScoreMode.None));
                 }
                 continue;
             }
@@ -171,10 +174,10 @@ public abstract class AbstractQueryConditionParser implements QueryParser {
             }
 
             if (operator == SQLBoolOperator.AND) {
-                subBoolQuery.must(QueryBuilders.nestedQuery(nestedDocPrefix, boolNestedQuery));
+                subBoolQuery.must(QueryBuilders.nestedQuery(nestedDocPrefix, boolNestedQuery, ScoreMode.None));
             }
             if (operator == SQLBoolOperator.OR) {
-                subBoolQuery.should(QueryBuilders.nestedQuery(nestedDocPrefix, boolNestedQuery));
+                subBoolQuery.should(QueryBuilders.nestedQuery(nestedDocPrefix, boolNestedQuery, ScoreMode.None));
             }
 
         }

+ 6 - 6
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryFieldParser.java

@@ -1,4 +1,4 @@
-package org.es.sql.dsl.parser.sql;
+package org.es.sql.parser.sql;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr;
@@ -7,11 +7,11 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
 import com.google.common.collect.Lists;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
-import org.es.sql.dsl.bean.ElasticSqlQueryField;
-import org.es.sql.dsl.bean.ElasticSqlQueryFields;
-import org.es.sql.dsl.bean.QueryFieldReferenceNode;
-import org.es.sql.dsl.bean.QueryFieldReferencePath;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
+import org.es.sql.bean.ElasticSqlQueryField;
+import org.es.sql.bean.ElasticSqlQueryFields;
+import org.es.sql.bean.QueryFieldReferenceNode;
+import org.es.sql.bean.QueryFieldReferencePath;
+import org.es.sql.exception.ElasticSql2DslException;
 
 import java.util.Collections;
 import java.util.Iterator;

+ 4 - 4
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryFromParser.java

@@ -1,13 +1,13 @@
-package org.es.sql.dsl.parser.sql;
+package org.es.sql.parser.sql;
 
 import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
 import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
 import com.google.common.collect.Lists;
+import org.es.sql.bean.ElasticDslContext;
 import org.es.sql.druid.ElasticSqlSelectQueryBlock;
-import org.es.sql.dsl.bean.ElasticDslContext;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.listener.ParseActionListener;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.listener.ParseActionListener;
 
 public class QueryFromParser implements QueryParser {
 

+ 33 - 34
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryGroupByParser.java

@@ -1,32 +1,31 @@
-package org.es.sql.dsl.parser.sql;
+package org.es.sql.parser.sql;
 
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
 import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause;
 import com.google.common.collect.Lists;
 import org.apache.commons.collections.CollectionUtils;
-import org.es.sql.druid.ElasticSqlSelectQueryBlock;
-import org.es.sql.dsl.bean.ElasticDslContext;
-import org.es.sql.dsl.bean.ElasticSqlQueryField;
-import org.es.sql.dsl.bean.RangeSegment;
-import org.es.sql.dsl.enums.QueryFieldType;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.helper.ElasticSqlArgTransferHelper;
-import org.es.sql.dsl.helper.ElasticSqlMethodInvokeHelper;
-import org.es.sql.dsl.listener.ParseActionListener;
-import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
 import org.elasticsearch.search.aggregations.AggregationBuilder;
 import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.bucket.range.AbstractRangeBuilder;
-import org.elasticsearch.search.aggregations.bucket.range.RangeBuilder;
-import org.elasticsearch.search.aggregations.bucket.range.date.DateRangeBuilder;
+import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder;
+import org.elasticsearch.search.aggregations.bucket.range.date.DateRangeAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.terms.Terms;
-import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
+import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
+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.druid.ElasticSqlSelectQueryBlock;
+import org.es.sql.enums.QueryFieldType;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.helper.ElasticSqlArgConverter;
+import org.es.sql.helper.ElasticSqlMethodInvokeHelper;
+import org.es.sql.listener.ParseActionListener;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
-import java.util.Date;
 import java.util.List;
 
 public class QueryGroupByParser implements QueryParser {
@@ -41,10 +40,10 @@ public class QueryGroupByParser implements QueryParser {
         this.parseActionListener = parseActionListener;
     }
 
-    public static Date getDateRangeVal(String date) {
+    public static DateTime getDateRangeVal(String date) {
         final String dateRangeValPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
         DateTimeFormatter formatter = DateTimeFormat.forPattern(dateRangeValPattern);
-        return formatter.parseDateTime(date).toDate();
+        return formatter.parseDateTime(date);
     }
 
     @Override
@@ -55,7 +54,7 @@ public class QueryGroupByParser implements QueryParser {
         if (sqlGroupBy != null && CollectionUtils.isNotEmpty(sqlGroupBy.getItems())) {
             String queryAs = dslContext.getParseResult().getQueryAs();
 
-            List<AbstractAggregationBuilder> aggregationList = Lists.newArrayList();
+            List<AggregationBuilder> aggregationList = Lists.newArrayList();
             for (SQLExpr groupByItem : sqlGroupBy.getItems()) {
                 if (!(groupByItem instanceof SQLMethodInvokeExpr)) {
                     throw new ElasticSql2DslException("[syntax error] group by item must be an agg method call");
@@ -71,7 +70,7 @@ public class QueryGroupByParser implements QueryParser {
                     if (aggMethodExpr.getParameters().size() == 2) {
                         shardSizeExpr = aggMethodExpr.getParameters().get(1);
                     }
-                    AggregationBuilder termsBuilder = parseTermsAggregation(queryAs, dslContext.getSqlArgs(), termsFieldExpr, shardSizeExpr);
+                    AggregationBuilder termsBuilder = parseTermsAggregation(queryAs, dslContext.getSQLArgs(), termsFieldExpr, shardSizeExpr);
                     aggregationList.add(termsBuilder);
                 }
 
@@ -80,7 +79,7 @@ public class QueryGroupByParser implements QueryParser {
                 if (ElasticSqlMethodInvokeHelper.isMethodOf(ElasticSqlMethodInvokeHelper.AGG_RANGE_METHOD, aggMethodExpr.getMethodName())) {
                     ElasticSqlMethodInvokeHelper.checkRangeAggMethod(aggMethodExpr);
 
-                    List<RangeSegment> rangeSegments = parseRangeSegments(aggMethodExpr, dslContext.getSqlArgs());
+                    List<RangeSegment> rangeSegments = parseRangeSegments(aggMethodExpr, dslContext.getSQLArgs());
                     SQLExpr rangeFieldExpr = aggMethodExpr.getParameters().get(0);
 
                     AggregationBuilder rangeBuilder = parseRangeAggregation(queryAs, rangeFieldExpr, rangeSegments);
@@ -92,7 +91,7 @@ public class QueryGroupByParser implements QueryParser {
 
     }
 
-    private AggregationBuilder parseTermsAggregation(String queryAs, Object[] args, SQLExpr termsFieldExpr, SQLExpr shardSizeExpr) {
+    private AggregationBuilder parseTermsAggregation(String queryAs, SQLArgs args, SQLExpr termsFieldExpr, SQLExpr shardSizeExpr) {
         QueryFieldParser queryFieldParser = new QueryFieldParser();
 
         ElasticSqlQueryField queryField = queryFieldParser.parseConditionQueryField(termsFieldExpr, queryAs);
@@ -100,8 +99,8 @@ public class QueryGroupByParser implements QueryParser {
             throw new ElasticSql2DslException(String.format("[syntax error] can not support terms aggregation for field type[%s]", queryField.getQueryFieldType()));
         }
 
-        if(shardSizeExpr != null) {
-            Number termBuckets = (Number) ElasticSqlArgTransferHelper.transferSqlArg(shardSizeExpr, args);
+        if (shardSizeExpr != null) {
+            Number termBuckets = (Number) ElasticSqlArgConverter.convertSqlArg(shardSizeExpr, args);
             return createTermsBuilder(queryField.getQueryFieldFullName(), termBuckets.intValue());
         }
         return createTermsBuilder(queryField.getQueryFieldFullName());
@@ -119,15 +118,15 @@ public class QueryGroupByParser implements QueryParser {
         return createRangeBuilder(queryField.getQueryFieldFullName(), rangeSegments);
     }
 
-    private List<RangeSegment> parseRangeSegments(SQLMethodInvokeExpr rangeMethodExpr, Object[] args) {
+    private List<RangeSegment> parseRangeSegments(SQLMethodInvokeExpr rangeMethodExpr, SQLArgs args) {
         List<RangeSegment> rangeSegmentList = Lists.newArrayList();
         for (int pIdx = 1; pIdx < rangeMethodExpr.getParameters().size(); pIdx++) {
             SQLMethodInvokeExpr segMethodExpr = (SQLMethodInvokeExpr) rangeMethodExpr.getParameters().get(pIdx);
 
             ElasticSqlMethodInvokeHelper.checkRangeItemAggMethod(segMethodExpr);
 
-            Object from = ElasticSqlArgTransferHelper.transferSqlArg(segMethodExpr.getParameters().get(0), args, true);
-            Object to = ElasticSqlArgTransferHelper.transferSqlArg(segMethodExpr.getParameters().get(1), args, true);
+            Object from = ElasticSqlArgConverter.convertSqlArg(segMethodExpr.getParameters().get(0), args, true);
+            Object to = ElasticSqlArgConverter.convertSqlArg(segMethodExpr.getParameters().get(1), args, true);
 
             rangeSegmentList.add(new RangeSegment(from, to,
                     from instanceof Number ? RangeSegment.SegmentType.Numeric : RangeSegment.SegmentType.Date));
@@ -135,14 +134,14 @@ public class QueryGroupByParser implements QueryParser {
         return rangeSegmentList;
     }
 
-    private TermsBuilder createTermsBuilder(String termsFieldName, int termBuckets) {
+    private TermsAggregationBuilder createTermsBuilder(String termsFieldName, int termBuckets) {
         return AggregationBuilders.terms(AGG_BUCKET_KEY_PREFIX + termsFieldName)
                 .field(termsFieldName)
                 .minDocCount(1).shardMinDocCount(1)
                 .shardSize(termBuckets << 1).size(termBuckets).order(Terms.Order.count(false));
     }
 
-    private TermsBuilder createTermsBuilder(String termsFieldName) {
+    private TermsAggregationBuilder createTermsBuilder(String termsFieldName) {
         return createTermsBuilder(termsFieldName, MAX_GROUP_BY_SIZE);
     }
 
@@ -151,7 +150,7 @@ public class QueryGroupByParser implements QueryParser {
         RangeSegment.SegmentType segType = rangeSegments.get(0).getSegmentType();
 
         if (segType == RangeSegment.SegmentType.Numeric) {
-            RangeBuilder numericRangeBuilder = AggregationBuilders.range(AGG_BUCKET_KEY_PREFIX + rangeFieldName).field(rangeFieldName);
+            RangeAggregationBuilder numericRangeBuilder = AggregationBuilders.range(AGG_BUCKET_KEY_PREFIX + rangeFieldName).field(rangeFieldName);
             for (RangeSegment segment : rangeSegments) {
                 String key = String.format("%s-%s", segment.getFrom().toString(), segment.getTo().toString());
                 numericRangeBuilder.addRange(key, Double.valueOf(segment.getFrom().toString()), Double.valueOf(segment.getTo().toString()));
@@ -160,21 +159,21 @@ public class QueryGroupByParser implements QueryParser {
         }
 
         if (segType == RangeSegment.SegmentType.Date) {
-            DateRangeBuilder dateRangeBuilder = AggregationBuilders.dateRange(AGG_BUCKET_KEY_PREFIX + rangeFieldName).field(rangeFieldName);
+            DateRangeAggregationBuilder dateRangeBuilder = AggregationBuilders.dateRange(AGG_BUCKET_KEY_PREFIX + rangeFieldName).field(rangeFieldName);
             for (RangeSegment segment : rangeSegments) {
 
-                Date fromDate = getDateRangeVal(segment.getFrom().toString());
-                Date toDate = getDateRangeVal(segment.getTo().toString());
+                DateTime fromDate = getDateRangeVal(segment.getFrom().toString());
+                DateTime toDate = getDateRangeVal(segment.getTo().toString());
 
                 String key = String.format("[%s]-[%s]", formatDateRangeAggKey(fromDate), formatDateRangeAggKey(toDate));
-                dateRangeBuilder.addRange(key, segment.getFrom(), segment.getTo());
+                dateRangeBuilder.addRange(key, fromDate, toDate);
             }
             rangeBuilder = dateRangeBuilder;
         }
         return rangeBuilder;
     }
 
-    private String formatDateRangeAggKey(Date date) {
+    private String formatDateRangeAggKey(DateTime date) {
         final String dateRangeKeyPattern = "yyyy-MM-dd HH:mm:ss";
         return new DateTime(date).toString(dateRangeKeyPattern);
     }

+ 12 - 9
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryLimitSizeParser.java

@@ -1,13 +1,14 @@
-package org.es.sql.dsl.parser.sql;
+package org.es.sql.parser.sql;
 
 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.druid.ElasticSqlSelectQueryBlock;
-import org.es.sql.dsl.bean.ElasticDslContext;
-import org.es.sql.dsl.exception.ElasticSql2DslException;
-import org.es.sql.dsl.helper.ElasticSqlArgTransferHelper;
-import org.es.sql.dsl.listener.ParseActionListener;
+import org.es.sql.exception.ElasticSql2DslException;
+import org.es.sql.helper.ElasticSqlArgConverter;
+import org.es.sql.listener.ParseActionListener;
 
 public class QueryLimitSizeParser implements QueryParser {
 
@@ -21,11 +22,13 @@ public class QueryLimitSizeParser implements QueryParser {
     public void parse(ElasticDslContext dslContext) {
         ElasticSqlSelectQueryBlock queryBlock = (ElasticSqlSelectQueryBlock) dslContext.getQueryExpr().getSubQuery().getQuery();
         if (queryBlock.getLimit() != null) {
-            Integer from = parseLimitInteger(queryBlock.getLimit().getOffset(), dslContext.getSqlArgs());
+            Integer from = parseLimitInteger(queryBlock.getLimit().getOffset(), dslContext.getSQLArgs());
             dslContext.getParseResult().setFrom(from);
 
-            Integer size = parseLimitInteger(queryBlock.getLimit().getRowCount(), dslContext.getSqlArgs());
+            Integer size = parseLimitInteger(queryBlock.getLimit().getRowCount(), dslContext.getSQLArgs());
             dslContext.getParseResult().setSize(size);
+
+            parseActionListener.onLimitSizeParse(from, size);
         }
         else {
             dslContext.getParseResult().setFrom(0);
@@ -33,13 +36,13 @@ public class QueryLimitSizeParser implements QueryParser {
         }
     }
 
-    public Integer parseLimitInteger(SQLExpr limitInt, Object[] args) {
+    public Integer parseLimitInteger(SQLExpr limitInt, SQLArgs args) {
         if (limitInt instanceof SQLIntegerExpr) {
             return ((SQLIntegerExpr) limitInt).getNumber().intValue();
         }
         else if (limitInt instanceof SQLVariantRefExpr) {
             SQLVariantRefExpr varLimitExpr = (SQLVariantRefExpr) limitInt;
-            Object targetVal = ElasticSqlArgTransferHelper.transferSqlArg(varLimitExpr, args);
+            Object targetVal = ElasticSqlArgConverter.convertSqlArg(varLimitExpr, args);
             if (!(targetVal instanceof Integer)) {
                 throw new ElasticSql2DslException("[syntax error] Sql limit expr should be a non-negative number");
             }

+ 0 - 0
elasticsearch-query-core/src/main/java/org/es/sql/dsl/parser/sql/QueryMatchConditionParser.java


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff