From 8db24bdcd6758fada08823f2a7919b8bd8a19c0c Mon Sep 17 00:00:00 2001 From: redkale Date: Thu, 24 Aug 2023 22:20:11 +0800 Subject: [PATCH] =?UTF-8?q?DataNativeSqlParser=E5=A2=9E=E5=8A=A0loadFirst?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redkale/source/DataNativeSqlParser.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/main/java/org/redkale/source/DataNativeSqlParser.java b/src/main/java/org/redkale/source/DataNativeSqlParser.java index ea2da7daf..92a365b0f 100644 --- a/src/main/java/org/redkale/source/DataNativeSqlParser.java +++ b/src/main/java/org/redkale/source/DataNativeSqlParser.java @@ -7,6 +7,7 @@ import java.util.*; import java.util.function.Function; import org.redkale.convert.ConvertDisabled; import org.redkale.convert.json.JsonConvert; +import org.redkale.util.RedkaleClassLoader; /** * @@ -22,8 +23,33 @@ public interface DataNativeSqlParser { NativeSqlStatement parse(Function signFunc, String dbtype, String rawSql, Map params); + public static DataNativeSqlParser loadFirst() { + if (NativeSqlStatement._first_parser != NativeSqlStatement._NIL) { + return NativeSqlStatement._first_parser; + } + Iterator it = ServiceLoader.load(DataNativeSqlParserProvider.class).iterator(); + RedkaleClassLoader.putServiceLoader(DataNativeSqlParserProvider.class); + while (it.hasNext()) { + DataNativeSqlParserProvider provider = it.next(); + if (provider != null && provider.acceptsConf(null)) { + return provider.createInstance(); + } + } + NativeSqlStatement._first_parser = null; + return null; + } + public static class NativeSqlStatement { + private static final DataNativeSqlParser _NIL = new DataNativeSqlParser() { + @Override + public NativeSqlStatement parse(Function signFunc, String dbtype, String rawSql, Map params) { + throw new UnsupportedOperationException("Not supported yet."); + } + }; + + private static DataNativeSqlParser _first_parser = _NIL; + //根据参数值集合重新生成的带?参数可执行的sql protected String nativeSql;