Skip to content

Commit c30305c

Browse files
author
wanghaun
committed
feature/20220629_fix 优化
1 parent 6ee5c1e commit c30305c

File tree

5 files changed

+35
-19
lines changed

5 files changed

+35
-19
lines changed

elasticsearch-engine-base/src/main/java/com/elasticsearch/engine/base/common/parse/sql/EsSqlQueryHelper.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.elasticsearch.engine.base.common.proxy.handler.exannotation.AnnotationQueryCommon;
44
import com.elasticsearch.engine.base.common.queryhandler.sql.EsSqlExecuteHandler;
5-
import com.elasticsearch.engine.base.common.utils.LocalStringUtils;
65
import com.elasticsearch.engine.base.common.utils.ThreadLocalUtil;
76
import com.elasticsearch.engine.base.config.EsEngineConfig;
87
import com.elasticsearch.engine.base.model.constant.CommonConstant;
@@ -141,9 +140,7 @@ private String fillParamSql(Method method, String sql, Object[] args, BackDto ba
141140
}
142141
//参数替换
143142
// 解析sql参数
144-
//jooq 需要替换"`"
145-
String selectSql = LocalStringUtils.replaceSlightPauseMark(select.toString());
146-
String paramSql = SqlParamParseHelper.getMethodArgsSqlJpa(selectSql, method, args, SqlParamParse.JAP_SQL_PARAM);
143+
String paramSql = SqlParamParseHelper.getMethodArgsSqlJpa(select.toString(), method, args, SqlParamParse.JAP_SQL_PARAM);
147144
if (EsEngineConfig.getSqlTraceLog()) {
148145
log.info("替换参数后sql: {}", paramSql);
149146
}

elasticsearch-engine-base/src/main/java/com/elasticsearch/engine/base/common/parse/sql/SqlParserHelper.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.elasticsearch.engine.base.common.utils.ReflectionUtils;
66
import com.elasticsearch.engine.base.config.EsEngineConfig;
77
import com.elasticsearch.engine.base.model.annotion.EsQueryIndex;
8-
import com.elasticsearch.engine.base.model.constant.CommonConstant;
98
import com.elasticsearch.engine.base.model.domain.BackDto;
109
import com.elasticsearch.engine.base.model.exception.EsEngineQueryException;
1110
import com.google.common.collect.Lists;
@@ -172,7 +171,7 @@ private static Map<String, String> getJoinTableName(PlainSelect plain) {
172171
fromItems.forEach(fromItem -> {
173172
String fromItemName = "";
174173
if (fromItem instanceof Table) {
175-
fromItemName = LocalStringUtils.replaceSlightPauseMark(((Table) fromItem).getName());
174+
fromItemName = ((Table) fromItem).getName();
176175
}
177176
tableNames.put(fromItemName, fromItem.getAlias() == null ? fromItemName : fromItem.getAlias().getName());
178177
});
@@ -375,8 +374,8 @@ public static void setCaseExpression(CaseExpression caseExpression, Map<String,
375374
}
376375
List<WhenClause> list = caseExpression.getWhenClauses();
377376
list.forEach(data -> {
378-
if (data instanceof WhenClause) {
379-
setWhereItem(((WhenClause) data).getWhenExpression(), tableAlias);
377+
if (data != null) {
378+
setWhereItem(data.getWhenExpression(), tableAlias);
380379
}
381380
});
382381
}
@@ -389,12 +388,11 @@ public static void setCaseExpression(CaseExpression caseExpression, Map<String,
389388
private static void reNameColumnName(Column column, Map<String, String> tableAlias) {
390389
//替换mysql和es的别名映射
391390
if (!tableAlias.isEmpty()) {
392-
//替换掉'`'主要针对jooq
393-
String columnName = LocalStringUtils.replaceSlightPauseMark(column.toString());
394-
//判断是否包含两个'.' 替换掉jooq的 `user`.(jooq生成的字段格式为 `user`.`person`.`person_no`)
391+
String columnName = column.toString();
392+
//判断是否包含两个'.' 替换掉jooq的库名(jooq生成的字段格式为 `user`.`person`.`person_no`)
395393
int n = columnName.length() - LocalStringUtils.replaceSpot(columnName).length();
396-
if (n > NumberUtils.INTEGER_ONE && columnName.contains(CommonConstant.JOOQ_SQL_COLUMN_PREFIX)) {
397-
columnName = columnName.replaceAll(CommonConstant.JOOQ_SQL_COLUMN_PREFIX, "");
394+
if (n > NumberUtils.INTEGER_ONE) {
395+
columnName = columnName.substring(columnName.indexOf(".") + 1);
398396
}
399397
if (tableAlias.containsKey(columnName)) {
400398
column.setColumnName(tableAlias.get(columnName));

elasticsearch-engine-base/src/main/java/com/elasticsearch/engine/base/config/EsEngineConfigProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class EsEngineConfigProperties {
1818
/**
1919
* elasticSearch version
2020
*/
21-
private Integer elasticVersion = 7;
21+
private Integer elasticVersion = 6;
2222

2323
/**
2424
* 对没有添加注解的字段 默然按照trem/trems查询

elasticsearch-engine-base/src/main/java/com/elasticsearch/engine/base/model/constant/CommonConstant.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,18 @@ public class CommonConstant {
7676
public static final String DEFAULT_TIME_ZONE = "+08:00";
7777

7878
/**
79-
* jooq COLUMN 前缀
79+
* jooq BETWEEN 格式
8080
*/
81-
public static final String JOOQ_SQL_COLUMN_PREFIX = "user.";
81+
public static final String JOOQ_SQL_BETWEEN = "between {ts";
82+
83+
/**
84+
* jooq BETWEEN 前缀
85+
*/
86+
public static final String JOOQ_SQL_BETWEEN_PREFIX = "\\{ts";
87+
88+
/**
89+
* jooq BETWEEN 后缀
90+
*/
91+
public static final String JOOQ_SQL_BETWEEN_SUFFIX = "\\}";
8292

8393
}

elasticsearch-engine-jooq/src/main/java/com/elasticsearch/engine/jooq/listener/JooqEsQueryExecuteListener.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.elasticsearch.engine.jooq.listener;
22

3+
import com.elasticsearch.engine.base.common.utils.LocalStringUtils;
34
import com.elasticsearch.engine.base.common.utils.ThreadLocalUtil;
45
import com.elasticsearch.engine.base.model.constant.CommonConstant;
56
import com.elasticsearch.engine.base.model.exception.EsEngineJpaExecuteException;
@@ -59,7 +60,7 @@ public void renderEnd(ExecuteContext ctx) {
5960
// ctx.sql("SELECT `user`.`person`.`id`, `user`.`person`.`person_no`, `user`.`person`.`person_name`, `user`.`person`.`phone`, `user`.`person`.`salary`, `user`.`person`.`company`, `user`.`person`.`status`, `user`.`person`.`sex`, `user`.`person`.`address`, `user`.`person`.`create_time`, `user`.`person`.`create_user` FROM `user`.`person` WHERE `user`.`person`.`status` = ? AND person_no IN ('US2022060100001', 'US2022060100023')");
6061
ctx.sql(backSql);
6162
} else {
62-
ThreadLocalUtil.set(CommonConstant.JPA_NATIVE_SQL, ctx.sql());
63+
ThreadLocalUtil.set(CommonConstant.JPA_NATIVE_SQL, sqlTransform(Objects.requireNonNull(ctx.sql())));
6364
}
6465
}
6566

@@ -98,15 +99,15 @@ public void bindEnd(ExecuteContext ctx) {
9899
if (Objects.isNull(isEsQuery)) {
99100
return;
100101
}
101-
String sql = ctx.query().toString();
102+
String sql = Objects.requireNonNull(ctx.query()).toString();
102103
//非select语句直接返回
103104
if (!sql.trim().startsWith(CommonConstant.SELECT_SQL_PREFIX_LOWER) && !sql.trim().startsWith(CommonConstant.SELECT_SQL_PREFIX_UPPER)) {
104105
return;
105106
}
106107
String backSql = ThreadLocalUtil.get(CommonConstant.BACK_QUERY_SQL);
107108

108109
if (StringUtils.isEmpty(backSql)) {
109-
throw new EsEngineJpaExecuteException(sql);
110+
throw new EsEngineJpaExecuteException(sqlTransform(sql));
110111
}
111112
}
112113

@@ -131,4 +132,14 @@ public void bindEnd(ExecuteContext ctx) {
131132
// }
132133
// }
133134

135+
private String sqlTransform(String sql) {
136+
//jooq 需要替换"`"
137+
sql = LocalStringUtils.replaceSlightPauseMark(sql);
138+
//处理jooq生成的between
139+
if (sql.contains(CommonConstant.JOOQ_SQL_BETWEEN)) {
140+
return sql.replaceAll(CommonConstant.JOOQ_SQL_BETWEEN_PREFIX, "").replaceAll(CommonConstant.JOOQ_SQL_BETWEEN_SUFFIX, "");
141+
}
142+
return sql;
143+
}
144+
134145
}

0 commit comments

Comments
 (0)