DataNativeSqlInfo
This commit is contained in:
@@ -20,7 +20,6 @@ import org.redkale.inject.ResourceEvent;
|
||||
import org.redkale.service.Local;
|
||||
import static org.redkale.source.DataSources.*;
|
||||
import org.redkale.util.*;
|
||||
import org.redkale.annotation.ResourceChanged;
|
||||
|
||||
/**
|
||||
* DataSource的JDBC实现类
|
||||
@@ -148,7 +147,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected <T> List<PreparedStatement> prepareInsertEntityStatements(JdbcConnection conn, EntityInfo<T> info, Map<String, PrepareInfo<T>> prepareInfos, T... entitys) throws SQLException {
|
||||
protected <T> List<PreparedStatement> prepareInsertEntityStatements(JdbcConnection conn,
|
||||
EntityInfo<T> info, Map<String, PrepareInfo<T>> prepareInfos, T... entitys) throws SQLException {
|
||||
Attribute<T, Serializable>[] attrs = info.insertAttributes;
|
||||
final List<PreparedStatement> prestmts = new ArrayList<>();
|
||||
for (Map.Entry<String, PrepareInfo<T>> en : prepareInfos.entrySet()) {
|
||||
@@ -165,7 +165,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
return prestmts;
|
||||
}
|
||||
|
||||
protected <T> PreparedStatement prepareInsertEntityStatement(JdbcConnection conn, String sql, EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
protected <T> PreparedStatement prepareInsertEntityStatement(JdbcConnection conn, String sql,
|
||||
EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
Attribute<T, Serializable>[] attrs = info.insertAttributes;
|
||||
final PreparedStatement prestmt = info.isAutoGenerated()
|
||||
? conn.prepareUpdateStatement(sql, Statement.RETURN_GENERATED_KEYS)
|
||||
@@ -177,7 +178,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
return prestmt;
|
||||
}
|
||||
|
||||
protected <T> List<PreparedStatement> prepareUpdateEntityStatements(JdbcConnection conn, EntityInfo<T> info, Map<String, PrepareInfo<T>> prepareInfos, T... entitys) throws SQLException {
|
||||
protected <T> List<PreparedStatement> prepareUpdateEntityStatements(JdbcConnection conn,
|
||||
EntityInfo<T> info, Map<String, PrepareInfo<T>> prepareInfos, T... entitys) throws SQLException {
|
||||
Attribute<T, Serializable> primary = info.primary;
|
||||
Attribute<T, Serializable>[] attrs = info.updateAttributes;
|
||||
final List<PreparedStatement> prestmts = new ArrayList<>();
|
||||
@@ -194,7 +196,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
return prestmts;
|
||||
}
|
||||
|
||||
protected <T> PreparedStatement prepareUpdateEntityStatement(JdbcConnection conn, String prepareSQL, EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
protected <T> PreparedStatement prepareUpdateEntityStatement(JdbcConnection conn,
|
||||
String prepareSQL, EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
Attribute<T, Serializable> primary = info.primary;
|
||||
Attribute<T, Serializable>[] attrs = info.updateAttributes;
|
||||
final PreparedStatement prestmt = conn.prepareUpdateStatement(prepareSQL);
|
||||
@@ -206,7 +209,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
return prestmt;
|
||||
}
|
||||
|
||||
protected <T> int bindStatementParameters(JdbcConnection conn, PreparedStatement prestmt, EntityInfo<T> info, Attribute<T, Serializable>[] attrs, T entity) throws SQLException {
|
||||
protected <T> int bindStatementParameters(JdbcConnection conn, PreparedStatement prestmt,
|
||||
EntityInfo<T> info, Attribute<T, Serializable>[] attrs, T entity) throws SQLException {
|
||||
int i = 0;
|
||||
for (Attribute<T, Serializable> attr : attrs) {
|
||||
Object val = getEntityAttrValue(info, attr, entity);
|
||||
@@ -340,7 +344,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
private <T> int insertDBStatement(List<Statement> stmtsRef, final JdbcConnection conn, final EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
private <T> int insertDBStatement(List<Statement> stmtsRef, JdbcConnection conn, EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
final long s = System.currentTimeMillis();
|
||||
int c = 0;
|
||||
String presql = null;
|
||||
@@ -479,7 +483,9 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
try {
|
||||
stmt = conn.createUpdateStatement();
|
||||
for (String newCatalog : newCatalogs) {
|
||||
stmt.addBatch(("postgresql".equals(dbtype()) ? "CREATE SCHEMA IF NOT EXISTS " : "CREATE DATABASE IF NOT EXISTS ") + newCatalog);
|
||||
stmt.addBatch(("postgresql".equals(dbtype())
|
||||
? "CREATE SCHEMA IF NOT EXISTS "
|
||||
: "CREATE DATABASE IF NOT EXISTS ") + newCatalog);
|
||||
}
|
||||
stmt.executeBatch();
|
||||
conn.offerUpdateStatement(stmt);
|
||||
@@ -648,12 +654,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> deleteDBAsync(final EntityInfo<T> info, String[] tables, Flipper flipper, FilterNode node, Map<String, List<Serializable>> pkmap, final String... sqls) {
|
||||
protected <T> CompletableFuture<Integer> deleteDBAsync(final EntityInfo<T> info, String[] tables,
|
||||
Flipper flipper, FilterNode node, Map<String, List<Serializable>> pkmap, final String... sqls) {
|
||||
return supplyAsync(() -> deleteDB(info, tables, flipper, node, pkmap, sqls));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> int deleteDB(EntityInfo<T> info, String[] tables, Flipper flipper, FilterNode node, Map<String, List<Serializable>> pkmap, String... sqls) {
|
||||
protected <T> int deleteDB(EntityInfo<T> info, String[] tables, Flipper flipper,
|
||||
FilterNode node, Map<String, List<Serializable>> pkmap, String... sqls) {
|
||||
JdbcConnection conn = null;
|
||||
List<Statement> stmtsRef = new ArrayList<>();
|
||||
try {
|
||||
@@ -670,7 +678,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
private <T> int deleteDBStatement(List<Statement> stmtsRef, final JdbcConnection conn, final EntityInfo<T> info, String[] tables, Flipper flipper, FilterNode node, Map<String, List<Serializable>> pkmap, String... sqls) throws SQLException {
|
||||
private <T> int deleteDBStatement(List<Statement> stmtsRef, final JdbcConnection conn, final EntityInfo<T> info,
|
||||
String[] tables, Flipper flipper, FilterNode node, Map<String, List<Serializable>> pkmap, String... sqls) throws SQLException {
|
||||
final long s = System.currentTimeMillis();
|
||||
Statement stmt = null;
|
||||
try {
|
||||
@@ -731,7 +740,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
if (logger.isLoggable(Level.FINE)) {
|
||||
logger.log(Level.FINE, "delete, old-tables: " + Arrays.toString(oldTables) + ", new-tables: " + (pkmap != null ? pkmap.keySet() : Arrays.toString(tables)));
|
||||
logger.log(Level.FINE, "delete, old-tables: " + Arrays.toString(oldTables)
|
||||
+ ", new-tables: " + (pkmap != null ? pkmap.keySet() : Arrays.toString(tables)));
|
||||
}
|
||||
if ((pkmap != null ? pkmap.size() : tables.length) == 0) { //分表全部不存在
|
||||
return 0;
|
||||
@@ -907,7 +917,9 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
c = stmt.executeUpdate(copyTableSql);
|
||||
} else { //需要先建库
|
||||
String newCatalog = newTable.substring(0, newTable.indexOf('.'));
|
||||
String catalogSql = ("postgresql".equals(dbtype()) ? "CREATE SCHEMA IF NOT EXISTS " : "CREATE DATABASE IF NOT EXISTS ") + newCatalog;
|
||||
String catalogSql = ("postgresql".equals(dbtype())
|
||||
? "CREATE SCHEMA IF NOT EXISTS "
|
||||
: "CREATE DATABASE IF NOT EXISTS ") + newCatalog;
|
||||
try {
|
||||
if (info.isLoggable(logger, Level.FINEST, catalogSql)) {
|
||||
logger.finest(info.getType().getSimpleName() + " createCatalog sql=" + catalogSql);
|
||||
@@ -1066,7 +1078,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
private <T> int updateEntityDBStatement(List<Statement> stmtsRef, final JdbcConnection conn, final EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
private <T> int updateEntityDBStatement(List<Statement> stmtsRef, JdbcConnection conn, EntityInfo<T> info, T... entitys) throws SQLException {
|
||||
final long s = System.currentTimeMillis();
|
||||
String presql = null;
|
||||
PreparedStatement prestmt = null;
|
||||
@@ -1245,7 +1257,9 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
private <T> int updateColumnDBStatement(List<Statement> stmtsRef, final JdbcConnection conn, final EntityInfo<T> info, Flipper flipper, UpdateSqlInfo sql) throws SQLException { //String sql, boolean prepared, Object... blobs) {
|
||||
private <T> int updateColumnDBStatement(List<Statement> stmtsRef, final JdbcConnection conn,
|
||||
final EntityInfo<T> info, Flipper flipper, UpdateSqlInfo sql) throws SQLException { //String sql, boolean prepared, Object... blobs) {
|
||||
|
||||
final long s = System.currentTimeMillis();
|
||||
int c = -1;
|
||||
String firstTable = null;
|
||||
@@ -1355,7 +1369,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
sql.tables = Utility.remove(sql.tables, t);
|
||||
}
|
||||
if (logger.isLoggable(Level.FINE)) {
|
||||
logger.log(Level.FINE, "updateColumn, old-tables: " + Arrays.toString(oldTables) + ", new-tables: " + Arrays.toString(sql.tables));
|
||||
logger.log(Level.FINE, "updateColumn, old-tables: " + Arrays.toString(oldTables)
|
||||
+ ", new-tables: " + Arrays.toString(sql.tables));
|
||||
}
|
||||
if (sql.tables.length == 0) { //分表全部不存在
|
||||
return 0;
|
||||
@@ -1397,12 +1412,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T, N extends Number> CompletableFuture<Map<String, N>> getNumberMapDBAsync(EntityInfo<T> info, String[] tables, String sql, FilterNode node, FilterFuncColumn... columns) {
|
||||
protected <T, N extends Number> CompletableFuture<Map<String, N>> getNumberMapDBAsync(EntityInfo<T> info,
|
||||
String[] tables, String sql, FilterNode node, FilterFuncColumn... columns) {
|
||||
return supplyAsync(() -> getNumberMapDB(info, tables, sql, node, columns));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T, N extends Number> Map<String, N> getNumberMapDB(EntityInfo<T> info, String[] tables, String sql, FilterNode node, FilterFuncColumn... columns) {
|
||||
protected <T, N extends Number> Map<String, N> getNumberMapDB(EntityInfo<T> info,
|
||||
String[] tables, String sql, FilterNode node, FilterFuncColumn... columns) {
|
||||
JdbcConnection conn = null;
|
||||
final Map map = new HashMap<>();
|
||||
final long s = System.currentTimeMillis();
|
||||
@@ -1499,12 +1516,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Number> getNumberResultDBAsync(EntityInfo<T> info, String[] tables, String sql, FilterFunc func, Number defVal, String column, FilterNode node) {
|
||||
protected <T> CompletableFuture<Number> getNumberResultDBAsync(EntityInfo<T> info, String[] tables,
|
||||
String sql, FilterFunc func, Number defVal, String column, FilterNode node) {
|
||||
return supplyAsync(() -> getNumberResultDB(info, tables, sql, func, defVal, column, node));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> Number getNumberResultDB(EntityInfo<T> info, String[] tables, String sql, FilterFunc func, Number defVal, String column, FilterNode node) {
|
||||
protected <T> Number getNumberResultDB(EntityInfo<T> info, String[] tables,
|
||||
String sql, FilterFunc func, Number defVal, String column, FilterNode node) {
|
||||
JdbcConnection conn = null;
|
||||
final long s = System.currentTimeMillis();
|
||||
Statement stmt = null;
|
||||
@@ -1547,7 +1566,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
tables = Utility.remove(tables, t);
|
||||
}
|
||||
if (logger.isLoggable(Level.FINE)) {
|
||||
logger.log(Level.FINE, "getNumberResult, old-tables: " + Arrays.toString(oldTables) + ", new-tables: " + Arrays.toString(tables));
|
||||
logger.log(Level.FINE, "getNumberResult, old-tables: " + Arrays.toString(oldTables)
|
||||
+ ", new-tables: " + Arrays.toString(tables));
|
||||
}
|
||||
if (tables.length == 0) { //分表全部不存在
|
||||
return defVal;
|
||||
@@ -1587,12 +1607,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T, K extends Serializable, N extends Number> CompletableFuture<Map<K, N>> queryColumnMapDBAsync(EntityInfo<T> info, String[] tables, String sql, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) {
|
||||
protected <T, K extends Serializable, N extends Number> CompletableFuture<Map<K, N>> queryColumnMapDBAsync(EntityInfo<T> info,
|
||||
String[] tables, String sql, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) {
|
||||
return supplyAsync(() -> queryColumnMapDB(info, tables, sql, keyColumn, func, funcColumn, node));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMapDB(EntityInfo<T> info, String[] tables, String sql, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) {
|
||||
protected <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMapDB(EntityInfo<T> info, String[] tables,
|
||||
String sql, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) {
|
||||
JdbcConnection conn = null;
|
||||
final long s = System.currentTimeMillis();
|
||||
Map<K, N> rs = new LinkedHashMap<>();
|
||||
@@ -1673,12 +1695,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T, K extends Serializable, N extends Number> CompletableFuture<Map<K[], N[]>> queryColumnMapDBAsync(EntityInfo<T> info, String[] tables, String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) {
|
||||
protected <T, K extends Serializable, N extends Number> CompletableFuture<Map<K[], N[]>> queryColumnMapDBAsync(EntityInfo<T> info,
|
||||
String[] tables, String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) {
|
||||
return supplyAsync(() -> queryColumnMapDB(info, tables, sql, funcNodes, groupByColumns, node));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T, K extends Serializable, N extends Number> Map<K[], N[]> queryColumnMapDB(EntityInfo<T> info, String[] tables, String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) {
|
||||
protected <T, K extends Serializable, N extends Number> Map<K[], N[]> queryColumnMapDB(EntityInfo<T> info, String[] tables,
|
||||
String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) {
|
||||
JdbcConnection conn = null;
|
||||
Map rs = new LinkedHashMap<>();
|
||||
final long s = System.currentTimeMillis();
|
||||
@@ -1818,12 +1842,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<T> findDBAsync(EntityInfo<T> info, String[] tables, String sql, boolean onlypk, SelectColumn selects, Serializable pk, FilterNode node) {
|
||||
protected <T> CompletableFuture<T> findDBAsync(EntityInfo<T> info, String[] tables, String sql, boolean onlypk,
|
||||
SelectColumn selects, Serializable pk, FilterNode node) {
|
||||
return supplyAsync(() -> findDB(info, tables, sql, onlypk, selects, pk, node));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T findDB(EntityInfo<T> info, String[] tables, String sql, boolean onlypk, SelectColumn selects, Serializable pk, FilterNode node) {
|
||||
protected <T> T findDB(EntityInfo<T> info, String[] tables, String sql, boolean onlypk,
|
||||
SelectColumn selects, Serializable pk, FilterNode node) {
|
||||
JdbcConnection conn = null;
|
||||
final long s = System.currentTimeMillis();
|
||||
PreparedStatement prestmt = null;
|
||||
@@ -1896,12 +1922,14 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Serializable> findColumnDBAsync(EntityInfo<T> info, final String[] tables, String sql, boolean onlypk, String column, Serializable defValue, Serializable pk, FilterNode node) {
|
||||
protected <T> CompletableFuture<Serializable> findColumnDBAsync(EntityInfo<T> info, final String[] tables,
|
||||
String sql, boolean onlypk, String column, Serializable defValue, Serializable pk, FilterNode node) {
|
||||
return supplyAsync(() -> findColumnDB(info, tables, sql, onlypk, column, defValue, pk, node));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> Serializable findColumnDB(EntityInfo<T> info, String[] tables, String sql, boolean onlypk, String column, Serializable defValue, Serializable pk, FilterNode node) {
|
||||
protected <T> Serializable findColumnDB(EntityInfo<T> info, String[] tables,
|
||||
String sql, boolean onlypk, String column, Serializable defValue, Serializable pk, FilterNode node) {
|
||||
JdbcConnection conn = null;
|
||||
final long s = System.currentTimeMillis();
|
||||
PreparedStatement prestmt = null;
|
||||
@@ -1983,7 +2011,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Boolean> existsDBAsync(EntityInfo<T> info, final String[] tables, String sql, boolean onlypk, Serializable pk, FilterNode node) {
|
||||
protected <T> CompletableFuture<Boolean> existsDBAsync(EntityInfo<T> info, final String[] tables,
|
||||
String sql, boolean onlypk, Serializable pk, FilterNode node) {
|
||||
return supplyAsync(() -> existsDB(info, tables, sql, onlypk, pk, node));
|
||||
}
|
||||
|
||||
@@ -2117,7 +2146,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Sheet<T>> querySheetDBAsync(EntityInfo<T> info, final boolean readCache, boolean needTotal, final boolean distinct, SelectColumn selects, Flipper flipper, FilterNode node) {
|
||||
protected <T> CompletableFuture<Sheet<T>> querySheetDBAsync(EntityInfo<T> info, final boolean readCache,
|
||||
boolean needTotal, final boolean distinct, SelectColumn selects, Flipper flipper, FilterNode node) {
|
||||
return supplyAsync(() -> querySheetDB(info, readCache, needTotal, distinct, selects, flipper, node));
|
||||
}
|
||||
|
||||
@@ -2156,7 +2186,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> Sheet<T> querySheetDB(EntityInfo<T> info, final boolean readCache, boolean needTotal, final boolean distinct, SelectColumn selects, Flipper flipper, FilterNode node) {
|
||||
protected <T> Sheet<T> querySheetDB(EntityInfo<T> info, final boolean readCache, boolean needTotal,
|
||||
final boolean distinct, SelectColumn selects, Flipper flipper, FilterNode node) {
|
||||
if (!needTotal && !distinct && selects == null && flipper == null && node == null && info.getTableStrategy() == null) {
|
||||
return querySheetFullListDB(info);
|
||||
}
|
||||
@@ -2310,14 +2341,16 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
String listSubSql;
|
||||
StringBuilder union = new StringBuilder();
|
||||
if (tables.length == 1) {
|
||||
listSubSql = "SELECT " + (distinct ? "DISTINCT " : "") + info.getQueryColumns("a", selects) + " FROM " + tables[0] + " a" + joinAndWhere;
|
||||
listSubSql = "SELECT " + (distinct ? "DISTINCT " : "") + info.getQueryColumns("a", selects)
|
||||
+ " FROM " + tables[0] + " a" + joinAndWhere;
|
||||
} else {
|
||||
int b = 0;
|
||||
for (String table : tables) {
|
||||
if (union.length() > 0) {
|
||||
union.append(" UNION ALL ");
|
||||
}
|
||||
union.append("SELECT ").append(info.getQueryColumns("a", selects)).append(" FROM ").append(table).append(" a").append(joinAndWhere);
|
||||
union.append("SELECT ").append(info.getQueryColumns("a", selects))
|
||||
.append(" FROM ").append(table).append(" a").append(joinAndWhere);
|
||||
}
|
||||
listSubSql = "SELECT " + (distinct ? "DISTINCT " : "") + info.getQueryColumns("a", selects) + " FROM (" + (union) + ") a";
|
||||
}
|
||||
@@ -2329,15 +2362,18 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
} else {
|
||||
if (readCache && info.isLoggable(logger, Level.FINEST, listSql)) {
|
||||
logger.finest(info.getType().getSimpleName() + " query sql=" + listSql + (flipper == null || flipper.getLimit() < 1 ? "" : (" LIMIT " + flipper.getLimit() + " OFFSET " + flipper.getOffset())));
|
||||
logger.finest(info.getType().getSimpleName() + " query sql=" + listSql
|
||||
+ (flipper == null || flipper.getLimit() < 1 ? "" : (" LIMIT " + flipper.getLimit() + " OFFSET " + flipper.getOffset())));
|
||||
}
|
||||
}
|
||||
if (mysqlOrPgsql && needTotal) {
|
||||
String countSubSql;
|
||||
if (tables.length == 1) {
|
||||
countSubSql = "SELECT " + (distinct ? "DISTINCT COUNT(" + info.getQueryColumns("a", selects) + ")" : "COUNT(*)") + " FROM " + tables[0] + " a" + joinAndWhere;
|
||||
countSubSql = "SELECT " + (distinct ? "DISTINCT COUNT(" + info.getQueryColumns("a", selects) + ")" : "COUNT(*)")
|
||||
+ " FROM " + tables[0] + " a" + joinAndWhere;
|
||||
} else {
|
||||
countSubSql = "SELECT " + (distinct ? "DISTINCT COUNT(" + info.getQueryColumns("a", selects) + ")" : "COUNT(*)") + " FROM (" + (union) + ") a";
|
||||
countSubSql = "SELECT " + (distinct ? "DISTINCT COUNT(" + info.getQueryColumns("a", selects) + ")" : "COUNT(*)")
|
||||
+ " FROM (" + (union) + ") a";
|
||||
}
|
||||
countSql = countSubSql;
|
||||
if (readCache && info.isLoggable(logger, Level.FINEST, countSql)) {
|
||||
@@ -2498,7 +2534,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
try {
|
||||
conn.setAutoCommit(true);
|
||||
if (logger.isLoggable(Level.FINEST)) {
|
||||
logger.finest("executeQuery sql=" + sql);
|
||||
logger.finest("nativeQuery sql=" + sql);
|
||||
}
|
||||
final Statement stmt = conn.createQueryStatement();
|
||||
if (consumer != null) {
|
||||
@@ -2526,7 +2562,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
try {
|
||||
conn.setAutoCommit(true);
|
||||
if (logger.isLoggable(Level.FINEST)) {
|
||||
logger.finest("executeQuery sql=" + sinfo.getNativeSql());
|
||||
logger.finest("nativeQuery sql=" + sinfo.getNativeSql());
|
||||
}
|
||||
V rs;
|
||||
if (sinfo.isEmptyNamed()) {
|
||||
@@ -2570,7 +2606,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
try {
|
||||
conn.setAutoCommit(true);
|
||||
if (logger.isLoggable(Level.FINEST)) {
|
||||
logger.finest("executeQuery sql=" + sinfo.nativeSql);
|
||||
logger.finest("nativeQuerySheet sql=" + sinfo.nativeSql);
|
||||
}
|
||||
long total = -1;
|
||||
List<V> list;
|
||||
@@ -2633,7 +2669,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <V> CompletableFuture<V> nativeQueryAsync(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
public <V> CompletableFuture<V> nativeQueryAsync(String sql, BiConsumer<Object, Object> consumer,
|
||||
Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
return supplyAsync(() -> nativeQuery(sql, consumer, handler, params));
|
||||
}
|
||||
|
||||
@@ -2912,7 +2949,8 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
for (ResourceEvent event : events) {
|
||||
if (event.name().equals(DATA_SOURCE_URL) || event.name().endsWith("." + DATA_SOURCE_URL)) {
|
||||
newUrl = event.newValue().toString();
|
||||
} else if (event.name().equals(DATA_SOURCE_CONNECT_TIMEOUT_SECONDS) || event.name().endsWith("." + DATA_SOURCE_CONNECT_TIMEOUT_SECONDS)) {
|
||||
} else if (event.name().equals(DATA_SOURCE_CONNECT_TIMEOUT_SECONDS)
|
||||
|| event.name().endsWith("." + DATA_SOURCE_CONNECT_TIMEOUT_SECONDS)) {
|
||||
newConnectTimeoutSeconds = Integer.decode(event.newValue().toString());
|
||||
} else if (event.name().equals(DATA_SOURCE_USER) || event.name().endsWith("." + DATA_SOURCE_USER)) {
|
||||
newUser = event.newValue().toString();
|
||||
|
||||
@@ -28,6 +28,7 @@ public class DataNativeSqlInfo {
|
||||
//sql类型
|
||||
protected SqlMode sqlMode;
|
||||
|
||||
//根参数名, 如bean.userid、bean.username的根参数名为: bean
|
||||
protected final List<String> rootParamNames = new ArrayList<>();
|
||||
|
||||
@ConvertDisabled
|
||||
@@ -52,6 +53,6 @@ public class DataNativeSqlInfo {
|
||||
}
|
||||
|
||||
public enum SqlMode {
|
||||
SELECT, INSERT, DELETE, UPDATE, UPSERT, OTHERS;
|
||||
SELECT, INSERT, DELETE, UPDATE, OTHERS;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user