From 317f1ffbb80c35c8ea18b3aa35556f5689cd7f37 Mon Sep 17 00:00:00 2001 From: redkale Date: Mon, 14 Aug 2023 15:16:40 +0800 Subject: [PATCH] =?UTF-8?q?DataNativeSqlParser=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redkale/source/AbstractDataSqlSource.java | 6 ++++-- .../java/org/redkale/source/DataJdbcSource.java | 6 +++--- .../org/redkale/source/DataNativeSqlParser.java | 16 ++++++++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java index 79a6ed9cc..33bc823c4 100644 --- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java @@ -77,6 +77,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement protected final BiFunction> fullloader = (s, i) -> ((CompletableFuture) querySheetDBAsync(i, false, false, false, null, null, (FilterNode) null)).thenApply(e -> e == null ? new ArrayList() : e.list(true)); + protected final Function signFunc = index -> prepareParamSign(index); + //超过多少毫秒视为较慢, 会打印警告级别的日志, 默认值: 2000 protected long slowmsWarn; @@ -642,11 +644,11 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return getSQLAttrValue(info, attr, val); } - protected DataNativeSqlParser.NativeSqlInfo nativeParse(String prepareSign, String nativeSql, Map params) { + protected DataNativeSqlParser.NativeSqlStatement nativeParse(String nativeSql, Map params) { if (nativeSqlParser == null) { 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 diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index b69b32b19..713b595ec 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -18,7 +18,7 @@ import org.redkale.annotation.*; import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; import org.redkale.service.Local; -import org.redkale.source.DataNativeSqlParser.NativeSqlInfo; +import org.redkale.source.DataNativeSqlParser.NativeSqlStatement; import org.redkale.util.*; /** @@ -2537,7 +2537,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { @Override public int nativeUpdate(String sql, Map params) { - NativeSqlInfo sinfo = super.nativeParse("?", sql, params); + NativeSqlStatement sinfo = super.nativeParse(sql, params); final long s = System.currentTimeMillis(); SourceConnection conn = writePool.pollConnection(); try { @@ -2612,7 +2612,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { @Override public V nativeQuery(String sql, BiConsumer consumer, Function handler, Map params) { - NativeSqlInfo sinfo = super.nativeParse("?", sql, params); + NativeSqlStatement sinfo = super.nativeParse(sql, params); final long s = System.currentTimeMillis(); final SourceConnection conn = readPool.pollConnection(); try { diff --git a/src/main/java/org/redkale/source/DataNativeSqlParser.java b/src/main/java/org/redkale/source/DataNativeSqlParser.java index 790264a29..a5739f76a 100644 --- a/src/main/java/org/redkale/source/DataNativeSqlParser.java +++ b/src/main/java/org/redkale/source/DataNativeSqlParser.java @@ -4,6 +4,7 @@ package org.redkale.source; import java.util.*; +import java.util.function.Function; import org.redkale.convert.ConvertDisabled; import org.redkale.convert.json.JsonConvert; @@ -19,13 +20,16 @@ import org.redkale.convert.json.JsonConvert; */ public interface DataNativeSqlParser { - NativeSqlInfo parse(String prepareSign, String nativeSql, Map params); + NativeSqlStatement parse(Function signFunc, String nativeSql, Map params); - public static class NativeSqlInfo { + public static class NativeSqlStatement { //根据参数值集合重新生成的带?参数可执行的sql protected String nativeSql; + //是否包含InExpression参数名 + protected boolean existInNamed; + //需要预编译的参数名, 数量与sql中的?数量一致 protected List paramNames; @@ -50,6 +54,14 @@ public interface DataNativeSqlParser { this.nativeSql = nativeSql; } + public boolean isExistInNamed() { + return existInNamed; + } + + public void setExistInNamed(boolean existInNamed) { + this.existInNamed = existInNamed; + } + public List getParamNames() { return paramNames; }