DataNativeSqlParser优化

This commit is contained in:
redkale
2023-08-14 15:16:40 +08:00
parent 87892b27e7
commit 317f1ffbb8
3 changed files with 21 additions and 7 deletions

View File

@@ -77,6 +77,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement
protected final BiFunction<DataSource, EntityInfo, CompletableFuture<List>> fullloader = (s, i) protected final BiFunction<DataSource, EntityInfo, CompletableFuture<List>> fullloader = (s, i)
-> ((CompletableFuture<Sheet>) querySheetDBAsync(i, false, false, false, null, null, (FilterNode) null)).thenApply(e -> e == null ? new ArrayList() : e.list(true)); -> ((CompletableFuture<Sheet>) querySheetDBAsync(i, false, false, false, null, null, (FilterNode) null)).thenApply(e -> e == null ? new ArrayList() : e.list(true));
protected final Function<Integer, String> signFunc = index -> prepareParamSign(index);
//超过多少毫秒视为较慢, 会打印警告级别的日志, 默认值: 2000 //超过多少毫秒视为较慢, 会打印警告级别的日志, 默认值: 2000
protected long slowmsWarn; protected long slowmsWarn;
@@ -642,11 +644,11 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement
return getSQLAttrValue(info, attr, val); return getSQLAttrValue(info, attr, val);
} }
protected DataNativeSqlParser.NativeSqlInfo nativeParse(String prepareSign, String nativeSql, Map<String, Object> params) { protected DataNativeSqlParser.NativeSqlStatement nativeParse(String nativeSql, Map<String, Object> params) {
if (nativeSqlParser == null) { if (nativeSqlParser == null) {
throw new SourceException("not found DataNativeSqlParser instance"); throw new SourceException("not found DataNativeSqlParser instance");
} }
return nativeSqlParser.parse(prepareSign, nativeSql, params == null ? Collections.emptyMap() : params); return nativeSqlParser.parse(signFunc, nativeSql, params == null ? Collections.emptyMap() : params);
} }
@Override @Override

View File

@@ -18,7 +18,7 @@ import org.redkale.annotation.*;
import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceListener;
import org.redkale.annotation.ResourceType; import org.redkale.annotation.ResourceType;
import org.redkale.service.Local; import org.redkale.service.Local;
import org.redkale.source.DataNativeSqlParser.NativeSqlInfo; import org.redkale.source.DataNativeSqlParser.NativeSqlStatement;
import org.redkale.util.*; import org.redkale.util.*;
/** /**
@@ -2537,7 +2537,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
@Override @Override
public int nativeUpdate(String sql, Map<String, Object> params) { public int nativeUpdate(String sql, Map<String, Object> params) {
NativeSqlInfo sinfo = super.nativeParse("?", sql, params); NativeSqlStatement sinfo = super.nativeParse(sql, params);
final long s = System.currentTimeMillis(); final long s = System.currentTimeMillis();
SourceConnection conn = writePool.pollConnection(); SourceConnection conn = writePool.pollConnection();
try { try {
@@ -2612,7 +2612,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
@Override @Override
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params) { public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params) {
NativeSqlInfo sinfo = super.nativeParse("?", sql, params); NativeSqlStatement sinfo = super.nativeParse(sql, params);
final long s = System.currentTimeMillis(); final long s = System.currentTimeMillis();
final SourceConnection conn = readPool.pollConnection(); final SourceConnection conn = readPool.pollConnection();
try { try {

View File

@@ -4,6 +4,7 @@
package org.redkale.source; package org.redkale.source;
import java.util.*; import java.util.*;
import java.util.function.Function;
import org.redkale.convert.ConvertDisabled; import org.redkale.convert.ConvertDisabled;
import org.redkale.convert.json.JsonConvert; import org.redkale.convert.json.JsonConvert;
@@ -19,13 +20,16 @@ import org.redkale.convert.json.JsonConvert;
*/ */
public interface DataNativeSqlParser { public interface DataNativeSqlParser {
NativeSqlInfo parse(String prepareSign, String nativeSql, Map<String, Object> params); NativeSqlStatement parse(Function<Integer, String> signFunc, String nativeSql, Map<String, Object> params);
public static class NativeSqlInfo { public static class NativeSqlStatement {
//根据参数值集合重新生成的带?参数可执行的sql //根据参数值集合重新生成的带?参数可执行的sql
protected String nativeSql; protected String nativeSql;
//是否包含InExpression参数名
protected boolean existInNamed;
//需要预编译的参数名, 数量与sql中的?数量一致 //需要预编译的参数名, 数量与sql中的?数量一致
protected List<String> paramNames; protected List<String> paramNames;
@@ -50,6 +54,14 @@ public interface DataNativeSqlParser {
this.nativeSql = nativeSql; this.nativeSql = nativeSql;
} }
public boolean isExistInNamed() {
return existInNamed;
}
public void setExistInNamed(boolean existInNamed) {
this.existInNamed = existInNamed;
}
public List<String> getParamNames() { public List<String> getParamNames() {
return paramNames; return paramNames;
} }